Awk : remplacement d'un élément conditionnel

Fermé
drepo - 15 oct. 2012 à 18:36
 Utilisateur anonyme - 16 oct. 2012 à 17:32
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

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 mardi 16 octobre 2012 Statut Membre Dernière intervention 16 octobre 2012
16 oct. 2012 à 10:52
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
16 oct. 2012 à 17:32
«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 18752 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 3 octobre 2024 5 618
16 oct. 2012 à 12:40
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