Linux 中的 comm 命令和示例
comm 逐行比较两个已排序的文件并写入标准输出;常见的线条和独特的线条。
假设您有两个人员列表,并且要求您找出其中一个可用而另一个中不可用的姓名,或者甚至是两者共有的姓名。 comm是帮助您实现这一目标的命令。它需要两个排序的文件,逐行比较。
在进一步讨论之前,首先让我们检查一下comm命令的语法:
句法 :
$comm [OPTION]... FILE1 FILE2
- 使用 comm 时,我们试图比较两个文件,因此 comm 命令的语法需要两个文件名作为参数。
- 在没有使用 OPTION 的情况下,comm 生成三列输出,其中第一列包含 FILE1 独有的行,第二列包含 FILE2 独有的行,第三列和最后一列包含两个文件共有的行。
- comm 命令仅在比较两个已排序的文件时才有效。
示例:假设有两个已排序的文件 file1.txt 和 file2.txt,现在我们将使用 comm 命令来比较这两个文件。
// displaying contents of file1 // $cat file1.txt Apaar Ayush Rajput Deepak Hemant // displaying contents of file2 // $cat file2.txt Apaar Hemant Lucky Pranjal Thakral
现在,运行 comm 命令:
// using comm command for comparing two files // $comm file1.txt file2.txt Apaar Ayush Rajput Deepak Hemant Lucky Pranjal Thakral
上面的输出包含三列,其中第一列由零制表符分隔并包含仅存在于 file1.txt 中的名称,第二列包含仅存在于 file2.txt 中并由一个制表符分隔的名称,第三列包含两者共有的名称文件,并从行的开头用两个制表符分隔。
这是未使用选项时 comm 命令生成的默认输出模式。comm 命令的选项:
1. -1 :抑制第一列(第一个文件独有的行)。
2. -2 :抑制第二列(第二个文件独有的行)。
3. -3 :抑制第三列(两个文件共有的行)。
4. – -check-order :检查输入是否正确排序,即使所有输入行都是可配对的。
5. – -nocheck-order :不检查输入是否正确排序。
6. – -output-delimiter=STR :用字符串STR 分隔列
7. --help :显示帮助信息,并退出。
8. – -version :输出版本信息,并退出。
注意:选项 4 到 8 很少使用,但选项 1 到 3 在用户想要的期望输出方面非常有用。使用带有选项的 comm
1. 使用 -1 、-2 和 -3 选项:借助示例可以轻松解释这三个选项的使用:
//suppress first column using -1// $comm -1 file1.txt file2.txt Apaar Hemant Lucky Pranjal Thakral //suppress second column using -2// $comm -2 file1.txt file2.txt Apaar Ayush Rajput Deepak Hemant //suppress third column using -3// $comm -3 file1.txt file2.txt Ayush Rajput Deepak Lucky Pranjal Thakral
请注意,您还可以同时使用这些选项来抑制多列,如下所示:
//...suppressing multiple columns...// $comm -12 file1.txt file2.txt Apaar Hemant /* using -12 together suppressed both first and second columns */
2. 使用--check-order 选项:此选项用于检查输入文件是否已排序,如果两个文件中的任何一个排序错误,则 comm 命令将失败并显示错误消息。
$comm - -check-order f1.txt f2.txt
如果 f1.txt 和 f2.txt 都被排序,上面的命令会产生正常的输出,如果两个文件中的任何一个没有被排序,它只会给出一条错误消息。
3. 使用--nocheck-order 选项:如果您不想检查输入文件是否已排序,请使用此选项。这可以在示例的帮助下进行解释。
//displaying contents of unsorted f1.txt// $cat f1.txt Parnjal Kartik //displaying contents of sorted file f2.txt// $cat f2.txt Apaar Kartik //now use - -nocheck-order option with comm// $comm - -nocheck-order f1.txt f2.txt Pranjal Apaar Kartik /*as this option forced comm not to check the sorted order that's why the output comm produced is also not in sorted order*/
4 . – -output-delimiter=STR 选项:默认情况下,comm 命令输出中的列用空格分隔,如上所述。但是,如果需要,您可以更改它,并使用您选择的字符串作为分隔符。这可以使用 –output-delimiter 选项来完成。此选项要求您指定要用作分隔符的字符串。
句法:$comm - -output-delimiter=STR FILE1 FILE2
例子:
//...comm command with - -output-delimiter=STR option...// $comm - -output-delimiter=+file1.txt file2.txt ++Apaar Ayush Rajput Deepak ++Hemant +Lucky +Pranjal Thakral /*+ before content indicates content of second column and ++ before content indicates content of third column*/
所以,这就是关于 comm 命令及其选项的全部内容。