comm — 比較兩個已排序檔案的共同與相異行

比較兩個已排序檔案,找出共同行與各自獨有的行。

語法

comm [選項] 檔案1 檔案2

常用選項

選項 說明 範例
-1 不顯示第 1 欄(只在檔案 1 中的行) comm -1 file1 file2
-2 不顯示第 2 欄(只在檔案 2 中的行) comm -2 file1 file2
-3 不顯示第 3 欄(兩個檔案共同的行) comm -3 file1 file2
-12 只顯示共同行(交集) comm -12 file1 file2
-23 只顯示只在檔案 1 中的行(差集 A-B) comm -23 file1 file2
-13 只顯示只在檔案 2 中的行(差集 B-A) comm -13 file1 file2

使用範例

範例 1:找出兩個清單的共同項目(交集)

兩個已安裝套件清單中,找出共同的套件(-12 = 只顯示第 3 欄)。

$ comm -12 <(sort list1.txt) <(sort list2.txt)
git
nginx
python3
範例 2:找出只在第一個清單的項目(差集)

找出清單1有但清單2沒有的項目。

$ comm -23 <(sort list1.txt) <(sort list2.txt)
curl
vim
範例 3:查看完整的三欄輸出

不加選項時,第1欄=只在file1,第2欄縮排一格=只在file2,第3欄縮排兩格=共同。

$ comm <(sort file1.txt) <(sort file2.txt)
alpha
	beta
		gamma
		delta
	epsilon

常見錯誤與排錯

comm: file 1 is not in sorted order
原因
輸入檔案未事先排序,comm 要求輸入必須已排序。
解法
使用進程替換 <(sort file) 讓 comm 讀取排序後的輸出,或先用 sort 排序。

延伸閱讀