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 ;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
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!