# cat aaa.txt aaabbbcccdddeee111222# cat bbb.txt bbbcccaaahhhtttjjj# comm aaa.txt bbb.txt aaa bbb ccc aaadddeee111222 hhh ttt jjj第一列 第二列 第三列输出的第一列只包含在aaa.txt中出现的行,第二列包含在bbb.txt中出现的行,第三列包含在aaa.txt和bbb.txt中相同的行。各列是以制表符(\t)作为定界符。 格式化输出选项: -1:从输出中删除第一列 -2:从输出中删除第二列 -3:从输出中删除第三列 1.1 交集 打印两个文件的交集,需要删除第一列和第二列:
# comm aaa.txt bbb.txt -1 -2bbbccc1.2 求差 打印出两个文件中不相同的行,需要删除第三列:
# comm aaa.txt bbb.txt -3 | sed 's/^\t//'aaaaaadddeee111222hhhtttjjjsed 's/^\t//' 是将制表符(\t)删除,以便把两列合并成一列。 1.3 差集 通过删除不需要的列,可以得到aaa.txt和bbb.txt的差集: 1.3.1 aaa.txt的差集
# comm aaa.txt bbb.txt -2 -3aaadddeee1112221.3.2 bbb.txt的差集
# comm aaa.txt bbb.txt -1 -3aaahhhtttjjj[warning] 注意1: 1. comm命令要求输入文件的内容必须是排序且唯一的 2. comm -12 表示取消第一列和第二列的输出,即只输出第三列。[/warning] 2. grep命令 grep命令是常用来搜索文本内容的,根据输入的pattern,输出命中的内容。可以利用它的文件输入pattern特性,来求两个文件的交集。 2.1 交集
# grep -F -f aaa.txt bbb.txt bbbcccaaa2.2 差集 2.2.1 aaa.txt - bbb.txt的差集
# grep -F -v -f bbb.txt aaa.txt dddeee1112222.2.2 bbb.txt - aaa.txt的差集
# grep -F -v -f aaa.txt bbb.txt hhhtttjjj[warning] 注意2: 1. grep求交集不要求输入文件是排序的,但最好是唯一的 2. 差集时注意输入文件的顺序[/warning] 大家可能注意到了,comm与grep求差集的结果却不同,当我们在使用comm命令前,先对aaa.txt和bbb.txt进行排序操作后,再比较。结果如下:
# sort aaa.txt > aaa1.txt# sort bbb.txt > bbb1.txt# comm aaa1.txt bbb1.txt 111222 aaa bbb cccdddeee hhh jjj tttA-B B-A这结果才与grep的结果相同。 转载请注明来自 : http://www.ttlsa.com/html/3726.html