使用shell对比两个文件内容

avatar 2020年4月11日18:06:19 评论 2,582 次浏览

在工作中,有时候需要对比两个文件的内容区别,但是有不知道如何进行比较。如果使用for循环一行一行的进行对比有点low了,下面看看不low的用法。

环境配置

我这里先创建了两个文件,然后在文件中创建了一些字符串,也可以使用数字代理。内容随便,做测试只要实现这个功能,所以内容不易过多。

[root@www.wulaoer.org wulaoer]# cat wulaoer.json 
golong
python3
python
devops
运维开发
[root@www.wulaoer.org wulaoer]# cat wolf.json 
python
python3
mysql
etcd
kubernetes

这个是我的两个文件内容,相同的也就是python,python3两个字符,下面我尝试使用四种方式进行比较。

使用grep对比

[root@www.wulaoer.org wulaoer]# cat wulaoer.json 
golong
python3
python
devops
运维开发
[root@www.wulaoer.org wulaoer]# cat wolf.json 
python
python3
mysql
etcd
kubernetes
[root@www.wulaoer.org wulaoer]# grep -vwf wulaoer.json wolf.json 
mysql
etcd
kubernetes

这里使用了反向匹配,前面是wulaoer.json文件匹配wolf.json,后面接着wolf.json匹配wulaoer.json,是针对整个文件内容做对比,不是文件行做对比

使用comm对比

[root@www.wulaoer.org wulaoer]# cat wulaoer.json 
golong
python3
python
devops
运维开发
[root@www.wulaoer.org wulaoer]# cat wolf.json 
python
python3
mysql
etcd
kubernetes
[root@www.wulaoer.org wulaoer]# comm -23 --nocheck-order wolf.json wulaoer.json 
python
mysql
etcd
kubernetes

comm是根据行做对比,不同行重复的内容不会去掉,这样对比的两个文件中会有重复的内容。

使用awk对比

[root@www.wulaoer.org wulaoer]# cat wulaoer.json 
golong
python3
python
devops
运维开发
[root@www.wulaoer.org wulaoer]# cat wolf.json 
python
python3
mysql
etcd
kubernetes
[root@www.wulaoer.org wulaoer]# cat wulaoer.json wolf.json | awk '!a[$1]++' 
golong
python3
python
devops
运维开发
mysql
etcd
kubernetes

使用wak得到合并后去重的结果,这样的对比会把两个文件都打开后然后进行去重。

使用diff对比

[root@www.wulaoer.org wulaoer]# cat wulaoer.json 
golong
python3
python
devops
运维开发
[root@www.wulaoer.org wulaoer]# cat wolf.json 
python
python3
mysql
etcd
kubernetes
[root@www.wulaoer.org wulaoer]# diff -w wulaoer.json wolf.json | grep \^\> | awk '{print$2}'
python3
mysql
etcd
kubernetes

这里使用的diff对比的两个文件也是根据行进行对比,不同行的重复内容对比不出来。更多diff命令详解请参考:https://www.wulaoer.org/?p=1058

以上就是两个文件内容和行的对比,可以根据自己的不同需求,选择不同的对比方式,主要是了解每个对比方式选择的是行还是内容,要不达不到自己想要的结果。

avatar

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: