交集和差集操作在集合中常见
comm命令就用于两个文件之间的比较,以便我们求同存异
假如有如下的两个文件
cat A.txt
apple
orange
gold
silver
stell
iron
cat B.txt
orange
gold
cookies
carrot
然后在使用comm比较之前,需要先进行排序sort A.txt -o A.txt
sort B.txt -o B.txt
comm A.txt B.txt
apple
carrot
cookies
gold
iron
orange
silver
stell
然后不同的列表示不同的行
第一列只包含在A.txt中出现的行,第二列包含了只在B.txt中出现的行,第三列包含了A.txt和B.txt中相同的行,各个行之间以制表符\t来作为定界符
然后我们可以指定输出哪些行,通过删除的方式
-1 从输出中删除第一列
-2 从输出中删除第二列
-3 从输出中删除第三列
为了打印出交集 就需要删除第一 第二列
comm A.txt B.txt -1 -2
为了只打印出两者的不相交的集合,可以只输出第一列和第二列
comm A.txt B.txt -3
当然,这样命令获取到的输出是具有空格的,不方便使用的,可以通过管道来获取到comm的输出,删除行首的\t字符,sed中的s表示替换 substitute /^\t/匹配行首的\t
^表示行首 // 两个/操作符之间没有任何字符,替换行首的\t的字符串,这样就删除了所有行首的\t
这样获取差集的方式很简单了
可以比较两个文件,要么值打印在只A中存在的行,或者只B中存在的行
A中的差集获取方式
comm A.txt B.txt -2 -3
B中的差集获取方式
comm A.txt B.txt -1 -3