介绍
Linux 是一个开源操作系统,它提供了各种强大而灵活的工具来管理和操作文件和数据。Linux 中必不可少的工具之一是“comm”命令,它用于逐行比较两个排序的文件。此命令可用于识别文件之间的公共行或差异。在本文中,我们将讨论 comm 命令、其语法和示例。
comm 命令的语法
comm命令的语法如下:
comm [OPTION]... FILE1 FILE2
这里,FILE1 和 FILE2 是两个需要比较的文件。与comm命令一起使用的选项是 -
-1 − 禁止打印第 1 列
-2 − 禁止打印第 2 列
-3 − 禁止打印公共线
-i − 在比较中忽略大小写差异
-u − 仅打印 FILE1 和 FILE2 特有的行
-z − 使用零字节而不是换行符作为行分隔符
--check-order − 检查输入是否正确排序,即使所有输入行都是可配对的
使用 comm 命令比较两个排序的文件
comm 命令用于比较两个排序的文件。如果文件未排序,则输出可能不正确。命令逐行比较两个文件,并在三列中显示输出。第一列显示第一个文件唯一的行,第二列显示第二个文件唯一的行,第三列显示两个文件中共有的行。
例
假设我们有两个排序文件:file1.txt 和 file2.txt。file1.txt 的内容为
apple
banana
grape
mango
orange
file2.txt的内容是
apple
banana
cherry
mango
watermelon
要比较这两个文件,我们可以使用以下命令
$ comm file1.txt file2.txt
此命令的输出将为
apple
banana
cherry
grape
mango
orange
watermelon
在输出中,file1.txt 特有的行显示在第一列中,file2.txt 特有的行显示在第二列中,两个文件中通用的行显示在第三列中。
使用 comm 命令比较两个未排序的文件
如果文件未排序,则 comm 命令的输出可能不正确。在这种情况下,我们可以在比较文件之前使用排序命令对文件进行排序。我们可以使用以下命令对文件进行排序
$ sort FILENAME > SORTED_FILENAME
这里,FILENAME 是需要排序的文件的名称,SORTED_FILENAME 是排序文件的名称。
例
假设我们有两个未排序的文件:file1.txt 和 file2.txt。file1.txt 的内容为
grape
apple
orange
banana
mango
file2.txt的内容是
mango
watermelon
cherry
apple
banana
要比较这两个文件,我们可以先对文件进行排序,然后使用 comm 命令进行比较。我们可以使用以下命令对文件进行排序
$ sort file1.txt > sorted_file1.txt
$ sort file2.txt > sorted_file2.txt
现在,我们可以使用 comm 命令来比较排序后的文件
$ comm sorted_file1.txt sorted_file2.txt
此命令的输出将为
apple
banana
cherry
grape
mango
orange
watermelon
正如我们所看到的,输出与前面的示例相同,其中文件已经排序。
比较文件时忽略大小写区别
comm 命令根据字符大小写比较文件。但是,有时我们可能希望在不考虑字符大小写的情况下比较文件。在这种情况下,我们可以将 -i 选项与 comm 命令一起使用。此选项告诉 comm 命令在比较文件时忽略大小写区别。
例
假设我们有两个文件:file1.txt 和 file2.txt。file1.txt 的内容为
Apple
banana
Grape
Mango
orange
file2.txt的内容是
apple
banana
cherry
mango
watermelon
为了在不考虑字符大小写的情况下比较这两个文件,我们可以使用以下命令
$ comm -i file1.txt file2.txt
此命令的输出将为
cherry
grape
orange
watermelon
正如我们所看到的,输出仅显示任一文件唯一的行,而不考虑字符大小写。
仅打印两个文件中的唯一行
有时,我们可能只想打印文件特有的行,而不是两个文件中共有的行。在这种情况下,我们可以将 -u 选项与 comm 命令一起使用。此选项告诉 comm 命令仅打印 FILE1 和 FILE2 特有的行。
例
假设我们有两个文件:file1.txt 和 file2.txt。file1.txt 的内容为
apple
banana
grape
mango
orange
file2.txt的内容是
apple
banana
cherry
mango
watermelon
要仅打印这两个文件特有的行,我们可以使用以下命令
$ comm -u file1.txt file2.txt
此命令的输出将为
cherry
grape
orange
watermelon
正如我们所看到的,输出仅显示任一文件唯一的行,而不显示两个文件中共有的行。
使用零字节作为行分隔符
默认情况下,comm 命令使用换行符作为行分隔符。但是,有时我们可能希望使用零字节作为行分隔符。在这种情况下,我们可以将 -z 选项与 comm 命令一起使用。此选项告诉 comm 命令使用零字节作为行分隔符。
例
假设我们有两个文件:file1.txt 和 file2.txt。file1.txt 的内容为
apple
banana
grape
mango
orange
file2.txt的内容是
apple
banana
cherry
mango
watermelon
要在比较这两个文件时使用零字节作为行分隔符,我们可以使用以下命令
$ comm -z file1.txt file2.txt
此命令的输出将为
apple�banana�cherry�grape�mango�orange�watermelon�
正如我们所看到的,output 使用零字节作为行分隔符,而不是换行符。
结论
comm 命令是一个强大的工具,它允许我们逐行比较两个文件。我们可以将各种选项与comm命令一起使用,以根据我们的要求自定义输出。本文中讨论的示例演示了我们可以使用 comm 命令的各种方法。通过了解comm命令及其选项,我们可以有效地比较文件并找出它们之间的差异。