it-swarm.com.de

Gibt es ein komprimiertes Side-by-Side-Diff-Format?

Ich habe zwei Protokolldateien mit Tausenden von Zeilen. Nach der Vorverarbeitung unterscheiden sich nur einige Zeilen. Diese verbleibenden Zeilen sind entweder echte Unterschiede oder gemischte Gruppen von Zeilen.

Mit einheitlichen Unterschieden kann ich die detaillierten Unterschiede erkennen, aber der manuelle Vergleich mit Augäpfeln ist schwierig. Side-by-Side-Unterschiede scheinen für den Vergleich nützlicher zu sein, fügen aber auch Tausende unveränderter Zeilen hinzu. Gibt es eine Möglichkeit, den Vorteil beider Welten zu nutzen?

Beachten Sie, dass diese Protokolldateien von xscope generiert werden, einem Programm, das Xorg-Protokolldaten überwacht. Ich suche nach Allzweck-Tools, die auf Situationen angewendet werden können, die den oben genannten ähnlich sind, und nicht nach speziellen Tools zur Analyse von Webserver-Zugriffsprotokollen.


Zwei Beispielprotokolldateien sind verfügbar unter http://lekensteyn.nl/files/qemu-sdl-debug/ (log13 und log14). Ein Pre-Prozessor-Befehl finden Sie in xscope-filter Datei, die Zeitstempel und andere kleinere Details entfernt.

44
Lekensteyn

Die 2 Diff-Tools, die ich am häufigsten benutze, wären meld und sdiff .

verschmelzen

Meld ist eine grafische Benutzeroberfläche, leistet jedoch hervorragende Arbeit bei der Anzeige von Unterschieden zwischen Dateien. Es ist eher auf die Softwareentwicklung ausgerichtet und bietet Funktionen wie die Möglichkeit, Änderungen von einer Seite auf die andere zu verschieben, um Änderungen zusammenzuführen. Es kann jedoch nur als direktes, nebeneinander liegendes, unterschiedliches Werkzeug verwendet werden.

ss of meld

ss of meld code highlighting

sdiff

Ich habe dieses Tool seit Jahren verwendet. Ich führe es im Allgemeinen mit den folgenden Schaltern aus:

$ sdiff -bBWs file1 file2
  • -b Änderungen im Leerraum ignorieren.
  • -W Ignoriere alle Leerzeichen.
  • -B Ignorieren Sie Änderungen, deren Zeilen alle leer sind.
  • -s Keine gemeinsamen Zeilen ausgeben.

Bei Protokolldateien müssen Sie häufig die Breite der Spalten vergrößern. Sie können -w <num> Verwenden, um den Bildschirm breiter zu machen.

andere Werkzeuge, die ich ab und zu benutze

diffc

Diffc ist ein python Skript, das die einheitliche Diff-Ausgabe einfärbt.

$ diffc [OPTION] FILE1 FILE2

ss of diffc

vimdiff

Vimdiff ist wahrscheinlich genauso gut, wenn nicht besser als meld und kann von einem Terminal aus ausgeführt werden. Ich vergesse immer, es zu benutzen, was für mich ein guter Indikator dafür ist, dass ich das Werkzeug für den täglichen Gebrauch etwas zu schwierig finde. Aber YMMV.

ss of vimdiff

38
slm

Derzeit verwende ich Side-by-Side-Diff mit Grep-Filterung der verschiedenen Zeilen:

diff -y -W250 log.txt log2.txt | expand | \
    grep -E -C3 '^.{123} [|<>]( |$)' | colordiff | less -rS
  • Möglichkeit -W250 macht die Ausgabe breiter, so dass ich mehr Daten sehen kann.
  • expand ist erforderlich, um Tabulatoren in Leerzeichen zu konvertieren
  • -C3 fügt der grep-Ausgabe 3 Kontextzeilen hinzu.
  • ^.{123} stimmt mit der Hälfte der Daten vor den nebeneinander liegenden Diff-Markern überein.
  • colordiff macht die Ausgabe schöner zu folgen
  • less -rS ermöglicht die Interpretation von ANSI-Farben (-r) und verhindert umbrochene Zeilen (-S).

Dies ist ein Hack, Alternativen sind willkommen.

20
Lekensteyn

Noch niemand erwähnt icdiff ? Es ist toll! Pic spricht für sich: icdiff

14

Der Linux-Befehl "sdiff" zeigt nebeneinander Unterschiede an, standardmäßig einschließlich aller Zeilen. Sie können jedoch verschiedene Optionen verwenden, um nur Unterschiede anzuzeigen:

sdiff -tWBs -w $COLUMNS config.xml config.xml.original

wo

-t: Tabulatoren in Leerzeichen übersetzen

-W: Leerzeichenunterschiede ignorieren

-B: Leerzeilen ignorieren

-s: Ignoriere Zeilen, die gleich sind

-w $ SPALTEN: Verwenden Sie die gesamte Bildschirmbreite

Die angezeigten Zeilen werden durch |, <oder> geteilt - siehe Dokumentation oder probieren Sie es einfach aus.

3
Moshe Yudkowsky