Salut à tous, j'aimerais poser une question a propos de la commande read. Je sais déjà comment elle fonctionne mais je suis face à un exercice et je ne comprends pas vraiment comment cette commande a été utilisée dans ce cas précis.
Dans cet exercice, on dispose d'un fichier .csv qui contient une liste de pays et leur population entre 1980 et 2010, chaque champ est séparé par un point virgule et un retour à la ligne sépare chaque pays. Voici par exemple comment est représentée l'Argentine :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
Argentina;28369800;28848060;29329880;29793550;30230640;30671760;31144990;31624620;32099320;32571620;33035580;33504410;33966850;34407150;34846890;35273840;35682960;36102160;36517920;36923420;37335650;37694170;37999450;38336880;38741830;39181260;39614430;40048820;40482000;40913580;41343200

Pour les pays contenant plusieurs territoires comme la France avec la Guadeloupe, la Polynésie etc.. on dispose d'un fichier contenant tous les territoires. Par exemple pour la France on a un fichier wholeFrance qui contient ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
 
France
French Guiana
French Polynesia
Guadeloupe
Martinique
New Caledonia
Papua New Guinea
Reunion
Saint Pierre and Miquelon
La but est ici d'écrire un script total_liste_pays qui prend en paramètre une année, le fichier csv contenant les informations pour tous les pays et un fichier contenant les différents territoires formant un pays et qui retourne le nombre d'habitants total pour ce pays à cette année là.
Par exemple:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
total_liste_pays 2010 data.csv wholeFrance
La solution donnée est celle ci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
#!/bin/bash
 
while read pays; do
    grep "^$pays;" $2 | cut -d';' -f$(($1-1978))
done | grep -v -e '--' | { s=0; while read nb; do s=$((s+nb)); done; echo $s; }
Ce que j'aimerais comprendre c'est, étant donné qu'il y a trois arguments, où le read va t il chercher pays?