Bandingkan dua file secara ketat baris demi baris, tanpa penyisipan atau penghapusan

13

Saya memiliki dua file yang pada dasarnya berisi dump memori dalam format hex. Saat ini saya menggunakan diff untuk melihat apakah file berbeda dan di mana perbedaannya. Namun, ini bisa menyesatkan ketika mencoba menentukan lokasi yang tepat (yaitu alamat memori) perbedaannya. Perhatikan contoh berikut ini yang menunjukkan kedua file berdampingan.

file1:       file2:

0001    |    0001
ABCD    |    FFFF
1234    |    ABCD
FFFF    |    1234

Sekarang diff -uakan menampilkan satu penyisipan dan satu penghapusan, meskipun 3 baris (lokasi memori) telah berubah antara dua file:

 0001
+FFFF
 ABCD
 1234
-FFFF

Apakah ada cara mudah untuk membandingkan dua file sehingga setiap baris hanya dibandingkan dengan baris yang sama (dalam hal penomoran baris) pada file lainnya? Jadi dalam contoh ini harus melaporkan bahwa 3 baris terakhir telah berubah, bersama dengan garis yang diubah dari file1dan file2. Outputnya tidak harus diff-style, tetapi akan lebih keren jika bisa diwarnai (saat ini saya mewarnai diff -uoutput menggunakan sedsehingga dapat dengan mudah disesuaikan).

Fritz
sumber

Jawaban:

18

Ini bisa menjadi pendekatan:

diff <(nl file1) <(nl file2)

Dengan nlnomor garis yang diffmengenali garis demi garis.

kekacauan
sumber
3
Itu keren, saya tidak tahu program nl. Alat-alat unix itu sangat berguna, tetapi ada begitu banyak di antaranya.
Fritz
1
Saya baru saja mencoba ini, dan sayangnya apa yang saya dapatkan adalah: setiap baris dari file pertama, diikuti oleh setiap baris dari file kedua ... bukannya baris 1 dari file 1, diikuti oleh baris 1 dari file dua, diikuti oleh baris 2 dari file satu, diikuti oleh baris 2 dari file 2 ...
Michael Hewson
@MichaelHewson Sepertinya kedua file Anda tidak memiliki garis yang sama. Kalau begitu, begitulah caranya diff. Anda dapat mencoba program gui meldyang memperlihatkan dua file berdampingan. Seperti dimeld <(nl file1) <(nl file2)
Fritz