web-dev-qa-db-fra.com

Existe-t-il un format de comparaison côte à côte condensé?

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.

44
Lekensteyn

Les 2 outils de diff que j'utilise le plus seraient meld et sdiff .

fusionner

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.

ss of meld

ss of meld code highlighting

sdiff

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.

d'autres outils que j'utilise de temps en temps

diffc

Diffc est un script python qui colorise la sortie diff unifiée.

$ diffc [OPTION] FILE1 FILE2

ss of diffc

vimdiff

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.

ss of vimdiff

38
slm

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
  • Option -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 à suivre
  • less -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.

20
Lekensteyn

Personne n'a mentionné icdiff encore? C'est bien! Pic parle de lui-même: icdiff

14

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

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

3
Moshe Yudkowsky