Script shell

Fermé
Maxime5959 - 17 août 2011 à 20:20
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 - 18 août 2011 à 18:33
Bonjour,

j'aimerai exploiter les logs d'un logiciel sous linux dans un but statistique.
Le logiciel écrit des logs tous les jours dans le même fichier. Le programme commence à écrire les logs à 23H et peut terminer d'écrire vers 02H. A chaque début d'écriture de log le logiciel commence par écrire start et termine en écrivant end.

Exemple de log :


A 2011/07/29 23:00:00 Start
A 2011/07/29 23:30:10 champ1 champ2 champ3
A 2011/07/29 23:45:26 champ1 champ2 champ3
A 2011/07/30 00:18:33 champ1 champ2 champ3
A 2011/07/30 01:26:28 champ1 champ2 champ3
A 2011/07/30 01:45:54 End

J'aimerai que mon script récupère la valeur des champ3 pour la dernière session donc ici entre le 29/07 et 30/07

J'ai donc pour le moment ça :

cat fichier.log | grep 'champ1' | awk '{print $6}' mais la je récupère tous les champ3 de tous les jours.

Pouvez-vous m'indiquer comment faire pour récupérer la valeurs des champs 3 de la dernière session ?

Par avance merci
A voir également:

3 réponses

Bonjour,

http://www.funix.org/fr/unix/main-unix.php?ref=awk&page=menu

awk '{ if ($NF == "End") next; else if ($NF == "Start") exit; else print $NF }' <(tac fichier.in) | tac d'apres developpez
0
Bonjour,

Merci pour ta réponse mais cette méthode me donne tous les champs 3 et pas juste les champs de la dernière session.
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 409
18 août 2011 à 18:33
Salut,

En reprenant l'exemple plus haut issue de developpez.net...
J'ai juste rajouté 2 plages supplémentaires pour que l'exemple soit plus parlant. Il faut juste changer "else print $NF" par "else print $6" dans la syn taxe.

$ cat fich
A 2011/07/29 23:00:00 Start
A 2011/07/29 23:30:10 champ1 champ2 champ3
A 2011/07/29 23:45:26 champ1 champ2 champ3
A 2011/07/30 00:18:33 champ1 champ2 champ3
A 2011/07/30 01:26:28 champ1 champ2 champ3
A 2011/07/30 01:45:54 End
A 2011/08/29 23:00:00 Start
A 2011/08/29 23:30:10 champ1 champ2 champ3
A 2011/08/29 23:45:26 champ1 champ2 champ3
A 2011/08/30 00:18:33 champ1 champ2 champ3
A 2011/08/30 01:26:28 champ1 champ2 champ3
A 2011/08/30 01:45:54 End
A 2011/09/29 23:00:00 Start
A 2011/09/29 23:30:10 champ1 champ2 champ34
A 2011/09/29 23:45:26 champ1 champ2 champ34
A 2011/09/30 00:18:33 champ1 champ2 champ34
A 2011/09/30 01:26:28 champ1 champ2 champ34
A 2011/09/30 01:45:54 End

$ awk '{ if ($NF == "End") next; else if ($NF == "Start") exit; else print $6 }' <(tac fich) | tac
champ34
champ34
champ34
champ34
0