Online vind je tal van websites waar je (regionale) informatie over het weer kunt raadplegen. Vaak combineren die historische data met voorspellingen voor de nabije toekomst. Zo brengt Buienradar met behulp van radar- en sattelietgegevens de actuele neerslag boven Europa in beeld.

buienradar

Opgave

We hebben de Buienradar API aangesproken om historische data te downloaden over de hoeveelheid neerslag in verschillende Europese steden. Die informatie zit opgeslagen in het CSV-bestand rain.csv. Elke regel van dat bestand beschrijft één meting van de neerslag op een bepaald tijdstip in een bepaalde stad. Die beschrijving bestaat uit de volgende drie informatievelden die van elkaar gescheiden worden door komma's:

  1. stad waar meting gebeurd is

  2. tijdstip waarop meting gebeurd is (in Unix-tijd)

  3. gemeten hoeveelheid neerslag (in millimeter)

De eerste regels van het bestand zien er bijvoorbeeld als volgt uit:

Amsterdam,1546297200,230
Amsterdam,1546383600,319
Amsterdam,1546470000,245
Amsterdam,1546556400,424
Amsterdam,1546642800,716
Amsterdam,1546729200,783
Amsterdam,1546815600,43
Amsterdam,1546902000,115
Amsterdam,1546988400,260
Amsterdam,1547074800,464
…

Schrijf een bash shell script stats waarmee een overzicht kan gegenereerd worden met basisstatistieken over de neerslag voor een bepaalde stad over een bepaalde periode. De naam van de stad moet als argument aan het shell script doorgegeven worden. Daarnaast kan als tweede argument ook nog de padnaam doorgegeven worden van het CSV-bestand met historische data over de neerslag. Als er geen tweede argument wordt doorgegeven, dan moet het shell script de historische data inlezen via stdin.

Het shell script moet naar stdout een overzicht uitschrijven met de volgende informatie:

  1. stad waar metingen gebeurd zijn (CITY)

  2. aantal metingen binnen de gegeven periode waarop de statistieken gebaseerd zijn (COUNT)

  3. kleinste gemeten hoeveelheid neerslag (in millimeter) binnen de gegeven periode (MIN)

  4. grootste gemeten hoeveelheid neerslag (in millimeter) binnen de gegeven periode (MAX)

Het exacte formaat van het overzicht kan afgeleid worden uit onderstaande voorbeeldsessie.

Om de periode vast te leggen waarover de statistieken moeten berekend worden, moet het shell script de volgende twee opties met verplicht argument ondersteunen:

Het shell script moet volgende foutafhandeling voorzien:

Als er zich geen fouten voordoen, dan moet het shell script eindigen met exit status 0.

Voorbeeld

Onderstaande voorbeeldsessie geeft aan hoe het shell script stats moet kunnen gebruikt worden. Hierbij gaan we ervan uit dat het tekstbestand rain.csv zich in de huidige directory bevindt.

$ stats
Syntaxis: stats [-s START] [-e EIND] STAD [FILE]
$ echo $?
1
$ stats -abc Brussel
Syntaxis: stats [-s START] [-e EIND] STAD [FILE]
$ echo $?
1
$ stats Brussel xxx
stats: het opgegeven bestand bestaat niet of is niet leesbaar
$ echo $?
2
$ stats Brussel rain.csv
CITY: Brussel
COUNT: 364
MIN: 2
MAX: 997
$ stats Brussel < rain.csv CITY: Brussel
COUNT: 364
MIN: 2
MAX: 997
$ stats -s 1553209200 Brussel rain.csv CITY: Brussel
COUNT:284
MIN: 2
MAX: 997
$ stats -s 1553209200 -e 1562968800 Brussel rain.csv CITY: Brussel
COUNT: 114
MIN: 27
MAX: 997
$ stats -e 1562968800 Brussel rain.csv CITY: Brussel
COUNT: 194
MIN: 6
MAX: 997
$ stats -s "2019-01-09" Brussel rain.csv stats: ongeldige periode $ echo $? 3 $ stats -e "2019-01-09" Brussel rain.csv stats: ongeldige periode $ echo $? 3 $ stats -s 1562968800 -e 1553209200 Brussel rain.csv stats: ongeldige periode $ echo $? 3 $ stats -s 1646297200 Brussel rain.csv stats: geen data voor de opgegeven periode $ echo $? 4