Linux comm 命令
简介
Linux是一个开源操作系统,它提供了广泛的强大而灵活的工具来管理和操作文件和数据。“comm”命令是Linux中一个重要的工具,用于逐行比较两个已排序的文件。此命令可用于识别文件的公共行或差异。本文将讨论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 命令对文件进行排序。可以使用以下命令对文件进行排序:
$ 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 命令根据字符的大小写进行文件比较。但是,有时我们可能希望在不考虑字符大小写的情况下比较文件。在这种情况下,可以在 comm 命令中使用 -i 选项。此选项告诉 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
正如我们所看到的,输出只显示任何文件中独有的行,而不考虑字符的大小写。
只打印来自两个文件的唯一行
有时,我们可能只想打印文件中唯一的行,而不是两个文件中都存在的行。在这种情况下,可以在 comm 命令中使用 -u 选项。此选项告诉 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 命令使用换行符作为行分隔符。但是,有时我们可能希望使用零字节作为行分隔符。在这种情况下,可以在 comm 命令中使用 -z 选项。此选项告诉 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�
正如我们所看到的,输出使用零字节作为行分隔符,而不是换行符。
结论
comm 命令是一个强大的工具,允许我们逐行比较两个文件。我们可以使用各种选项与 comm 命令结合使用,以根据我们的需求定制输出。本文中讨论的示例演示了我们可以使用 comm 命令的各种方法。通过了解 comm 命令及其选项,我们可以有效地比较文件并找出它们之间的差异。