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

開啟您的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.