一、常用用法
1 | comm FILE1 FILE2 |
二、含义与选项
2.1、含义
对于两个已排序的文件,逐行比对。
打印结果有3列:第1列,只属于“FILE1”的行;第2列,只属于“FILE2”的行;第3列,既属于“FILE1”,又属于“FILE2”的行。
2.2、选项表示的意思
“FILE1,FILE2”:指代已排序文件“FILE1”和“FILE2”
三、其他
3.1、“LC_COLLATE”等环境变量
由于涉及到两个字符串的比较等,故而程序实现中使用“LC_COLLATE”等环境变量,最终结果受到“LC_COLLATE”等环境变量的控制。
3.2、排序策略
comm命令实现设定的排序策略是“按照字典序排序”。两个已排序文件使用的排序策略组合共有3种情况。
3.2.1、情况1
一个排序文件按照字典序排序,另外一个排序文件按照非字典序(其他排序策略)排序。显而易见,在这种情况下,comm命令的执行结果会比较奇怪。
3.2.2、情况2
两个排序文件都按照同一个排序策略(非字典序)排序,这种情况下,comm命令的执行结果还是不能达到我们的预期。
接下来通过例子说明,有文件“c.txt”和“d.txt”,内容分别如下所示:
1 | 001 |
1 | 001 |
即已按照“数值大小”排序,执行“逐行比对”过程,我们的预期结果是:“3”只属于“c.txt”,“5,06,007”只属于“d.txt”,“001,02,10”共属于两个文件。
现在执行comm c.txt d.txt
命令,得到如图1所示结果,不能达到预期。
图1
执行comm --nocheck-order c.txt d.txt
命令,得到如图2所示结果,也不能达到预期。
图2
3.2.3、情况3
两个文件都已按照字典序排序,这符合comm命令实现的设定,comm命令的执行结果能够达到预期。执行下述命令,得到如图3所示结果,结果符合预期。
1 | sort c.txt > cc.txt |
图3
参考文献
[1]man comm