比较两个单行文件的方法就我知道的而言有4种
-
用diff
-
用grep
-
用comm
-
用uniq
[root@hxy ~]# echo "`seq 5`" >file1;cat file1
1
2
3
4
5
[root@hxy ~]# echo "`seq 2 7`" >file2;cat file2
2
3
4
5
6
7
1.用diff -c file1多的是"-"file2多的是"+"按这个就可以过滤出来了
[root@hxy ~]# diff -c file1 file2
*** file1 2017-08-25 15:04:58.180986783 +0800
--- file2 2017-08-25 15:05:07.805865181 +0800
***************
*** 1,5 ****
- 1
2
3
4
5
--- 1,6 ----
2
3
4
5
+ 6
+ 7
2.用grep -vwf,下面的输出大家都可以看的很清楚了
[root@hxy ~]# grep -vwf file1 file2
6
7
[root@hxy ~]# grep -vwf file2 file1
1
[root@hxy ~]# grep -wf file2 file1
2
3
4
5
grep -vwf file1 file2 #输出文件1没有而文件2有的
grep -vwf file2 file1 #输出文件2没有而文件1有的
grep -wf file2 file1 #输出他们的交集
grep -f 1.list 2.list #输出2.list中包含1.list中行的行
参数 | 功能描述 |
---|---|
-f | 指定规则文件(如上述的1.list和3.list),其内容含有一个或多个规则样式,让grep查找符合规则条件的文件内容,格式为每行一个规则样式。 |
-w | 匹配整词,精确地单词,单词的两边必须是非字符符号(即不能是字母数字或下划线) |
-v | 反转匹配,选择没有被匹配到的内容。 |
3.用comm
[root@hxy ~]# comm file1 file2
1
2
3
4
5
6
7
[root@hxy ~]# comm file1 file2 -13
6
7
[root@hxy ~]# comm file1 file2 -12
2
3
4
5
[root@hxy ~]# comm file1 file2 -23
1
comm命令会把文件分为三列,第一列是file1有而file2没有的
第二列是file2有而file1没有的
第三列是file1和file2没有的共有的
分别对应1 2 3
-1是不显示第一列
-2是不显示第二列
-3是不显示第三列
4.用uniq 就只能做交集和差集的比对
[root@hxy ~]# sort file1 file2|uniq
1
2
3
4
5
6
7
[root@hxy ~]# sort file1 file2|uniq -u
1
6
7
[root@hxy ~]# sort file1 file2|uniq -d
2
3
4
5
-u是差集-d是交集
参考:https://blog.51cto.com/853056088/1959326