Awk if: condition sur le print

marwai Messages postés 8 Statut Membre -  
dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   -
Salut!

Je suis sur un petit code avec awk: je cherche un motif, et si il est trouvé je souhaite printer les 3 lignes suivantes. Sans le if aucun problème:

awk '/motif/ {x=NR+3}(NR<=x) {print > "sortie"}' input

Mais avec un if, je bloque sur la condition avant le print (je souhaite faire un autre traitement si le motif n'est pas trouvé). Notamment j'ai une erreur de syntaxe qui point sur le print

awk '{ if (/motif/) {x=NR+3}(NR<=x) {print > "sortie"};} else

Si quelqu'un a une solution, merci d'avance!

1 réponse

  1. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    hello
    faut-il tenir compte des 3 lignes qui suivent /motif/ dans les lignes qui ne contiennent pas /motif/ ?
    0
    1. marwai Messages postés 8 Statut Membre
       
      Tu veux dire si /motif/ apparait à la 1 ligne et également à la deuxième par exemple?
      Je pense que la réponse à ta question est non (je ne la comprends pas très bien XD): exemple:
      blablablamotifblabla
      blablablamotifblabla
      blablabla
      blablabla

      je voudrais avoir:
      blablablamotifblabla
      blablablamotifblabla
      blablabla

      puis

      blablablamotifblabla
      blablabla
      blablabla


      Peut être que la question est un peu trop spécialisée: d'une manière générale je voudrais juste savoir comment faire accepter un truc type {x=NR+3}(NR<=x) avant le print dans un awk if
      0
    2. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
       
      tu peux faire : if (condition)print
      pour ton exemple, puisqu'on imprime 2 fois la 1ère ligne blablabla, il faut stocker les lignes, je ferais comme ça
      $ awk '{t[NR]=$0} /motif/ {s[++n]=NR} END {for(a=1; a<=n; a++){for(b=0;b<3;)print t[s[a]+b++]; print ""}}' fichier
      blablablamotifblabla
      blablablamotifblabla
      blablabla

      blablablamotifblabla
      blablabla
      blablabla
      0