Linux文件比较命令的Comm命令

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux文件比较命令的Comm命令相关的知识,希望对你有一定的参考价值。

如果想对两个有序的文件进行比较,可以使用comm命令。
语法:comm [- 123 ] file1 file2
说明:该命令是对两个已经排好序的文件进行比较。其中file1和file2是已排序的文件。comm读取这两个文件,然后生成三列输出:仅在file1中出现的行;仅在file2中出现的行;在两个文件中都存在的行。如果文件名用“- ”,则表示从标准输入读取。
comm -1 不显示只出现在第一个文件的行。
comm -2 不显示只出现在第二个文件的行。
comm -3 不显示同时出现在两个文件的行。
comm file1 file2 显示三列,第一列代表只出现在file1的行,第二列代表只出现在file2的行,第三列代表俩个文件同时出现的行
comm -12 显示两个文件同时出现的行 也就是交集
comm -13 显示只出现在第二个文件的行
comm -23 显示只出现在第一个文件的行
例如:假设要对文件myfile1和myfile2进行比较
$ cat myfile1
main( )

float a,b, i, j ,z ;
a=i=10 ; b=j=5 ;
z= i + j ;
printf(“z=%d\\\\\\\\n”,z) ;

$ cat myfile2
#include< stdio.h >
main( )

float i, j ,z ;
i=10 ; j=5 ;
z= i + j ;
printf(“z=%f\\\\\\\\n”,z) ;

$ comm - 12 myfile1 myfile2
main( )

z= i + j ;

就只显示文件myfile1和myfile2中共有的行。

参考技术A

请先给出明确答复:

解释原因:

      

有无解决办法:

Linux comm命令求出文件的交集差集

A(1,2,3)和B(3,4,5),A和B的交集是3,A对B的差集是1和2,B对A的差集是4和5,A和B求差的结果是1、2、4、5。

在Linux中可以使用comm命令求出这些集。

[root@xuexi tmp]# cat <<eof>set1.txt
> orange
> gold
> apple
> sliver
> steel
> iron
> eof
[root@xuexi tmp]# cat <<eof>set2.txt
> orange
> gold
> cookiee
> carrot
> eof

使用comm命令。

[root@xuexi tmp]# comm set1.txt set2.txt
apple
                orange
comm: file 1 is not in sorted order
comm: file 2 is not in sorted order
                gold
        cookiee
        carrot
silver
steel
iron

提示没有排序,所以comm必须要保证比较的文件是有序的。

[root@xuexi tmp]# sort set1.txt -o set1.txt;sort set2.txt -o set2.txt
[root@xuexi tmp]# comm set1.txt set2.txt                             
apple
        carrot
        cookiee
                gold
iron
                orange
silver
steel

结果中输出了3列,每一列使用制表符\\t隔开。第一列是set1.txt中有而set2.txt中没有的,第二列则是set2.txt中有而set1.txt中没有的,第三列是set1.txt和set2.txt中都有的。

根据这三列就可以求出交集、差集和求差。

交集就是第三列。使用-1和-2分别删除第一第二列就是第三列的结果。

[root@xuexi tmp]# comm set1.txt set2.txt -1 -2
gold
orange

A对B的差集就是第一列,B对A的差集就是第二列。

[root@xuexi tmp]# comm set1.txt set2.txt  -2 -3  # A对B的差集
apple
iron
silver
steel
[root@xuexi tmp]# comm set1.txt set2.txt  -1 -3   # B对A的差集
carrot
cookiee

A和B的求差就是第一列和第二列的组合。

[root@xuexi tmp]# comm set1.txt set2.txt  -3  
apple
        carrot
        cookiee
iron
silver
steel

但是这样分两列的结果不方便查看,应该进行处理使它们显示在同一列上。

[root@xuexi tmp]# comm set1.txt set2.txt  -3 | tr "\\t" "\\0"
apple
carrot
cookiee
iron
silver
steel

以上是关于Linux文件比较命令的Comm命令的主要内容,如果未能解决你的问题,请参考以下文章

linux命令 common 文件比较

每天One Linux 命令 | comm:比较两个已排过序的文件

比较两个排序好的文件的方法—— comm

Linux命令 比较文件

两个文件比较之comm命令

linux常用命令