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 排序。