如何在Linux中進行行不敏感差異(diff)?

如何在Linux中進行行不敏感差異(diff)?

我有兩個文字文件,其中行的順序並不重要。我想找出一個文件中與另一個文件中不同的行。在 Linux 中使用 diff 可以找到差異,但也可以解釋同一文字行中的變化。

換句話說,如何進行行不敏感差異?

答案1

如果您的檔案不太大,您可以在 ingsort之前將其刪除diff

所以這樣的事情會起作用:

sort file1 > file1_sorted
sort file2 > file2_sorted
diff file1_sorted file2_sorted

或者,正如您在評論中發現的那樣,您也可以在一行中完成,

diff <(sort file1) <(sort file2)

答案2

diff選項類似,您可以使用comm帶有進程替換的命令並且sortcomm需要對其操作的檔案進行排序)。這將使您僅關注公共行,僅關註一個文件或另一個文件中的行,方法是使用-1僅抑制第一個文件中的行,-2僅抑制第二個文件中的行或-3抑制兩個文件中的行,因此查看僅在第一個文件中而不是第二個文件中的所有行

comm -23 <(sort file1) <(sort file2)

當然,如果你願意,你也可以考慮使用grep類似

grep -vFxf file2 file1

當 ( )中的行被視為必須符合整行 ( )的固定字串 ( ) 時,它將把 中 的行視為file2模式,並且僅列印 file1 中沒有符合項 ( ) 的行。-v-ffile2-F-x

grep解決方案的優點是不需要對檔案進行排序,但它只檢查一個檔案中不存在於另一個檔案中的行,而不是同時檢查兩個方向。

相關內容