OVH Cloud OVH Cloud

Awk, tableaux associatifs à double entrée

2 réponses
Avatar
Jean-Philippe Caruana
bonjour, une question AWK
(est-ce bien le bon forum ?)

je suis sous gawk version windows (je ne peux pas utiliser une version +
unix, même pas cygwin)

je désire me servir de tableaux associatifs à double entrée dans des
boucles for

mon but est d'avoir une structure de données dynamique en fonction de ce
que je donne dans ma variable 'types' du BEGIN

le problème est que la boucle for du END passe plusieurs fois sur des
mêmes valeurs de la var mytype, mais une seule fois par couple clef/valeur

comment faire pour ne passer qu'une fois par clef ?
mon split n'est pas suffisant ? faut-iol 'spliter' avant (mais comment) ?

(je ne désire pas faire cela en perl)

------------ DEBUT EXTRAITS SCRIPT ---------------
BEGIN { types = "PlatineRG|PlatineRPV|Trafic|Vatel" }

$1 ~ types {
type = $1
#gsub("\n","",type)
aig[type,"entree"] += $3
aig[type,"rejets"] += $5
aig[type,"sortie"] += $6
}

END {
for (mytype in aig){
split(mytype,aig2,SUBSEP)
type = aig2[1]
aig[type,"ecarts"] = aig[type,"entree"] - aig[type,"sortie"] -
aig[type,"rejets"]
aigSomme["entree"] += aig[type,"entree"]
aigSomme["sortie"] += aig[type,"sortie"]
aigSomme["rejets"] += aig[type,"rejets"]
aigSomme["ecarts"] += aig[type,"ecarts"]
print type "\t" aig2[2]
}

# une série de print formattés correctement
# et utilisant une boucle for identique
}
--------------- FIN EXTRAITS SCRIPT ---------------

je ne trouve aucune réponse à ce problème dans "sed et awk -
programmation avancée" chez o'reilly : ce (très bon) livre traite des
tableaux associatifs, des tableaux à double entrée (mais à indices
numériques), mais pas de mon cas : les tableaux associatifs à double entrée

si quelqu'un peut m'éclairer...

--
jpc
http://www.enstimac.fr/~caruana/

2 réponses

Avatar
Stephane Chazelas
2004-09-15, 15:14(+02), Jean-Philippe Caruana:
[..]
$1 ~ types {
type = $1
#gsub("n","",type)
aig[type,"entree"] += $3
aig[type,"rejets"] += $5
aig[type,"sortie"] += $6


rajoute un autre tableau:

types_rencontres[type] = ""

}

END {
for (mytype in aig){


for (mytype in types_rencontres)

split(mytype,aig2,SUBSEP)
type = aig2[1]
aig[type,"ecarts"] = aig[type,"entree"] - aig[type,"sortie"] -
aig[type,"rejets"]
aigSomme["entree"] += aig[type,"entree"]
aigSomme["sortie"] += aig[type,"sortie"]
aigSomme["rejets"] += aig[type,"rejets"]
aigSomme["ecarts"] += aig[type,"ecarts"]
print type "t" aig2[2]
[...]


--
Stephane

Avatar
Jean-Philippe Caruana
rajoute un autre tableau:

types_rencontres[type] = ""
...

for (mytype in types_rencontres)


excellente idée ca a bien l'air de fonctionner. merci !
(et simple avec cela... je m'en veux de ne pas y avoir pensé + tot.)

--
jpc
http://www.enstimac.fr/~caruana/