Vergleichen Sie zwei Dateien streng zeilenweise, ohne Einfügungen oder Löschungen

13

Ich habe zwei Dateien, die im Wesentlichen ein Speicherabbild in einem Hex-Format enthalten. Im Moment benutze ich diff, um zu sehen, ob die Dateien unterschiedlich sind und wo die Unterschiede liegen. Dies kann jedoch irreführend sein, wenn versucht wird, den genauen Ort (dh die Speicheradresse) der Differenz zu bestimmen. Betrachten Sie das folgende Beispiel, in dem die beiden Dateien nebeneinander angezeigt werden.

file1:       file2:

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

Jetzt diff -uwird eine Einfügung und eine Löschung angezeigt, obwohl sich 3 Zeilen (Speicherorte) zwischen den beiden Dateien geändert haben:

 0001
+FFFF
 ABCD
 1234
-FFFF

Gibt es eine einfache Möglichkeit, die beiden Dateien so zu vergleichen, dass jede Zeile nur mit derselben Zeile (in Bezug auf die Zeilennummerierung) in der anderen Datei verglichen wird? In diesem Beispiel sollte also gemeldet werden, dass sich die letzten 3 Zeilen geändert haben, zusammen mit den geänderten Zeilen von file1und file2. Die Ausgabe muss nicht diff-artig sein, aber es wäre cool, wenn sie eingefärbt werden könnte (im Moment färbe ich die diff -uAusgabe mit, seddamit sie leicht angepasst werden kann).

Fritz
quelle

Antworten:

18

Dies könnte ein Ansatz sein:

diff <(nl file1) <(nl file2)

Mit nlnumber die Zeilen, diffdie die Zeilen zeilenweise erkennen.

Chaos
quelle
3
Das ist cool, ich kannte das nl-Programm nicht. Diese Unix-Tools sind wirklich praktisch, aber es gibt so viele davon.
Fritz
1
Ich habe das gerade ausprobiert und leider erhalte ich folgende Meldung: Jede Zeile der ersten Datei, gefolgt von jeder Zeile der zweiten Datei ... anstelle von Zeile 1 aus Datei 1, gefolgt von Zeile 1 aus Datei zwei, gefolgt von Zeile 2 aus Datei eins, gefolgt von Zeile 2 aus Datei 2 ...
Michael Hewson
@MichaelHewson Es hört sich so an, als hätten Ihre beiden Dateien keine gemeinsamen Zeilen. In diesem Fall difffunktioniert das einfach so . Versuchen Sie es mit dem GUI-Programm, melddas die beiden Dateien nebeneinander anzeigt. Wie inmeld <(nl file1) <(nl file2)
Fritz