#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