Pages : 1
#1 Le 27/08/2007, à 17:09
- sarga6
Question AWK
Bonjour, dans le cadre d'un cours de programmation j'ai à réaliser un script awk effectuant un tri et des calculs simples.
L'énnoncé; sur base d'une liste (exemple) ; Ville;prénom;nombre
Hannut;Pol;1200
Hannut;Sabine;120
Jodoigne;Rudy;100
Wavre;Caroline;1500
Wavre;Didier;200
Wavre;Thomas;1200
Trier sur le champ ville les lignes ayant ce premier champ identique et additionner les nombre du 3e champ.
Résultat attendu ;
wavre 2900
1 Caroline 1500
2 Didier 200
3 Thomas 1200
Hannut 1320
1 Pol 1200
2 Sabine 120
Jodoigne 100
1 Rudy 100
voilà mon script awk ;
BEGIN {
FS=";";
cpta=0;
cptb=0;
cptc=0;
}
suma=0;
sumb=0;
sumc=0;
$1 == "Wavre" {
grpA[cpta] = $2 " " $3;
for(i=3;i<=NF;i++) { suma += $i; }
sommea[cpta] = suma;
cpta++;
}
$1 == "Hannut" {
grpB[cptb] = $2 " " $3;
for(i=3;i<=NF;i++) { sumb += $i; }
sommeb[cptb] = sumb;
cptb++;
}
$1 == "Jodoigne" {
grpC[cptc] = $2 " " $3;
for(i=3;i<=NF;i++) { sumc += $i; }
sommec[cptc] = sumc;
cptc++;
}
END { tota=0;
totb=0;
totc=0;
print"\n-----------------------"
for(i=0;i<cpta;i++)
{tota += sommea[i]}
print "\nwavre " tota "\t"
for(i=0;i<cpta;i++){print " " i+1 " " grpA[i] "\t" }
for(i=0;i<cptb;i++)
{totb += sommeb[i]}
print "\nHannut " totb "\t"
for(i=0;i<cptb;i++){print " " i+1 " " grpB[i] "\t" }
for(i=0;i<cptc;i++)
{totc += sommec[i]}
print "\nJodoigne " totc "\t"
for(i=0;i<cptc;i++){print " " i+1 " " grpC[i] "\t" }
print "\n------------------------"
}
Pour lancer le tri; awk -f script.awk liste.txt
Bon cela fonctionne.... MAIS l'astuce serait d'obtenir un awk pouvant servir pour d'autre liste de données de type : Ville;prénom;nombre. Et donc de passer outre les $1 == "tel nom de ville" .Je débute dans la progra sous awk et je ne parviens pas à trouver un moyen de déclarer mes champs subissant le tri d'une autre facon.
Un grand merci pour votre aide!
Hors ligne
#2 Le 27/08/2007, à 17:20
- trucutu
Re : Question AWK
J'ai rien dis...
Dernière modification par trucutu (Le 27/08/2007, à 17:22)
La chanson du dimanche - "La pêche !"
PC acheté chez Novatux : entièrement satisfait.
Faire des recherches solidaires !
Hors ligne
Pages : 1