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

  1. 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
  2. jethro91 Messages postés 1 Statut Membre
     
    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
    1. 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
  3. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    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