交集和差集操作在集合中常见

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

发表评论

邮箱地址不会被公开。 必填项已用*标注