Linux下comm命令比较两个文件的异同
在操作文件的时候我们可能需要找到两个文件的交集、并集或补集,Linux系统下可以用一个简单的命令实现--comm命令,不同于diff命令,它需要事先排好序,但不是一行一行的比较差异,下面是帮助文档说明
用法:comm [选项]... 文件1 文件2 逐行比较已排序的文件文件1 和文件2。 如果不附带选项,程序会生成三列输出。第一列包含文件1 特有的行,第二列包含 文件2 特有的行,而第三列包含两个文件共有的行。 -1 不输出文件1 特有的行 -2 不输出文件2 特有的行 -3 不输出两个文件共有的行 --check-order 检查输入是否被正确排序,即使所有输入行均成对 --nocheck-order 不检查输入是否被正确排序 --output-delimiter=STR 依照STR 分列 --help 显示此帮助信息并退出 --version 显示版本信息并退出 注意,比较操作遵从"LC_CPLLATE"所定义的规则。 示例: comm -12 文件1 文件2 只打印在文件1和文件2中都有的行 comm -3 文件1 文件2 打印在文件1中有,而文件2中没有的行。反之亦然。
$cat ll.txt 1 2 3 4 5 6 $cat ll2.txt 2 4 3 5 6 7 comm -12 ll.txt ll2.txt $comm -12 ll ll2 2 4 comm: 文件2 没有被正确排序 5 6 ------------------------- $comm -3 ll.txt ll2.txt 1 3 comm: 文件2 没有被正确排序 3 7 我们会看到3没有被正常排序,comm会给出警告,并把3规为两个文件互不相同的项 我们可以用--nocheck-order参数消除警告,但是不改变结果 $comm -12 ll.txt ll3.txt --nocheck-order 2 3 4 5 6 --check-order 参数只输出正确排序之前的项 $comm -12 ll.txt ll2.txt --check-order 2 4 comm: 文件2 没有被正确排序
$sort ll2.txt > ll3.txt $comm -12 ll.txt ll3.txt 2 3 4 5 6
总结:
comm命令可比较两个文件,一般要求文件需要事先排序,它与diff命令的区别在于,comm不是逐行比对的,可以提取出两个文件的相同部分和特异部分
具体例子和详细说明见以下链接: https://linux.cn/article-8583-1.html