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

Buienradar
Zal het regenen of blijft het droog op de plaats waar je woont? Je kan het raadplegen op de 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-bestand2 rain.csv3. 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-tijd4)

  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
…

Gevraagd wordt om een bash shell script stats te schrijven 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.csv7 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.csv8
CITY: Brussel
COUNT: 364
MIN: 2
MAX: 997
$ stats Brussel < rain.csv9 CITY: Brussel
COUNT: 364
MIN: 2
MAX: 997
$ stats -s 1553209200 Brussel rain.csv10 CITY: Brussel
COUNT:284
MIN: 2
MAX: 997
$ stats -s 1553209200 -e 1562968800 Brussel rain.csv11 CITY: Brussel
COUNT: 114
MIN: 27
MAX: 997
$ stats -e 1562968800 Brussel rain.csv12 CITY: Brussel
COUNT: 194
MIN: 6
MAX: 997
$ stats -s "2019-01-09" Brussel rain.csv13 stats: ongeldige periode $ echo $? 3 $ stats -e "2019-01-09" Brussel rain.csv14 stats: ongeldige periode $ echo $? 3 $ stats -s 1562968800 -e 1553209200 Brussel rain.csv15 stats: ongeldige periode $ echo $? 3 $ stats -s 1646297200 Brussel rain.csv16 stats: geen data voor de opgegeven periode $ echo $? 4