👋 欢迎来到吴老二技术博客,专注运维 / 数据库 / 云原生
首页/运维服务/正文

使用shell对比两个文件内容

吴
吴老二
2020-04-11运维服务4408 次浏览0 条评论
在工作中,有时候需要对比两个文件的内容区别,但是有不知道如何进行比较。如果使用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 以上就是两个文件内容和行的对比,可以根据自己的不同需求,选择不同的对比方式,主要是了解每个对比方式选择的是行还是内容,要不达不到自己想要的结果。
文章底部广告位在后台「广告设置」填写广告代码后显示

评论 0

评论需 登录 后发表(注册并验证邮箱)。
还没有评论,来抢沙发~