J'ai deux fichiers journaux avec des milliers de lignes. Après le pré-traitement, seules quelques lignes diffèrent. Ces lignes restantes sont soit des différences réelles, soit des groupes de lignes mélangés.
Les différences unifiées me permettent de voir les différences détaillées, mais rendent difficile la comparaison manuelle avec des 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. Y a-t-il un moyen d'obtenir l'avantage des deux mondes?
Notez que ces fichiers journaux sont générés par xscope
un programme qui surveille les données du protocole Xorg. Je recherche des outils généraux pouvant être appliqués à des situations similaires à celles décrites ci-dessus, et non des outils d'analyse de journaux d'accès au serveur Web spécialisés, par exemple.
Deux exemples de fichiers journaux sont disponibles à l' adresse 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.
diff
une--suppress-common-lines
option? pastebin.com/KZrVCNFRvimdiff
(du paquet vim ) répondrait mieux à vos besoins: affichage parallèle, colorisé, lignes communes pliées. Les numéros de ligne peuvent être activés avec:set number
.Réponses:
Les 2 outils diff j'utilise le plus serait fondre et sdiff .
se fondre
Meld est une interface graphique, mais fait un excellent travail en montrant des différences entre les fichiers. Il est davantage destiné au développement logiciel avec des fonctionnalités telles que la possibilité de déplacer les modifications d'un côté à l'autre afin de fusionner les modifications, mais peut être utilisé uniquement comme un outil de différenciation côte à côte.
sdiff
J'ai utilisé cet outil pendant des années. Je l'exécute généralement avec les commutateurs suivants:
-b
Ignorer les changements dans la quantité d'espace blanc.-W
Ignorer tous les espaces blancs.-B
Ignorer les modifications dont les lignes sont toutes vides.-s
Ne pas sortir les lignes communes.Souvent, avec les fichiers journaux, vous aurez besoin d'élargir la largeur des colonnes et d'élargir
-w <num>
l'écran.d'autres outils que j'utilise de temps en temps
diffc
Diffc est un script python qui colorise la sortie des différences unifiées.
Vimdiff
Vimdiff est probablement aussi bon sinon meilleur que le mélange et il peut être exécuté depuis un terminal. J'oublie toujours de l'utiliser, ce qui, pour moi, est un bon indicateur du fait que je trouve l'outil un peu trop difficile à utiliser au quotidien. Mais YMMV.
la source
colordiff
de colordiff.org pour le fichier source. À ma connaissance,sdiff
est semblable àdiff -y
sans différence de production mais avec des options légèrement différentes. +1 pour avoir montré quelques bonnes alternatives au plain diff.diff -y
. L'ajout de ce commutateurdiff
semble avoir eu lieu à un moment donné, ou je ne l'ai jamais remarqué. De plus, voici un lien vers la page de ressources gnu diff tools . Bon matériel pour utiliser cette suite d'outils.J'utilise actuellement des différences côte à côte avec grep filtrant les différentes lignes:
-W250
rend la sortie plus large, ce qui me permet de voir plus de données.expand
est nécessaire pour convertir des tabulations en espaces-C3
ajoute 3 lignes de contexte à la sortie de grep.^.{123}
correspond à la moitié des données avant les marqueurs de différences côte à côte.colordiff
rend la sortie plus jolie à suivreless -rS
permet aux couleurs ANSI d'être interprétées (-r
) et empêche les lignes enveloppées (-S
).C'est un hack, les alternatives sont les bienvenues.
la source
grep
expression régulière est trop lente. A égalementdiff
une-t
option pour développer les onglets.Personne n'a encore mentionné icdiff ? C'est bien! Pic parle pour lui-même:
la source
La commande "sdiff" de linux affiche les différences côte à côte, y compris par défaut toutes les lignes, mais vous pouvez utiliser différentes options pour afficher uniquement les différences:
sdiff -tWBs -w $COLUMNS config.xml config.xml.original
où
-t: traduire les onglets en espaces
-W: ignorer les différences d'espaces
-B: ignorer les lignes vides
-s: ignore 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 simplement l'essayer.
la source