Diff
diff 在 2 個文件中報告相同的行作為不同的行
我有 2 個包含歌曲列表的文件。hdsongs.txt 和 sdsongs.txt
我寫了一個簡單的腳本來列出所有歌曲並輸出到文本文件,然後執行一個差異。它在大多數情況下都可以正常工作,但腳本中的實際 diff 命令顯示的行不同。這實際上發生在多條線路上,但不是全部。
這是兩個文件中的歌曲範例:
$ grep Apologize \*songs\* hdsongs.txt:Timbaland/Apologize.mp3 sdsongs.txt:Timbaland/Apologize.mp3
我看不到尾隨特殊字元:
$ cat -A hdsongs.txt sdsongs.txt | grep Apologize Timbaland/Apologize.mp3$ Timbaland/Apologize.mp3$
當我執行 diff 時,它顯示每個文件中存在同一行;但是線條不一樣嗎?
$ diff hdsongs.txt sdsongs.txt | grep Apologize > Timbaland/Apologize.mp3 < Timbaland/Apologize.mp3
這類似於這裡的執行緒: diff 報告兩個文件不同,儘管它們是相同的!
但這是針對文件中的行,而不是整個文件,並且那裡的解析度似乎不適合這種情況。
$ diff <(cat -A phonesongsonly.txt) <(cat -A passportsongsonly.txt) | grep Apologize < Timbaland/Apologize.mp3$ > Timbaland/Apologize.mp3$ $ wdiff -w "$(tput bold;tput setaf 1)" -x "$(tput sgr0)" -y "$(tput bold;tput setaf 2)" -z "$(tput sgr0)" hdsongs.txt sdsongs.txt | grep Apologize >Timbaland/Apologize.mp3 >Timbaland/Apologize.mp3
有誰知道為什麼 diff 會像這樣兩次報告同一行?
我的猜測是您根本沒有對文件進行排序。這是您可以在未排序的輸入上獲得的行為之一:
$ cat file1 foo bar $ cat file2 bar foo $ $ diff file1 file2 1d0 < foo 2a2 > foo
但是,如果你排序:
$ diff <(sort file1) <(sort file2) $
該
diff
程序的工作是告訴您兩個文件是否相同,如果不是,它們的不同之處。它並非旨在尋找不同行之間的相似之處。如果一個文件的第 X 行與另一個文件的第 X 行不同,則文件不同。它們是否包含完全相同的資訊並不重要,如果該資訊以不同的方式組織,則文件報告為不同。