Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1848 connectés 

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  [bash] extraction des erreurs dans un log

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[bash] extraction des erreurs dans un log

n°1909453
rapha3L
Posté le 28-07-2009 à 15:44:00  profilanswer
 

Bongour  :o  
 
Voila, je souhaite extraire les erreurs d'un fichier log de type
 

Citation :

DEBUG <25/07/2009 13:42>, blabla
blabla
 
DEBUG <25/07/2009 13:42>, blabla
blabla
 
ERROR <25/07/2009 14:51>, blabla
blabla blabla blabla
blabla blabla blabla
 


 
L'objectif est d'extraire les erreurs avec tout le blabla en dessous, ce qui représente en gros une 100aine de lignes par erreur.
 
J'ai fais un script à l'arrache qui me permet de récupérer tout ce qu'il faut, le problème c'est qu'il met 3 min pour un fichiers de log de 70.000 lignes [:tinostar]
 
 
Attention les yeux [:ripthejacker:3]  

Citation :

while read lignes
do
 
  case   $(echo $lignes | cut -d " " -f1 )  in
 
        ERROR)  echo "" >> $file && echo $lignes >> result.txt && continue=1 ;;
 
        DEBUG|WARN|INFO) continue=0;;
 
 
        *) if [ "$continue" = "1" ];then echo $lignes >> $file ;fi;;
  esac
 
done < $log


 
 
 
 
Avec awk j'arrive uniquement à extraire la ligne contenant le champ ERROR mais j'arrive pas à récupérer tout le blabla qui vient après. Z'auriez pas une idée? :o
 
Thx [:augie]
 
 


Message édité par rapha3L le 28-07-2009 à 15:44:41
mood
Publicité
Posté le 28-07-2009 à 15:44:00  profilanswer
 

n°1909505
rapha3L
Posté le 28-07-2009 à 18:11:27  profilanswer
 

Bon, j'ai réussi à pondre mon code optimisé, je passe de 3 min à 3 secondes, la puissance du AWK quoi [:dawa]

n°1910106
Sve@r
Posté le 29-07-2009 à 22:18:48  profilanswer
 

rapha3L a écrit :

Bon, j'ai réussi à pondre mon code optimisé, je passe de 3 min à 3 secondes, la puissance du AWK quoi [:dawa]


 
T'as tenté la puissance du Python ???

Code :
  1. #!/usr/bin/env python
  2. # coding: Latin-1 -*-
  3. fp_in=open("fichier_log", "r" )
  4. fp_out=open("retult.txt", "w" )
  5. for line in fp_in:
  6.     mot=line.split(" " )[0]
  7.     if mot == "ERROR": continue=True
  8.     if mot in ["DEBUG", "WARN", "INFO"]: continue=False
  9.     if continue: fp_out.write("%s" % line)
  10. # for
  11. fp_in.close()
  12. fp_out.close()


 
Et je n'ai fait que réécrire ton algo shell...


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1910111
rapha3L
Posté le 29-07-2009 à 23:24:59  profilanswer
 

Jteste demain sur un log de 140mo  [:gaga jap]  
 
Programe testé, il a pas trop apprécié la variable `continue` donc je l'ai remplacé par autre chose.
Ton script en python est bien mais il reste 2 fois plus lent [:ocube]
Néanmonis le python semble intéressant et "facile" à utiliser. Si t'as un bon tuto, je suis preneur :p
 
Mon truc en awk:

Code :
  1. #!/bin/bash
  2. log=$1
  3. fic=resultat_awk.txt
  4. awk '
  5. {
  6. if (  $1 ~ "ERROR" )
  7.          { pouet=1; print $0;}
  8. else if ( $1 ~ /(DEBUG|INFO|WARNING)/ )
  9.         { pouet=0;}
  10. else if ( pouet == "1" ){print $0}
  11. }
  12.   ' < $log > $fic


Message cité 1 fois
Message édité par rapha3L le 30-07-2009 à 11:50:21
n°1910405
Taz
bisounours-codeur
Posté le 30-07-2009 à 17:11:18  profilanswer
 

magnifique le bash qui contient qu'un awk !

n°1910431
rapha3L
Posté le 30-07-2009 à 17:57:06  profilanswer
 

C'est un script que je vais utiliser ptet 2 fois dans l'année, donc on va dire que je suis allé à l'essentiel [:ocube]

n°1910432
Taz
bisounours-codeur
Posté le 30-07-2009 à 18:00:40  profilanswer
 

sinon si c'est le premier mot, te biles pas, tu peux faire ça avec grep.

n°1910444
rapha3L
Posté le 30-07-2009 à 18:32:12  profilanswer
 

J'ai utilisé grep ERROR -A 2 pour avoir les 2 premières lignes. Mais comme j'avais du temps à tuer je suis parti dans un truc un peu plus complet.
D'ailleurs jvais ptet me mettre au Perl histoire de m'occuper :p

n°1910465
Sve@r
Posté le 30-07-2009 à 20:43:54  profilanswer
 

rapha3L a écrit :

Programe testé, il a pas trop apprécié la variable `continue` donc je l'ai remplacé par autre chose.


