AWK : extraire le contenu de paragraphes multiples

Blanc57 Messages postés 377 Statut Membre -  
Blanc57 Messages postés 377 Statut Membre -
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

  1. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    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
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Salut,

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

      Merci pour lui.
      0
    2. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
       
      AIX ...j'ai dû consulter les grimoires...
      je suppose que sed AIX ne supporte pas toutes tes options ...
      0
    3. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      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
  2. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    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
  3. Blanc57 Messages postés 377 Statut Membre 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
  4. Blanc57 Messages postés 377 Statut Membre 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