想要比對兩個檔案哪些資料是不同的(非 diff,相同資料就不需要再出現),Linux Bash shell 有方便的工具可以快速達成。
Linux 使用 comm 找出兩個檔案不同的內容
要比對出兩個檔案不同的資料,可以使用 awk 或 comm 來快速達成。
兩個檔案如下:
- file1
1 2 3 4 5
- file2
6 7 1 2 3 4
使用 awk 撈出第二個檔案有多哪些資料
- awk 'FNR==NR {a[$0]++; next} !a[$0]' file1 file2
6 7
使用 comm 撈出兩個檔案分別多哪些資料
comm 可以撈出 file1、file2 分別多的資料,也可以分別撈出 file1 或 file2 多的資料,範例如下:
註:comm 使用前,需要先將檔案做排序
- sort file1 > file1.sort
- sort file2 > file2.sort
- comm -1 1.sort 2.sort # 相同的是 1,2,3,4,第二個檔案多 6,7
1 2 3 4 6 7
- comm -3 1.sort 2.sort # 1.sort 多 5, 2.sort 多 6、7
5 6 7
- comm -1 -3 1.sort 2.sort # 只要秀出第二個檔案多的值就好
6 7
comm 參數說明
- -1 : suppress column 1 (lines unique to FILE1)
- -2 : suppress column 2 (lines unique to FILE2)
- -3 : suppress column 3 (lines that appear in both files)