Awk if: condition sur le print

marwai Messages postés 8 Date d'inscription   Statut Membre Dernière intervention   -  
dubcek Messages postés 18789 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

dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
hello
faut-il tenir compte des 3 lignes qui suivent /motif/ dans les lignes qui ne contiennent pas /motif/ ?
0
marwai Messages postés 8 Date d'inscription   Statut Membre Dernière intervention  
 
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
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
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