Bash
我想比較兩個文件的值,但不是基於位置或順序
假設我有兩個文件,內容如下:
$ 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