J'ai deux fichiers journaux avec des milliers de lignes. Après le prétraitement, seules certaines lignes diffèrent. Ces lignes restantes sont soit de réelles différences, soit des groupes de lignes mélangés.
Les différences unifiées me permettent de voir les différences détaillées, mais cela rend difficile la comparaison manuelle avec les globes oculaires. Les différences côte à côte semblent plus utiles pour la comparaison, mais elles ajoutent également des milliers de lignes inchangées. Existe-t-il un moyen de tirer parti des deux mondes?
Notez que ces fichiers journaux sont générés par xscope
qui est un programme qui surveille les données du protocole Xorg. Je recherche des outils à usage général qui peuvent être appliqués à des situations similaires à celles ci-dessus, pas des outils d'analyse de journal d'accès au serveur Web spécialisés par exemple.
Deux exemples de fichiers journaux sont disponibles sur http://lekensteyn.nl/files/qemu-sdl-debug/ (log13
et log14
). Une commande de pré-processeur peut être trouvée dans le xscope-filter
fichier qui supprime les horodatages et autres détails mineurs.
Les 2 outils de diff que j'utilise le plus seraient meld et sdiff .
Meld est une interface graphique mais fait un excellent travail en montrant les différences entre les fichiers. Il est davantage orienté vers le développement de logiciels avec des fonctionnalités telles que la possibilité de déplacer des modifications d'un côté à l'autre pour fusionner les modifications, mais peut être utilisé comme un simple outil de comparaison côte à côte.
J'utilise cet outil depuis des années. Je l'exécute généralement avec les commutateurs suivants:
$ sdiff -bBWs file1 file2
-b
Ignorer les modifications de la quantité d'espace blanc.-W
Ignore tous les espaces blancs.-B
Ignorer les modifications dont les lignes sont toutes vides.-s
Ne pas sortir de lignes communes.Souvent, avec les fichiers journaux, vous devrez élargir la largeur des colonnes, vous pouvez utiliser -w <num>
pour agrandir l'écran.
Diffc est un script python qui colorise la sortie diff unifiée.
$ diffc [OPTION] FILE1 FILE2
Vimdiff est probablement aussi bon sinon meilleur que meld et il peut être exécuté depuis un terminal. J'oublie toujours de l'utiliser, ce qui, pour moi, est un bon indicateur que je trouve l'outil un peu difficile à utiliser au quotidien. Mais YMMV.
Actuellement, j'utilise le diff côte à côte avec le filtrage grep des différentes lignes:
diff -y -W250 log.txt log2.txt | expand | \
grep -E -C3 '^.{123} [|<>]( |$)' | colordiff | less -rS
-W250
rend la sortie plus large de sorte que je puisse voir plus de données.expand
est nécessaire pour convertir les tabulations en espaces-C3
ajoute 3 lignes de contexte à la sortie grep.^.{123}
correspond à la moitié des données avant les marqueurs de différence côte à côte.colordiff
rend la sortie plus jolie à suivreless -rS
permet d'interpréter les couleurs ANSI (-r
) et empêche les lignes encapsulées (-S
).C'est un hack, les alternatives sont les bienvenues.
Personne n'a mentionné icdiff encore? C'est bien! Pic parle de lui-même:
La commande linux "sdiff" affiche les différences côte à côte, incluant par défaut toutes les lignes, mais vous pouvez utiliser diverses options pour n'afficher que les différences:
sdiff -tWBs -w $COLUMNS config.xml config.xml.original
où
-t: traduire les tabulations en espaces
-W: ignorer les différences d'espaces
-B: ignorer les lignes vides
-s: ignorer les lignes identiques
-w $ COLUMNS: utilise toute la largeur de l'écran
Les lignes affichées seront divisées par |, <ou> - voir la documentation, ou essayez simplement.