Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 29/05/2014, à 18:11

aduxas

[RESOLU] concatenation dans awk

J'ai groupé un nombre de pattern dont j'ai besoin dans un script awk dans un tableau (N est une constante de l'ordre de plusieurs dizaines):

BEGIN{ s[1] = "string 1"; s[2] = "string 2"; ...; s[N] = "string N"}

$0~s[1] {<action 1>}
$0~s[2] {<action 2>}
...
$0~s[N] {<action N>}

END{ for( i=1; i<= N; i++ ) printf "<format>" s[i], ... }

- Est-ce que les pattern avec $0~ semblent bon, ou y a-t-il mieux?

- Mon script au départ utilisait des pattern explicits,  /^string 1/, etc., mais comme je réutilise les chaines, je préfère utiliser un tableau.  Cela me permet de faire des boucles, par exemple.  Malheureusement, j'ai un conflit, car l'omission du caret dans les chaines du tableau en rend deux non-uniques (l'un devient une sous-chaine de l'autre).  Je ne veux pas inclure le caret car il apparaitrait dans l'impression à la fin.  Est-ce qu'il y a moyen de changer le pattern $0~s[k] pour concatener le caret?  Je n'ai pas trouvé comment faire.  Si rien ne marche, je peux le filtrer dans les impressions, mais cela semble lourd.

Dernière modification par aduxas (Le 29/05/2014, à 20:13)

Hors ligne

#2 Le 29/05/2014, à 18:21

pingouinux

Re : [RESOLU] concatenation dans awk

Bonjour,
Ceci devrait convenir :

$0~"^"s[1] {<action 1>}

Hors ligne

#3 Le 29/05/2014, à 20:13

aduxas

Re : [RESOLU] concatenation dans awk

En effet.  Merci!

Hors ligne

#4 Le 30/05/2014, à 09:04

credenhill

Re : [RESOLU] concatenation dans awk

hello
autre manière de remplir un tableau

awk 'BEGIN {N=split("string 1;string 2;string N", s, ";")

Dernière modification par credenhill (Le 30/05/2014, à 09:07)

Hors ligne