Awk : remplacement d'un élément conditionnel

drepo -  
 Utilisateur anonyme -
Bonjour à toute la communauté,

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

Utilisateur anonyme
 
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 y
K.I.S.S.
0
jethro91 Messages postés 1 Date d'inscription   Statut Membre Dernière intervention  
 
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?
0
Utilisateur anonyme
 
«cela ne fonctionne pas » est une variante du renommé «ça marche pas», qui n'est pas hyper précis pour décrire les conditions de l'échec d'une commande.

nawk: BEG[...]print var}}
nawk: [...]             ^ syntax error
j'ai mis un '}' en trop.
0
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
hello
attention à la différence entre = et ==; $i="a" assigne "a" au champ $i
if($i="a") {
      if($(i+6)="a"){

essayer
awk '{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
$ 
0