Ich habe einige SQL-Dumps, die ich auf die Unterschiede zwischen. diff
kann mir natürlich den Unterschied zwischen zwei Zeilen zeigen, aber ich bin verrückt, wenn ich versuche herauszufinden, welche Werte in der langen Liste der durch Kommas getrennten Werte tatsächlich dazu führen, dass die Zeilen unterschiedlich sind.
Mit welchem Tool kann ich auf die genauen Zeichenunterschiede zwischen zwei Zeilen in bestimmten Dateien hinweisen?
command-line
diff
user394
quelle
quelle
Antworten:
Es gibt wdiff , das Wort diff dafür.
Auf dem Desktop kann meld die Unterschiede innerhalb einer Zeile für Sie hervorheben.
quelle
wdiff -w "$(tput bold;tput setaf 1)" -x "$(tput sgr0)" -y "$(tput bold;tput setaf 2)" -z "$(tput sgr0)" file1 file2
wdiff a b | colordiff
dwdiff
Tools, die meistens kompatibel sind,wdiff
aber auch farbige Ausgabe und wahrscheinlich einige andere Funktionen unterstützen. Und es ist in einigen Linux-Distributionen wie Arch besser verfügbar.wdiff -n a b | colordiff
berätman colordiff
.Nur eine andere Methode mit Git-Diff:
grep -v falls nicht interessiert an positionen der diffs.
quelle
Ich habe dafür verwendet
vimdiff
.Hier ist ein Screenshot (nicht von mir), der kleinere Unterschiede zwischen ein oder zwei Zeichen zeigt, die ziemlich gut herausragen. Ein kurzes Tutorial auch .
quelle
vimdiff -c 'set wrap' -c 'wincmd w' -c 'set wrap' a b
schlägt stackoverflow.com/a/45333535/2097284 .Hier ist eine "..haar des Hundes, der dich beißt" -Methode ... brachte
diff
dich an diesen Punkt; benutze es, um dich weiter zu bringen ...Hier ist die Ausgabe aus der Verwendung der Sample-Linienpaare ...
☻
zeigt eine TAB anHier ist das Skript. Sie müssen nur die Leitungspaare irgendwie heraussuchen. (Ich habe Diff bisher nur einmal (zweimal?) Verwendet, daher kenne ich die vielen Optionen nicht und sortiere die Optionen dafür aus Drehbuch war genug für mich, für einen Tag :) .. Ich denke, es muss einfach genug sein, aber ich muss eine Kaffeepause einlegen ....
quelle
wdiff
ist eigentlich eine sehr alte Methode, um Dateien Wort für Wort zu vergleichen. Es funktionierte, indem Dateien neu formatiert, dann mit Hilfediff
von Unterschieden gesucht und wieder zurückgegeben wurden. Ich selbst habe vorgeschlagen, den Kontext hinzuzufügen, damit er nicht wortweise verglichen wird, sondern mit jedem Wort, das von anderen "Kontext" -Wörtern umgeben ist. Auf diese Weise kann sich der Diff bei häufigen Passagen in Dateien viel besser synchronisieren, insbesondere wenn sich Dateien mit nur wenigen Blöcken gemeinsamer Wörter zumeist unterscheiden. Zum Beispiel beim Vergleichen von Text auf Plagiate oder bei der Wiederverwendung.dwdiff
wurde später erstellt vonwdiff
. Aberdwdiff
nutzt diese Funktion zur Neuformatierung von Text, um eine gute Wirkung zu erzielendwfilter
. Dies ist eine großartige Entwicklung - es bedeutet, dass Sie einen Text neu formatieren können, um ihn mit einem anderen abzugleichen, und diese dann mit jedem zeilenweisen grafischen Diff-Display vergleichen können. Zum Beispiel mit "diffusem" grafischem Diff ....Dies formatiert
file1
das Format neufile2
und gibt esdiffuse
für einen visuellen Vergleich an.file2
ist unverändert, so dass Sie Wortunterschiede direkt in bearbeiten und zusammenführen könnendiffuse
. Wenn Sie bearbeiten möchten,file1
können Sie hinzufügen,-r
um umzukehren, welche Datei neu formatiert wird. Probieren Sie es aus und Sie werden feststellen, dass es extrem leistungsstark ist!Ich bevorzuge den grafischen Unterschied (siehe oben),
diffuse
da er sich viel sauberer und nützlicher anfühlt. Es ist auch ein eigenständiges Python-Programm, was bedeutet, dass es einfach zu installieren und auf andere UNIX-Systeme zu verteilen ist.Andere grafische Unterschiede scheinen viele Abhängigkeiten zu haben, können aber auch verwendet werden (Sie haben die Wahl). Dazu gehören
kdiff3
oderxxdiff
.quelle
Auf der Grundlage der @ Peter.O- Lösung habe ich sie umgeschrieben, um einige Änderungen vorzunehmen.
./hairOfTheDiff.sh file1.txt file2.txt
demo
die Quelle an. Dies kann die Tür für ausgefallene Rohrleitungen öffnen, damit keine Dateien für zwei separate Eingaben mitpaste
und mehreren Dateideskriptoren benötigt werden.Keine Hervorhebung bedeutet, dass sich das Zeichen in beiden Zeilen befand. Hervorhebung bedeutet, dass es sich in der ersten befand, und Rot bedeutet, dass es sich in der zweiten befand.
Die Farben können über Variablen oben im Skript geändert werden. Sie können sogar ganz auf Farben verzichten, indem Sie normale Zeichen verwenden, um Unterschiede auszudrücken.
quelle
Hier ist ein einfacher Einzeiler:
diff -y <(cat a.txt | sed -e 's/,/\n/g') <(cat b.txt | sed -e 's/,/\n/g')
Die Idee ist, Kommas (oder welche Trennzeichen Sie verwenden möchten) durch Zeilenumbrüche zu ersetzen
sed
.diff
kümmert sich dann um den Rest.quelle
.csv
einfache Weise eine Tabellenkalkulation erstellt und eine Formel(A7==K7) ? "" : "diff"
oder Ähnliches eingefügt und kopiert und eingefügt werden.quelle
In der Befehlszeile würde ich vor dem Vergleichen von Dateien sicherstellen, dass vernünftige neue Zeilen hinzugefügt werden. Sie können sed, awk, perl oder alles andere verwenden, um Zeilenumbrüche auf systematische Weise einzufügen. Achten Sie jedoch darauf, nicht zu viele Zeilen hinzuzufügen.
Aber ich finde, das Beste ist, vim zu verwenden, da es die Wortunterschiede hervorhebt. vim ist gut, wenn es nicht zu viele unterschiede gibt und die unterschiede einfach sind.
quelle
kdiff3 wird zum Standard-GUI-Diff-Viewer unter Linux. Es ist ähnlich wie xxdiff , aber ich denke, kdiff3 ist besser. Es macht viele Dinge gut, einschließlich Ihrer Aufforderung, "genaue Zeichenunterschiede zwischen zwei Zeilen in bestimmten Dateien" anzuzeigen.
quelle
Wenn ich Ihre Frage richtig lese, verwende ich
diff -y
für solche Dinge.Das Vergleichen eines Nebeneinander-Vergleichs vereinfacht das Auffinden, welche Linien die Unterschiede auslösen.
quelle
Ich hatte das gleiche Problem und löste es mit PHP Fine Diff , einem Online-Tool, mit dem Sie die Granularität festlegen können. Ich weiß, dass es technisch gesehen kein * nix-Tool ist, aber ich wollte eigentlich kein Programm herunterladen, nur um einen einmaligen Unterschied auf Zeichenebene zu machen.
quelle