Gibt es ein Diff-Dienstprogramm, mit dem Sie Spalten ausschließen können?

Gibt es ein Diff-Dienstprogramm, mit dem Sie Spalten ausschließen können?

Ich habe beispielsweise eine Textdatei, jede Zeile ist eine lange Zeichenfolge. Ich möchte zwei „Segmente“ dieser Zeichenfolge ausschließen, beispielsweise die Spalten 1–7 und 20–22. Die unteren beiden Zeilen unten wären also eine Übereinstimmung:

123456789012345678901234567890 
------------------------------
xxxxxxxAAAAAAAAAAAAxxxBBBBBBBB
yyyyyyyAAAAAAAAAAAAyyyBBBBBBBB

Ich weiß, dass WinMerge ein „IgnoreColumns“-Plugin hat, aber ich habe nie gesehen, dass das funktioniert. In diesem Beispiel würde ich es in IgnoreColumns_1-7, 20-22.dll umbenennen, es im Plugin-Menü auswählen und „Pre-Differ“ wählen. Aber es hat nie funktioniert.

Ich werde große Dateien vergleichen, die ich nicht ändern möchte. Ich habe nichts dagegen, sie im Vergleich mit sed oder so ähnlich zu bearbeiten, aber ich würde die eigentlichen Dateien lieber nicht ändern. Ich habe mich noch nicht dafür entschieden, sed an diff weiterzugeben, weil ich mir eine visuellere Ansicht der Daten erhofft hatte.

Antwort1

Das Folgende funktioniert unter Linux und Cygwin.

vimdiff <(cut -c8-19,23- file1) <(cut -c8-19,23- file2)

Aus irgendeinem Grund meldet Vim unter Cygwin, dass sich jede Datei seit Beginn der Bearbeitung geändert hat, und fragt: „[O]K, (L)aden von Datei:“. Geben Sie es einfach Ojedes Mal ein.

Zugegeben, Sie können die ausgelassenen Spalten nicht sehen, aber es handelt sich um einen visuellen Vergleich nebeneinander.

Antwort2

Wenn Sie das WinMerge-Plugin „IgnoreColumns“ immer noch zum Laufen bringen möchten … es sieht so aus, als wären Sie kurz davor. Zwei Anmerkungen:

  1. MergePluginsKopieren Sie für Ihr Beispiel in den Unterordner von WinMerge IgnoreColumns.dllnach IgnoreColumns_1-7_20-22.dll(ohne Leerzeichen und mit Unterstrich statt Komma).

  2. Beenden Sie WinMerge vollständig und führen Sie es erneut aus, nachdem Sie die DLL platziert haben. („Plugins neu laden“ aktualisiert das Plug-ins/ List-Pulldown-Menü, aber nicht die Funktionalität.)

Randbemerkung: Ich empfehle eine „unterstützte, aber inoffizielle“ Version von WinMerge – 2.13.20.12 – die 3-Wege-Vergleiche enthält. Gehe zuInoffizielle WinMerge-Builds, und unten sehen Sie die „Version mit 3-Wege-Diff-Unterstützung“.

Antwort3

Genau wie in der Antwort von Diogo_Rocha können Sie die Datei vorher ändern, um die Spalten zu entfernen, die Sie nicht testen möchten, und dann diff ausführen. Aber nur mit Befehlszeilenkram.

In Ihrem Beispiel könnten Sie also die „Spalten“ 1–7 und 20–22 entfernen.

sed 's/.\{7\}\(.\{12\}\).\{3\}\(.*\)/\1\2/' test.txt > test2.txt
diff -u test2.txt whatnot.txt

Bearbeiten:Offensichtlicher Diebstahl der besseren Antwort von Garyjohn.

diff -u <(cut -c8-19,23- test1.txt) <(cut -c8-19,23- test2.txt) | less

Antwort4

Wenn ich Ihre Zweifel verstehen kann, versuchen Sie, bestimmte Spalten aus einer Textdatei auszuschließen oder auszuwählen. Wenn das zutrifft, können Sie dies mit demTextpadAnwendung. Installieren Sie es und öffnen Sie Ihre Textdatei. Drücken Sie dann die Alt-Taste, während Sie bestimmte Spalten aus Ihrem Text auswählen. Wenn diese Spalten ausgewählt sind, können Sie jede gewünschte Spalte kopieren, ausschneiden oder löschen.

verwandte Informationen