Parseur de LOG

Fermé
gunbol Messages postés 47 Date d'inscription mercredi 19 septembre 2007 Statut Membre Dernière intervention 18 mars 2016 - 22 janv. 2009 à 10:17
jipicy Messages postés 40805 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 - 22 janv. 2009 à 13:45
Bonjour,

Je chercher à faire un script pour parser des logs, pour remonter une alerte. le fichier est sous la forme suivante:

timesamp1
Bla bla bla bla
Bla bla bla bla
Bla bla bla bla
Bla bla bla bla
timesamp2
Bla bla bla bla
Bla bla bla bla
Bla bla !!! PATTERN !!!!bla bla
Bla bla bla bla
Bla bla bla bla
timesamp3
Bla bla bla bla
Bla bla bla bla

Je veux pouvoir pour chercher le mot 'PATTERN' dans un message suivant, et ressortir quelque chose sous la forme:
ALERTE: PATTERN trouvé dans la log:
timesamp2
Bla bla bla bla
Bla bla bla bla
Bla bla !!! PATTERN !!!!bla bla
Bla bla bla bla
Bla bla bla bla

Les 'langages' à utiliser sont awk, ksh, éventuellement perl.

Au départ, j'ai voulu jouer avec RS et FS de awk en mettant RS='timestamp' et FS='\n', mais cela ne marche pas vu que RS (en awk ou en nawk) ne prend qu'un seul caractère en argument.

J'espère que j'ai pas été trop confus dans mes explications.

Avez vous une idée pour m'aider ?

Merci d'avance.

Gunther

1 réponse

jipicy Messages postés 40805 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 901
22 janv. 2009 à 13:45
Salut,

Bon c'est en bash et avec sed, mais enfin si ça peut faire avancer le schmilblick...
jp@MDK:~/tmpfs ssh$ cat fich.log
timesamp1
Bla bla bla bla
Bla bla bla bla
Bla bla bla bla
Bla bla bla bla
timesamp2
Bla bla bla bla
Bla bla bla bla
Bla bla !!! PATTERN !!!!bla bla
Bla bla bla bla
Bla bla bla bla
timesamp3
Bla bla bla bla
Bla bla bla bla
timesamp4
Bla bla bla bla
Bla bla bla bla
Bla bla !!! PATTERN !!!!bla bla
Bla bla bla bla
Bla bla bla bla
timesamp5
Bla bla bla bla
Bla bla bla bla
Bla bla bla bla
Bla bla bla bla

jp@MDK:~/tmpfs ssh$ cat foo.sed
#n
/^timesamp/ {
    :z
    H
    n
    /^timesamp/ !{
        b z
    }
    x
    /PATTERN/ {
        s/.*/ALERTE : PATTERN trouvé dans le LOG sur &/p
    }
g
b z
}

jp@MDK:~/tmpfs ssh$ sed  -f foo.sed fich.log
ALERTE : PATTERN trouvé dans le LOG sur timesamp2
timesamp2
Bla bla bla bla
Bla bla bla bla
Bla bla !!! PATTERN !!!!bla bla
Bla bla bla bla
Bla bla bla bla
ALERTE : PATTERN trouvé dans le LOG sur timesamp4
timesamp4
Bla bla bla bla
Bla bla bla bla
Bla bla !!! PATTERN !!!!bla bla
Bla bla bla bla
Bla bla bla bla
jp@MDK:~/tmpfs ssh$
;-))
0