1 | comm
|
2 | ===
|
3 |
|
4 | 按行比较两个已排序的文件。
|
5 |
|
6 | ## 概要
|
7 |
|
8 | ```shell
|
9 | comm [OPTION]... FILE1 FILE2
|
10 | ```
|
11 |
|
12 | ## 主要用途
|
13 |
|
14 | - 按行比较两个已排序的文件。
|
15 | - 当`FILE1`或`FILE2`为`-`时,读取标准输入。
|
16 | - 无选项时输出三列,第一列为`FILE1`独有的行,第二列为`FILE2`独有的行,第三列为`FILE1`,`FILE2`共有的行。
|
17 |
|
18 |
|
19 | ## 选项
|
20 |
|
21 | ```shell
|
22 | -1 不输出第一列。
|
23 | -2 不输出第二列。
|
24 | -3 不输出第三列。
|
25 | --check-order 检查输入行是否正确的排序,即使它们确实是已排序过的。
|
26 | --nocheck-order 不检查输入行是否正确的排序。
|
27 | --output-delimiter=STR 使用STR作为输出列之间的分隔符而不是默认的TAB。
|
28 | --total 额外地增加第四列输出概要。
|
29 | -z, --zero-terminated 设置行终止符为NUL(空),而不是换行符。
|
30 | --help 显示帮助信息并退出。
|
31 | --version 显示版本信息并退出。
|
32 | ```
|
33 |
|
34 |
|
35 | ## 返回值
|
36 |
|
37 | 返回0表示成功,返回非0值表示失败。
|
38 |
|
39 | ## 例子
|
40 |
|
41 | 文本 `aaa.txt` 内容
|
42 |
|
43 | ```shell
|
44 | [root@localhost text]# cat aaa.txt
|
45 | aaa
|
46 | bbb
|
47 | ccc
|
48 | ddd
|
49 | eee
|
50 | 111
|
51 | 222
|
52 | ```
|
53 |
|
54 | 文本 `bbb.txt` 内容
|
55 |
|
56 | ```shell
|
57 | [root@localhost text]# cat bbb.txt
|
58 | bbb
|
59 | ccc
|
60 | aaa
|
61 | hhh
|
62 | ttt
|
63 | jjj
|
64 | ```
|
65 |
|
66 |
|
67 | 比较结果
|
68 |
|
69 | ```shell
|
70 | [root@localhost text]# comm --nocheck-order aaa.txt bbb.txt
|
71 | aaa
|
72 | bbb
|
73 | ccc
|
74 | aaa
|
75 | ddd
|
76 | eee
|
77 | 111
|
78 | 222
|
79 | hhh
|
80 | ttt
|
81 | jjj
|
82 | ```
|
83 |
|
84 | 输出的第一列只包含在aaa.txt中出现的行,第二列包含在bbb.txt中出现的行,第三列包含在aaa.txt和bbb.txt中相同的行。各列之间以制表符(\t)作为分隔符。
|
85 |
|
86 | ### 比较排序过的文档
|
87 |
|
88 | 先通过 sort 将文件内容排序:
|
89 |
|
90 | ```shell
|
91 | [root@localhost ~]# sort aaa.txt > aaa1.txt
|
92 | [root@localhost ~]# sort bbb.txt > bbb1.txt
|
93 | ```
|
94 |
|
95 | 比较结果:
|
96 |
|
97 | ```shell
|
98 | [root@localhost ~]# comm aaa1.txt bbb1.txt
|
99 | 111
|
100 | 222
|
101 | aaa
|
102 | bbb
|
103 | ccc
|
104 | ddd
|
105 | eee
|
106 | hhh
|
107 | jjj
|
108 | ttt
|
109 | ```
|
110 |
|
111 | ### 交集
|
112 |
|
113 | 打印两个文件的交集,需要删除第一列和第二列:
|
114 |
|
115 | ```shell
|
116 | [root@localhost text]# comm aaa.txt bbb.txt -1 -2
|
117 | bbb
|
118 | ccc
|
119 | ```
|
120 |
|
121 | ### 差集
|
122 |
|
123 | 通过删除不需要的列,可以得到aaa.txt和bbb.txt的差集:
|
124 |
|
125 | aaa.txt的差集
|
126 |
|
127 | ```shell
|
128 | [root@localhost text]# comm aaa.txt bbb.txt -2 -3
|
129 | aaa
|
130 | ddd
|
131 | eee
|
132 | 111
|
133 | 222
|
134 | ```
|
135 |
|
136 | bbb.txt的差集
|
137 |
|
138 | ```shell
|
139 | [root@localhost text]# comm aaa.txt bbb.txt -1 -3
|
140 | aaa
|
141 | hhh
|
142 | ttt
|
143 | jjj
|
144 | ```
|
145 |
|
146 |
|
147 | ### 注意
|
148 |
|
149 | 1. 该命令是`GNU coreutils`包中的命令,相关的帮助信息请查看`man -s 1 comm`,`info coreutils 'comm invocation'`。
|
150 |
|
151 |
|