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 xscope
einem 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/ ( log13
und log14
) zur Verfügung. In der xscope-filter
Datei befindet sich ein Vorverarbeitungsbefehl, der Zeitstempel und andere kleinere Details entfernt.
diff
eine--suppress-common-lines
Option? pastebin.com/KZrVCNFRvimdiff
(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
.Antworten:
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.
sdiff
Ich benutze dieses Tool seit Jahren. Ich starte es im Allgemeinen mit den folgenden Schaltern:
-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.
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.
quelle
colordiff
von colordiff.org als Quelldatei. Meines Erachtenssdiff
ist ähnlich,diff -y
ohne Unterschiede in der Ausgabe, aber leicht unterschiedliche Optionen. +1 für einige gute Alternativen zu plain diff.diff -y
. Das Hinzufügen dieses Schalters zudiff
scheint 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.Derzeit verwende ich Side-by-Side-Diff mit Grep-Filterung der verschiedenen Zeilen:
-W250
macht 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 folgenless -rS
Ermöglicht die Interpretation von ANSI-Farben (-r
) und verhindert Zeilenumbrüche (-S
).Dies ist ein Hack, Alternativen sind willkommen.
quelle
grep
reguläre Ausdruck zu langsam. Hatdiff
auch eine-t
Option zum Erweitern von Registerkarten.Hat noch niemand icdiff erwähnt ? Es ist großartig! Pic spricht für sich:
quelle
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.
quelle