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 :
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à.
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
Par exemple:La solution donnée est celle ci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part total_liste_pays 2010 data.csv wholeFrance
Ce que j'aimerais comprendre c'est, étant donné qu'il y a trois arguments, où le read va t il chercher pays?
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; }
Partager