小公舉comm,快速比較兩個排序文件
前言
我們經常會有需求比較一個文件里的內容是否在另一個文件存在。假如我有一份監控列表的IP寫入在了file1,我所有的機器IP寫入在了file2,我要找出還有哪些機器沒有在監控列表。以前的做法是寫個兩層循環,或者用diff命令。列印出來也沒那麼直觀,直到最近找打了comm,以前也知道這個小工具,可能是沒有靜心去看他之類的,總感覺搞不明白。最近幾天類似的比較需求有點多,還是決定用它,也就有了自己的總結。
目錄
1、comm的功能
2、用法
3、輸出格式
4、參數
5、例子
6、寫在最後
1、功能
用於比較兩個已經排過序的文件。這裡一定要注意是兩個文件都要已經排序了,沒有排序的話,列印出來的結果是不一樣的。
2、用法
comm [-123] file1 file2
3、輸出
用comm命令比較出來後,一共會有3列的顯示,其中的代表的含義如下:
第一列:顯示僅在第一個文件有的行。
第二列:顯示僅在第二個文件有的行。
第三列:顯示在文件1和文件2都有的行。
4、參數
在用comm命令時,可以使用-1、-2、-3、-12、-13、-23等參數,其中這些參數的含義如下:
-1:不顯示在第一個文件中獨有的行
-2:不顯示在第二個文件中獨有的行
-3:不顯示兩個文件中共有的行
可以把「-」理解為減號,-1就是輸出時不列印第一列;-2就是不列印第二列,只列印第1列和第3列。
5、實例
file1:
aa dd bb cc ff
file2:
nn
oo
aa
從這裡可以看出,第三列並沒有把在兩個文件中都有的行列印出來。這是因為在使用comm命令時,一定要先對文件做sort排序。
C02D37BHMD6T:~ lli$ comm file1 file2 aa dd bb cc ff nn oo aa
經過對文件排序後的對比
C02D37BHMD6T:~ lli$ cat file1 |sort > file3 C02D37BHMD6T:~ lli$ cat file2 |sort > file4
第一列可以看出是file3文件獨有的,第二列為file4獨有的,第三列為兩個文件共有的。
C02D37BHMD6T:~ lli$ comm file3 file4 aa bb cc dd ff nn oo
六、寫在最後
李先生(Lemon),高級運維工程師(自稱),SRE專家(目標),夢想在35歲買一輛保時捷。喜歡鑽研底層技術,認為底層基礎才是王道。一切新技術都離不開作業系統(CPU、記憶體、磁碟)、網路等。堅持輸入輸出,記錄自己學習的點滴,在平凡中堅持前行,總有一天會遇見不一樣的自己。公眾號:運維汪(ID:Leeeee_Li)。
歡迎大家關注我的公眾號,一起交流、學習。