Arf suis trop con. J'ai utilisé ta variable shell sans penser que c'était un mot clef Python (et aussi C, Pascal et autres). Mais bon, j'ai tapé ça "en live"...
 

rapha3L a écrit :

Ton script en python est bien mais il reste 2 fois plus lent [:ocube]


Là suis étonné !!!
 

rapha3L a écrit :

Néanmoins le python semble intéressant et "facile" à utiliser. Si t'as un bon tuto, je suis preneur :p


Le tuto de Swinnen (400 pages). Tape "python swinnen" dans un moteur de recherche...
 

rapha3L a écrit :

D'ailleurs jvais ptet me mettre au Perl histoire de m'occuper :p


Et pas Python ???


Message édité par Sve@r le 30-07-2009 à 20:45:06

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1910473
rapha3L
Posté le 30-07-2009 à 21:29:44  profilanswer
 

Héhé. J'ai lu quelques comparatifs python/perl aujourd'hui, tout le monde semble être d'accord sur le fait que perl est illisible et que python est plus facile pour les débutants.  
Vous avez pu le constater, je sais pas programmer et mon bash vole pas haut, jrisque de m'y casser les dents sur le perl. :o
Néanmoins jvais tremper le bout des doigts dans les docs que j'ai trouvé et tester si j'arrive à quelquechose.
Je compte aussi tester python par la suite, ne t'inquiète pas. Par contre j'aurai peu d'occasion de l'utiliser dans mon taf, du coup je sais pas si c'est intéressant de se farcire des docs de 400 pages :sweat:
 
Concernant la vitesse d'éxecution de ton script, j'ai dit que c'étais 2 fois plus lent, donc en gros 3 bonnes secondes. De plus, mon log de 140mo ne contenait que 28 erreurs, c'est ptet pas assez... Demain je teste avec 2000 erreurs histoire de voir comme ce débrouillent nos scripts :)

mood
Publicité
Posté le 30-07-2009 à 21:29:44  profilanswer
 

n°1910483
Sve@r
Posté le 30-07-2009 à 22:46:47  profilanswer
 

rapha3L a écrit :

Héhé. J'ai lu quelques comparatifs python/perl aujourd'hui, tout le monde semble être d'accord sur le fait que perl est illisible et que python est plus facile pour les débutants.


C'est vrai que Python ça s'apprend les doigts dans le nez comparé à d'autres langages (je suis tombé hier sur un tuto de "Rebol", j'ai été gavé au bout de 3 lignes)
 

rapha3L a écrit :

Je compte aussi tester python par la suite, ne t'inquiète pas. Par contre j'aurai peu d'occasion de l'utiliser dans mon taf, du coup je sais pas si c'est intéressant de se farcir des docs de 400 pages :sweat:


Effectivement. Faut en avoir l'utilité. Mais bon, sur les 400 pages, il y a un gros pavé dédié aux librairies (sql, tkinter, turtle, etc) et la partie pur Python est plus réduite...


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1910486
rapha3L
Posté le 30-07-2009 à 23:11:17  profilanswer
 

Y'a un topic python sur HFR? [:dawa]

n°1910517
Taz
bisounours-codeur
Posté le 31-07-2009 à 08:21:23  profilanswer
 

rapha3L a écrit :

Héhé. J'ai lu quelques comparatifs python/perl aujourd'hui, tout le monde semble être d'accord sur le fait que perl est illisible et que python est plus facile pour les débutants.  
Vous avez pu le constater, je sais pas programmer et mon bash vole pas haut, jrisque de m'y casser les dents sur le perl. :o
Néanmoins jvais tremper le bout des doigts dans les docs que j'ai trouvé et tester si j'arrive à quelquechose.
Je compte aussi tester python par la suite, ne t'inquiète pas. Par contre j'aurai peu d'occasion de l'utiliser dans mon taf, du coup je sais pas si c'est intéressant de se farcire des docs de 400 pages :sweat:
 
Concernant la vitesse d'éxecution de ton script, j'ai dit que c'étais 2 fois plus lent, donc en gros 3 bonnes secondes. De plus, mon log de 140mo ne contenait que 28 erreurs, c'est ptet pas assez... Demain je teste avec 2000 erreurs histoire de voir comme ce débrouillent nos scripts :)

Sinon les vrais hommes codent et logguent avec log4* ou syslog, du coup, les erreurs peuvent être redirigées directement vers un log spécial.

n°1910568
rapha3L
Posté le 31-07-2009 à 09:57:16  profilanswer
 

C'est pas mon taf [:spamafote]
C'etait une demande ponctuelle [:ocube]


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Shell/Batch

  [bash] extraction des erreurs dans un log

 

Sujets relatifs
[Access 2000] Fct Vrai-Faux erreursEnregistrer une base de données access et gérer les erreurs
1er site à la main et premieres erreursProblème gestion des erreurs
Gestion des erreurs dans une chaine de tubes[ksh ou bash] Erreur avec sed
Jeux des 7 erreurscommande bash echo
[Script] Piloter une application windows avec une gestion des erreursbash mysql
Plus de sujets relatifs à : [bash] extraction des erreurs dans un log


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR