Awk : remplacement d'un élément conditionnel
drepo
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonjour à toute la communauté,
je suis à la disposition d'un fichier test :
(une lettre, un espace, une lettre, un espace,...) que je souhaiterais interpréter de la manière suivante :
(a chaque fois que j'ai deux "a" espacés de 6 colonnes, introduire un retour chariot devant le second "a" : noter la petite feinte sur la 3eme ligne)
j'ai donc réalisé ceci :
je tourne un peu autour du $i dans le gsub, mais je ne parviens pas à interpréter le fichier avec la bonne fréquence de un sur 6 avec $i ou $(i+6).
J'ai l'impression que je ne peux pas substituer un élement découvert de manière dynamique par double condition?
Auriez-vous des pistes? Merci d'avance
je suis à la disposition d'un fichier test :
a z e r t y a z e r t y a z e r a y a z e r t y
(une lettre, un espace, une lettre, un espace,...) que je souhaiterais interpréter de la manière suivante :
a z e r t y a z e r t y a z e r a y a z e r t y
(a chaque fois que j'ai deux "a" espacés de 6 colonnes, introduire un retour chariot devant le second "a" : noter la petite feinte sur la 3eme ligne)
j'ai donc réalisé ceci :
cat test | awk '{
for(i=1;i<=NF-6;i=i+6) {
if($i="a") {
if($(i+6)="a"){
gsub(/"$i"/,"\na");
}
}
} print;
}'|less
je tourne un peu autour du $i dans le gsub, mais je ne parviens pas à interpréter le fichier avec la bonne fréquence de un sur 6 avec $i ou $(i+6).
J'ai l'impression que je ne peux pas substituer un élement découvert de manière dynamique par double condition?
Auriez-vous des pistes? Merci d'avance
3 réponses
-
salut,
awk 'BEGIN{FS=OFS=" "}{for(i=1;i<=NF;i++){if(i-6>0){if($i=="a" && $(i-6)=="a")var=(var?var"\n"$i:$i);else var=(var?var OFS $i:$i)}}print var}}' test a z e r t y a z e r a y a z e r t yK.I.S.S. -
Hello qqch*
je regardais la réponse que tu as faite et chez moi cela ne fonctionne pas alors que ton code me parait bon, tu utilises quelle version de awk?
BTW : avec un nawk, pas mieux? -
hello
attention à la différence entre = et ==; $i="a" assigne "a" au champ $iif($i="a") { if($(i+6)="a"){
essayerawk '{n=split($0, a);for(m=1; m<=n;){if(m%6==1 && a[m]=="a" && m-1)print ""; printf a[m++]}print""}' fichier azerty azerty azeray azerty $