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
原文地址:https://www.cnblogs.com/xlij1205/p/10564020.html