Ich habe 2 Dateien mit einer Liste von Songs. hdsongs.txt und sdsongs.txt
Ich habe ein einfaches Skript geschrieben, um alle Songs aufzulisten und in Textdateien auszugeben, um dann ein Diff auszuführen. Es funktioniert größtenteils einwandfrei, aber der tatsächliche diff-Befehl im Skript zeigt dieselbe Zeile als unterschiedlich an. Dies geschieht tatsächlich für mehrere Zeilen, aber nicht für alle.
Hier ist ein Beispiel eines Songs in beiden Dateien:
$ grep Apologize \*songs\*
hdsongs.txt:Timbaland/Apologize.mp3
sdsongs.txt:Timbaland/Apologize.mp3
Es gibt kein abschließendes Sonderzeichen, das ich sehen kann:
$ cat -A hdsongs.txt sdsongs.txt | grep Apologize
Timbaland/Apologize.mp3$
Timbaland/Apologize.mp3$
Wenn ich diff ausführe, wird in jeder Datei dieselbe Zeile angezeigt. aber sind die Zeilen nicht gleich?
$ diff hdsongs.txt sdsongs.txt | grep Apologize
> Timbaland/Apologize.mp3
< Timbaland/Apologize.mp3
Dies ähnelt hier dem Thread: diff meldet, dass sich zwei Dateien unterscheiden, obwohl sie gleich sind!
Dies gilt jedoch für Zeilen innerhalb der Datei, nicht für die gesamte Datei, und die Auflösung dort scheint in diesem Fall nicht zu passen.
$ 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
Weiß jemand, warum Diff die gleiche Zeile zweimal so melden würde?
hexdump
diesen beiden Zeilen und sehen, was sich unterscheidet?Antworten:
Vermutlich haben Sie die Dateien einfach nicht sortiert. Dies ist eines der Verhaltensweisen, die bei unsortierten Eingaben auftreten können:
Aber wenn Sie sortieren:
Das
diff
Programm muss Ihnen mitteilen, ob zwei Dateien identisch sind und, falls nicht, wo sie sich unterscheiden. Es ist nicht darauf ausgelegt, Ähnlichkeiten zwischen verschiedenen Zeilen zu finden. Wenn Zeile X der einen Datei nicht mit Zeile X der anderen Datei übereinstimmt, stimmen die Dateien nicht überein. Es spielt keine Rolle, ob sie genau die gleichen Informationen enthalten. Wenn diese Informationen unterschiedlich organisiert sind, werden die Dateien als unterschiedlich gemeldet.quelle
Da Sie nicht angegeben haben, dass die Dateien sortiert sind, gehe ich davon aus, dass dies nicht der Fall ist. Dies ist die erwartete Ausgabe ab dem
diff
Zeitpunkt, zu dem eine Zeile in beiden Dateien, jedoch an verschiedenen Orten, angezeigt wird. Dies wäre klar, wenn Sie sich die gesamtediff
Ausgabe ansehen würden, anstatt sie durchzuleitengrep
.quelle
Ich würde vorschlagen, etwas wie das hexdiff-Programm zu verwenden, um eine binäre / hexadezimale Ausgabe zu erhalten, da das menschliche Auge nicht immer den Unterschied zwischen den Zeichen erkennen kann, die ein Computer anzeigt, und einige Zeichen möglicherweise nicht angezeigt werden.
quelle
cat -A
hätte die meisten (alle?) Fälle von nicht druckbaren Zeichen gezeigt. Ich bin nicht sicher, wie es mit Unicode-Seltsamkeit umgegangen wäre, aber andere nicht druckbare Zeichen hätten gezeigt werden sollen.