comm
是一个用于比较两个已排序文件的 Linux 命令行工具。它会逐行比较两个文件的内容,并输出三个列:仅在第一个文件中出现的行、仅在第二个文件中出现的行以及两个文件中共有的行。为了正确使用 comm
,输入的文件必须是按字典顺序排序的。
comm [选项] 文件1 文件2
-1
:抑制仅在第一个文件中出现的行(第一列)。-2
:抑制仅在第二个文件中出现的行(第二列)。-3
:抑制两个文件中共有的行(第三列)。-u
:以未排序的方式处理输入(某些实现支持)。首先,我们需要创建两个已排序的文件。如果文件未排序,可以使用 sort
命令对文件进行排序。
假设我们有两个文件 file1.txt
和 file2.txt
:
# file1.txt 内容
apple
banana
cherry
# file2.txt 内容
banana
cherry
date
确保文件已排序:
sort file1.txt -o file1.txt
sort file2.txt -o file2.txt
comm
进行比较运行以下命令来比较两个文件:
comm file1.txt file2.txt
输出结果:
banana
cherry
apple
date
解释:
file1.txt
中出现的行(如 apple
)。file2.txt
中出现的行(如 date
)。banana
和 cherry
)。如果我们只关心两个文件中共有的行,可以使用 -12
选项:
comm -12 file1.txt file2.txt
输出结果:
banana
cherry
如果我们只关心 file1.txt
中独有的行,可以使用 -23
选项:
comm -23 file1.txt file2.txt
输出结果:
apple
同样地,如果我们只关心 file2.txt
中独有的行,可以使用 -13
选项:
comm -13 file1.txt file2.txt
输出结果:
date
comm
假设输入文件是按字典顺序排序的。如果文件未排序,可能会导致错误的输出。comm
对空白字符敏感。如果两行之间有额外的空格或制表符,它们可能被视为不同的行。diff
命令:与 comm
类似,diff
也可以比较两个文件的不同之处,但它不要求文件已排序,并且可以提供更详细的差异信息。grep
命令:可以通过 grep
来查找一个文件中是否包含另一个文件中的内容。sort
命令:用于对文件内容进行排序,是 comm
的必要前置步骤。