[bash] extraction des erreurs dans un log

extraction des erreurs dans un log [bash] - Shell/Batch - Programmation

Marsh Posté le 28-07-2009 à 15:44:00    

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
Reply

Marsh Posté le 28-07-2009 à 15:44:00   

Reply

Marsh Posté le 28-07-2009 à 18:11:27    

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

Reply

Marsh Posté le 29-07-2009 à 22:18:48    

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

Marsh Posté le 29-07-2009 à 23:24:59    

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
Reply

Marsh Posté le 30-07-2009 à 17:11:18    

magnifique le bash qui contient qu'un awk !

Reply

Marsh Posté le 30-07-2009 à 17:57:06    

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]

Reply

Marsh Posté le 30-07-2009 à 18:00:40    

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

Reply

Marsh Posté le 30-07-2009 à 18:32:12    

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

Reply

Marsh Posté le 30-07-2009 à 20:43:54    

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

Marsh Posté le 30-07-2009 à 21:29:44    

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 :)

Reply

Marsh Posté le 30-07-2009 à 21:29:44   

Reply

Marsh Posté le 30-07-2009 à 22:46:47    

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

Marsh Posté le 30-07-2009 à 23:11:17    

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

Reply

Marsh Posté le 31-07-2009 à 08:21:23    

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.

Reply

Marsh Posté le 31-07-2009 à 09:57:16    

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

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed