Saya memiliki 2 file yang berisi daftar lagu. hdsongs.txt dan sdsongs.txt
Saya menulis skrip sederhana untuk mendaftar semua lagu dan output ke file teks, untuk kemudian menjalankan diff terhadap. Ini berfungsi dengan baik untuk sebagian besar, tetapi perintah diff aktual dalam skrip menunjukkan baris yang sama sebagai berbeda. Ini sebenarnya terjadi untuk beberapa baris, tetapi tidak semua.
Berikut adalah contoh lagu di kedua file:
$ grep Apologize \*songs\*
hdsongs.txt:Timbaland/Apologize.mp3
sdsongs.txt:Timbaland/Apologize.mp3
Tidak ada karakter spesial tertinggal yang dapat saya lihat:
$ cat -A hdsongs.txt sdsongs.txt | grep Apologize
Timbaland/Apologize.mp3$
Timbaland/Apologize.mp3$
Ketika saya menjalankan diff, ini menunjukkan baris yang sama berada di setiap file; tapi bukankah garisnya sama?
$ diff hdsongs.txt sdsongs.txt | grep Apologize
> Timbaland/Apologize.mp3
< Timbaland/Apologize.mp3
Ini mirip dengan utas di sini: laporan diff dua file berbeda, meskipun mereka sama!
tapi ini untuk baris dalam file, bukan keseluruhan file, dan resolusi di sana sepertinya tidak cocok dalam kasus ini.
$ 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
Adakah yang tahu mengapa diff akan melaporkan baris yang sama dua kali seperti ini?
hexdump
dua garis itu dan melihat apa yang berbeda?Jawaban:
Dugaan saya adalah Anda belum mengurutkan file. Itu salah satu perilaku yang bisa Anda dapatkan pada input yang tidak disortir:
Tapi, jika Anda menyortir:
Tugas
diff
program adalah memberi tahu Anda apakah dua file itu identik dan, jika tidak, di mana mereka berbeda. Itu tidak dirancang untuk menemukan kesamaan antara garis yang berbeda. Jika baris X dari satu file tidak sama dengan baris X yang lain, maka file tidak sama. Tidak masalah jika mereka berisi informasi yang persis sama, jika informasi itu disusun dengan cara yang berbeda, file-file tersebut dilaporkan berbeda.sumber
Karena Anda belum menyatakan bahwa file diurutkan, saya akan berasumsi bahwa mereka tidak. Ini adalah output yang diharapkan dari
diff
ketika sebuah baris muncul di kedua file, tetapi di lokasi yang berbeda. Ini akan menjadi jelas jika Anda melihat seluruhdiff
output, daripada menyalurkannyagrep
.sumber
Saya akan menyarankan mencoba menggunakan sesuatu seperti program hexdiff untuk mendapatkan output biner / heksadesimal, karena mata manusia tidak selalu dapat membedakan antara karakter yang ditampilkan komputer, dan beberapa karakter mungkin tidak ditampilkan.
sumber
cat -A
akan menunjukkan sebagian besar (semua?) kasus karakter non-cetak. Saya tidak yakin bagaimana ini bisa diatasi dengan keanehan unicode tetapi karakter non-cetak lainnya seharusnya sudah ditunjukkan.