Un moyen facile de diff fichiers journaux, en ignorant le temps de timbres?
J'ai besoin de diff deux fichiers journaux mais ignorer l'horodatage partie de chaque ligne (les 12 premiers caractères pour être exact). Est-il un bon outil, ou un savant commande awk, qui pourrait m'aider?
Vous devez vous connecter pour publier un commentaire.
Selon le shell que vous utilisez, vous pouvez transformer l'approche @Blair suggéré dans un 1-liner
(+1 à @Blair pour la suggestion 🙂
@EbGreen dit
C'est probablement le meilleur pari, à moins que votre outil de comparaison a des pouvoirs spéciaux.
Par exemple, vous pouvez
Voir @trousse à outils de réponse pour une optimisation qui en fait un one-liner et élimine la nécessité pour les fichiers supplémentaires. Si votre shell prend en charge. Bash 3.2.39 semble au moins...
Réponses à l'aide de
cut
sont bien, mais parfois en gardant les horodatages dans lediff
de sortie est appréciable. Comme l'OP question est à propos de en ignorant le temps de timbres (ne pas enlever), je partage ici mes délicate ligne de commande:sed
isole les horodateurs (#
avant et\n
après) à l'intérieur d'un processus de substitutiondiff -I '^#'
ignore les lignes de ces dates (les lignes commençant par#
)exemple
Deux fichiers journaux ayant le même contenu, mais différents horodateurs:
De base
diff
ligne de commande, explique que toutes les lignes sont différentes:Notre délicate
diff -I '^#'
n'affiche aucune différence (horodateurs ignoré):Changement
2.log
(remplacerdata
parfoo
sur la ligne 6) et vérifier de nouveau:=> horodateurs sont conservés dans le
diff
sortie!Vous pouvez également utiliser le côté par côté fonctionnalité à l'aide d'
-y
ou--side-by-side
option:vieux
sed
Si votre
sed
mise en œuvre ne prend pas en charge la-r
option, vous pouvez avoir à compter de la période de douze points<(sed 's/^\(............\)/#\1\n/' 1.log)
ou utiliser un autre modèle de votre choix 😉Pour une option graphique, Meld pouvez le faire à l'aide de son filtres de texte fonctionnalité.
Il permet d'ignorer les lignes en fonction de un ou plusieurs python regex. Les différences apparaissent encore, mais les lignes qui n'ont pas de toutes les autres différences ne seront pas mis en évidence.
Utilisation Kdiff3 et à Configure>Diff modifier "Ligne de Correspondance de commande du Préprocesseur" à quelque chose comme:
sed "s/[ 012][0-9]:[0-5][0-9]:[0-5][0-9]//"
Cela va filtrer les temps-les timbres de la comparaison de l'alignement de l'algorithme.
Kdiff3 vous permet également de aligner manuellement des lignes spécifiques.
kdiff3 --cs LineMatchingPreProcessorCmd="sed \"s/[ 012][0-9]:[0-5][0-9]:[0-5][0-9]//\"" "/path/to/file 1.txt" "/path/to/file 2.txt"