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 命令及其选项,我们可以有效地比较文件并找出它们之间的差异。

更新于:2023年3月23日

浏览量:604

开启您的职业生涯

完成课程获得认证

开始学习
广告