Linux comm 命令

介绍

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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容