Awk if: condition sur le print

Fermé
marwai Messages postés 8 Date d'inscription samedi 15 février 2014 Statut Membre Dernière intervention 13 juillet 2014 - 26 févr. 2014 à 17:38
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 - 28 févr. 2014 à 14:17
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 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
27 févr. 2014 à 10:20
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 samedi 15 février 2014 Statut Membre Dernière intervention 13 juillet 2014
Modifié par marwai le 27/02/2014 à 12:18
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 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
28 févr. 2014 à 14:17
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