📜  Linux 中的 comm 命令和示例

📅  最后修改于: 2022-05-13 01:57:28.473000             🧑  作者: Mango

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 命令及其选项的全部内容。