Bash

我想比較兩個文件的值,但不是基於位置或順序

  • June 25, 2020

假設我有兩個文件,內容如下:

$ cat File1.txt
Apple
orange
watermelon
avocado
lime
$ cat File2.txt
orange
Apple
lime 
watermelon
avocado

基本上沒有區別,因為兩者俱有相同的值。我正在使用diff命令:

diff File1.txt File2.txt

並且它顯示文件不同,因為值放錯了位置,在我的情況下,我要求它不應該顯示差異。還有什麼其他方法可以實現這一點,歡迎提出任何建議。

比較排序的文件。

在 bash(或 ksh 或 zsh)中,使用程序替換

diff <(sort File1.txt) <(sort File2.txt)

在普通的 sh 中:

sort File1.txt >File1.txt.sorted
sort File1.txt >File2.txt.sorted
diff File1.txt.sorted File2.txt.sorted

快速查看已排序文件之間的差異comm可能很有用:它直接顯示一個文件中的行,而不是另一個文件中的行。

comm -12  <(sort File1.txt) <(sort File2.txt) >common-lines.txt
comm -23  <(sort File1.txt) <(sort File2.txt) >only-in-file-1.txt
comm -13  <(sort File1.txt) <(sort File2.txt) >only-in-file-2.txt

如果在同一個文件中重複了一行,則上述命令要求兩個文件具有相同的重複次數。如果你想治療

foo
bar
foo

bar
foo

然後在排序時刪除重複項:使用sort -u而不是sort.

如果您將輸出保存sort在一個文件上並稍後在另一個文件可用時使用它,請注意這兩個文件必須在相同的語言環境中排序。如果你這樣做,你可能應該按字節順序排序:

LC_ALL=C sort File1.txt >File1.txt.sorted

引用自:https://unix.stackexchange.com/questions/595090