man手册
[hadoop@master ~]$ man comm
NAME
comm - compare two sorted files line by line
SYNOPSIS
comm [OPTION]... FILE1 FILE2
DESCRIPTION
Compare sorted files FILE1 and FILE2 line by line.
With no options, produce three-column output. Column one contains lines unique to FILE1, column two contains
lines unique to FILE2, and column three contains lines common to both files.
-1 suppress column 1 (lines unique to FILE1)
-2 suppress column 2 (lines unique to FILE2)
-3 suppress column 3 (lines that appear in both files)
以上是comm命令man手册的说明,要注意两个文件必须是排序和唯一(sorted and unique)的,默认输出为三列,第一列为是A-B,第二列B-A,第三列为A交B。
示例文件
A.txt文件代表集合A,B.txt代表集合B,即:A={a,b,g,c},B={f,b,a,r}
[hadoop@master test]$ cat A.txt
a
b
g
c
[hadoop@master test]$ cat B.txt
f
b
a
r
直接运行
先来看看直接运行comm命令的效果
[hadoop@master test]$ comm A.txt B.txt
a
b
f
comm: 文件2 没有被正确排序
b
a
g
comm: 文件1 没有被正确排序
c
r
输入文件应该先进行排序,并且保证唯一。
可以看到,默认输出为三列,第一列为是A-B即只出现在A中而不出现在B中的元素,第二列B-A即只出现在B中而不出现在A中的元素,第三列为A交B即既出现在A中又出现在B中的元素。
[hadoop@master test]$ comm < (sort A.txt | uniq) < (sort B.txt | uniq)
-bash: syntax error near unexpected token `('
[hadoop@master test]$ comm < (sort A.txt | uniq)
-bash: syntax error near unexpected token `('
#A={a,b,g,c},B={f,b,a,r}。第一列为A-B={c,g};第二列为B-A={f,r},第三列为A交B={a,b}
[hadoop@master test]$ comm
a
b
c
f
g
r
只求差集或交集
使用comm命令行参数:
-1 不显示只在第1个文件里出现过的列。
-2 不显示只在第2个文件里出现过的列。
-3 不显示只在第1和第2个文件里出现过的列。
#求A-B
[hadoop@master test]$ comm -23
c
g
#求B-A
[hadoop@master test]$ comm -13
f
r
#求你A交B
[hadoop@master test]$ comm -12
a
b