Verwenden von diff für eine lange einzeilige Datei


25

Ich habe eine Datei, die nur eine Zeile hat. Seine Größe beträgt ungefähr 20.000 Bytes.

Die Datei wurde geändert und ich wollte wissen, wo.

Ich dachte mit diff, aber es zeigt mir die komplette Zeile, weil es die Zeile ausgibt, die den Unterschied hat - aber in diesem Fall ist es die einzige Zeile in der Datei, die Unterschiede hat.

Also wollte ich sehen, was der Unterschied ist.

Irgendein Rat?



2
Haben Sie versucht, es an fmt zu leiten (wenn Sie natürlich Linux verwenden), könnten Sie "fmt -w 50 long.txt | diff"
l1zard

Antworten:


13

Unter der Annahme, dass es wie im normalen Text viele Leerzeichen gibt, können Sie die Datei nach Wörtern aufteilen und mit einem normalen Diff-Tool vergleichen, z. B. meld:

tr -s ' ' '\n' < file1.txt > file1.txt.split
tr -s ' ' '\n' < file2.txt > file2.txt.split
meld file1.txt.split file2.txt.split

2
Scheint für mich die einfachste Lösung zu sein. Das Diff-Problem an sich ist trivial, jedoch können die meisten Tools (nicht nur Diff-Tools) keine langen Zeilen verwalten, sodass das Problem eher mit langen Zeilen zu tun hat, nicht mit dem Diff an sich.
p1100i

4

Ich würde ein Diff finden, das Intra-Line-Diffs macht. Ich benutze xxdiff unter UNIX. Ich denke, WinMerge macht Intra-Line-Diff unter Windows.

Die anderen Antworten sind ebenfalls gut: wdiff oder Aufteilen in Blöcke - die Blockgrenzen lassen sich leichter definieren, wenn die Daten beispielsweise durch eine Pipe oder ein Komma begrenzt sind.


1
Zu Ihrer Information , xxdiff segfaults, wenn die Zeilen länger als 32768 Zeichen sind ...
ValarDohaeris

3

Wenn dies ein einmaliges Problem ist, würde ich Kopien der Dateien mit \nZeichen erstellen, die alle 50 Zeichen eingefügt werden, und dann diese Kopien unterscheiden. (Ich habe 50 gewählt, weil es die Mathematik einfacher macht, von der unterschiedlichen Zeilennummer zum Byte-Versatz in den Originaldateien zu wechseln, aber dies könnte je nach dem, was ich gefunden habe, nach oben / unten korrigiert werden.)

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.