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

40

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 Zeilengruppen.

Unified Diffs ermöglichen es mir, die detaillierten Unterschiede zu erkennen, erschweren jedoch den manuellen Vergleich mit Augäpfeln. Side-by-Side-Unterschiede scheinen für den Vergleich nützlicher zu sein, fügen aber auch Tausende von unveränderten Zeilen hinzu. Gibt es eine Möglichkeit, beide Welten zu nutzen?

Beachten Sie, dass diese Protokolldateien von xscopeeinem Programm generiert werden, das die Xorg-Protokolldaten überwacht. Ich bin auf der Suche nach Allzweck-Tools, die auf ähnliche Situationen angewendet werden können, beispielsweise nicht auf spezialisierte Tools zur Analyse des Zugriffsprotokolls von Webservern.


Zwei Beispielprotokolldateien stehen unter http://lekensteyn.nl/files/qemu-sdl-debug/ ( log13und log14) zur Verfügung. In der xscope-filterDatei befindet sich ein Vorverarbeitungsbefehl, der Zeitstempel und andere kleinere Details entfernt.

Lekensteyn
quelle
2
Hast du diffeine --suppress-common-linesOption? pastebin.com/KZrVCNFR
Manatwork
1
@manatwork Schön, das tut es. Gibt es eine Möglichkeit, mehr Kontext hinzuzufügen (zB Zeilennummern)?
Lekensteyn
5
Dann wäre vielleicht vimdiff(aus dem VIM- Paket) besser für Ihre Bedürfnisse geeignet: parallele Anzeige, kolorierte, gemeinsame Linien gefaltet. Zeilennummern können mit eingeschaltet werden :set number.
Manatwork
Ich denke, Sie sollten vimdiff als Antwort setzen :)
Kotte
1
CLI-Tools werden bevorzugt, GUI-Tools sind jedoch auch zulässig, wenn sie klein genug sind. Ich habe kdiff3 ausprobiert, aber es hat immer noch zu viele Details hervorgebracht. Im Idealfall sehe ich nicht alle unnötigen Details. Ich werde zwei Datensätze anhängen.
Lekensteyn,

Antworten:

37

Die 2 diff Tools , die ich am häufigsten verwenden wäre meld und sdiff .

verschmelzen

Meld ist eine grafische Benutzeroberfläche, leistet jedoch hervorragende Arbeit beim Anzeigen von Unterschieden zwischen Dateien. Es ist eher auf die Softwareentwicklung ausgerichtet und bietet Funktionen wie die Möglichkeit, Änderungen von einer Seite zur anderen zu verschieben, um sie zusammenzuführen. Es kann jedoch auch nur als direktes Nebeneinander-Tool verwendet werden.

    ss von meld

    Hervorhebung des Meldungscodes

sdiff

Ich benutze dieses Tool seit Jahren. Ich starte es im Allgemeinen mit den folgenden Schaltern:

$ sdiff -bBWs file1 file2
  • -b Ignorieren Sie Änderungen an der Größe des Leerraums.
  • -W Ignoriere alle Leerzeichen.
  • -B Ignorieren Sie Änderungen, deren Zeilen alle leer sind.
  • -s Keine gemeinsamen Leitungen ausgeben.

Oft müssen Sie bei Protokolldateien die Breite der Spalten vergrößern, -w <num>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 koloriert.

$ diffc [OPTION] FILE1 FILE2

             ss von 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 Tool für den täglichen Gebrauch ein wenig zu schwierig finde. Aber YMMV.

                                    ss von vimdiff

slm
quelle
1
Eine großartige Funktion von Meld, die auf Ihrem Screenshot leider nicht zu sehen ist, ist die Syntaxhervorhebung von Quellcodedateien.
Manatwork
Ja. Ich habe die ganze Zeit Vimdiff verwendet. Seitdem bin ich zu Meld übergegangen. Ich finde es einfacher zu verwenden und es ist nur einfacher zu erkennen, was es mir gegenüber Vimdiff sagt.
SLM
@manatwork - hat deinen Link zur Antwort hinzugefügt, danke für das Feedback!
SLM
1
Sieht gut aus für Quellcode, aber weniger für den Vergleich von Protokolldateien. Ich benutze oft colordiffvon colordiff.org als Quelldatei. Meines Erachtens sdiffist ähnlich, diff -yohne Unterschiede in der Ausgabe, aber leicht unterschiedliche Optionen. +1 für einige gute Alternativen zu plain diff.
Lekensteyn
Ich habe noch nie Colordiff benutzt, ich muss es überprüfen. Du bist auf dem richtigen diff -y. Das Hinzufügen dieses Schalters zu diffscheint irgendwann passiert zu sein, oder ich habe es nie bemerkt. Zusätzlich gibt es hier einen Link zur Ressourcenseite der gnu diff tools . Gutes Zeug für die Verwendung dieser Toolsuite.
SLM
20

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
  • Option -W250macht die Ausgabe breiter, so dass ich mehr Daten sehen kann.
  • expand ist notwendig, um Tabulatoren in Leerzeichen umzuwandeln
  • -C3 Fügt der grep-Ausgabe 3 Kontextzeilen hinzu.
  • ^.{123} stimmt mit der Hälfte der Daten vor den Side-by-Side-Diff-Markierungen überein.
  • colordiff macht die Ausgabe schöner zu folgen
  • less -rSErmöglicht die Interpretation von ANSI-Farben ( -r) und verhindert Zeilenumbrüche ( -S).

Dies ist ein Hack, Alternativen sind willkommen.

Lekensteyn
quelle
1
Das ist wunderbar.
Pat Myron
Gute Idee. Leider ist der grepreguläre Ausdruck zu langsam. Hat diffauch eine -tOption zum Erweitern von Registerkarten.
Timmmm
12

Hat noch niemand icdiff erwähnt ? Es ist großartig! Pic spricht für sich: icdiff

Radek Postołowicz
quelle
Dies ist ein sehr hübsches Werkzeug, das auch in Englisch erhältlich ist.
Uzumaki D. Ichigo
Zu langsam für große Dateien.
Timmmm
0

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

woher

-t: Tabulatoren in Leerzeichen übersetzen

-W: Whitespace-Unterschiede ignorieren

-B: Leerzeilen ignorieren

-s: Ignoriere gleiche Zeilen

-w $ COLUMNS: Verwenden Sie die gesamte Bildschirmbreite

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

Moshe Yudkowsky
quelle