AWK : extraire le contenu de paragraphes multiples

Blanc57 Messages postés 369 Date d'inscription   Statut Membre Dernière intervention   -  
Blanc57 Messages postés 369 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Difficile de trouve un titre qui explique clairement mon problème :

J'ai un fichier log SystemOut.log de serveur WebSphere dont je souhaite extraire les informations pour chaque démarrage d'application.

Dans mon cas je considère que le démarrage est séparé par les lignes suivantes :
******************* Start Display Current Environment ********************
[...]
[...] Server XXXXXX open for e-business

J'ai commencé par utiliser une commande du genre :

cat SystemOut.log | awk '/Start\ Display\ Current\ Environment/,/open\ for\ e-business/'


Lorsqu'il n'y a qu'un démarrage dans les logs, cela fonctionne.
Le problème se pose lorsque le log SystemOut contient plusieurs traces de démarrage.

Dans ce cas, j'obtiens également toute la partie de texte entre les deux démarrages...

Comment puis-je faire pour n'extraire que la partie de texte correspondant aux démarrages, voir uniquement du dernier démarrage, même s'il y a plusieurs démarrages dans mes logs ?

J'aimerais si possible le faire par awk et de la manière la plus simple possible...
Je suis sous AIX avec KornShell

Merci d'avance pour votre aide.

4 réponses

dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
hello
avec awk, en reprenant le fchier plop de zip30+1
$ awk '{t[NR]=$0} /Start Display/ {f=NR} /open for e-business/ {l=NR} END {for(n=f+1; n<l;)print t[n++]}' plop
blabla4
blabla4
$
2
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431
 
Salut,

C'est à cette heure-ci que tu arrives feignasse ? ;-))

Merci pour lui.
0
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
AIX ...j'ai dû consulter les grimoires...
je suppose que sed AIX ne supporte pas toutes tes options ...
0
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431
 
Peut-être pas sous cette forme (syntaxe sur une ligne), mais d'après le grimoire sed de AIX, toutes les options y figurent. Sûrement que dans un fichier ça devrait passer sous cette forme :
:z                                     
N
$ !b z
s/.*Start Display Current[^\n]*\n\(.*\)\n.*/\1/
A appeler avec cette syntaxe :
sed -f script.sed fichier_à_traiter
.
0
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431
 
Salut,

J'aimerais si possible le faire par awk
Il y a une raison particulière ?


Sinon, avec sed on peut faire ceci (en espérant que ta version sur AIX en accepte la syntaxe) :

Le fichier exemple (avec plusieurs paragraphes) :
$ cat plop 
******************* Start Display Current Environment ********************
blabla1
blabla1
[...] Server XXXXXX open for e-business
******************* Start Display Current Environment ********************
blabla2
blabla2
[...] Server XXXXXX open for e-business
******************* Start Display Current Environment ********************
blabla3
blabla3
[...] Server XXXXXX open for e-business
******************* Start Display Current Environment ********************
blabla4
blabla4
[...] Server XXXXXX open for e-business

Extraction de tous les paragraphes :
$ sed -n '/Start Display Current/,/open for e-business/{//b;p}' plop 
blabla1
blabla1
blabla2
blabla2
blabla3
blabla3
blabla4
blabla4

Extraction uniquement du dernier paragraphe :
$ sed ':z;N;$!bz;s/.*Start Display Current[^\n]*\n\(.*\)\n.*/\1/;' plop 
blabla4
blabla4

;-))
1
Blanc57 Messages postés 369 Date d'inscription   Statut Membre Dernière intervention   73
 
Merci beaucoup pour votre aide et vos réponses...

Je n'ai pas l'occasion de tester vos propositions aujourd'hui. Je pourrais tester cela demain ou après-demain je pense...

Quant à "pourquoi awk", c'est vrai qu'avec le recul je n'ai aucune obligation d'utiliser awk. Du moment que mon script fonctionne.
C'est juste que j'avais commencé avec awk. Je savais bien qu'il devait y avoir une solution grâce à awk et en même temps, j'étais curieux de connaitre cette solution.

Merci encore.
0
Blanc57 Messages postés 369 Date d'inscription   Statut Membre Dernière intervention   73
 
J'ai pu faire le test sous Bourne Shell et effectivement cela fonctionne.

Je n'ai pas pu réaliser le test sous AIX/KornShell pour l'instant mais il n'y a pas de raisons que cela ne marche pas...

Merci encore énormement pour votre aide à tous les deux ;) !!!!
0