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.