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 -
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 :
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.
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.
A voir également:
- AWK : extraire le contenu de paragraphes multiples
- Awk dédoublonner un print ✓ - Forum Shell
- SED ou Awk sous windows ?? - Forum Windows
- Suppression de lignes en awk ✓ - Forum Shell
- Awk : tri selon la date ✓ - Forum Shell
- Awk : remplacement d'un élément conditionnel - Forum Shell
4 réponses
hello
avec awk, en reprenant le fchier plop de zip30+1
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
$
Salut,
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) :
Extraction de tous les paragraphes :
Extraction uniquement du dernier paragraphe :
;-))
J'aimerais si possible le faire par awkIl 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
;-))
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.
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.
C'est à cette heure-ci que tu arrives feignasse ? ;-))
Merci pour lui.
je suppose que sed AIX ne supporte pas toutes tes options ...
A appeler avec cette syntaxe : .