Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- URL="https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_deaths_global.csv"
- FILENAME=${URL##*/}
- # Oletuspäivä tämä päivä
- DATE=$(date +"%-m/%-d/%-y")
- # Oletuksena aikaformaatti US
- DATEFORMAT=US
- # Oletusmaa
- DEFAULT_COUNTRY=Finland
- # Oletuksena haettavien päivien määrä
- DEFAULT_DAYS=1
- # Apumuuttuja, ettei tiedostoa haeta kahdesti
- FILE_ALREADY_UPDATED=0
- # CSV:n latausfunktio
- download_file () {
- if [ $FILE_ALREADY_UPDATED -eq 0 ]; then
- wget -q "$URL"
- FILE_ALREADY_UPDATED=1
- fi
- }
- # Päivämäärän konversio FI -> US
- convert_date () {
- IFS='.'
- read -ra arr <<< "$1"
- string=${arr[1]}/${arr[0]}/${arr[2]:2}
- date -d $string &>/dev/null
- if [ $? -eq 0 ]; then
- DATE=$string
- DATEFORMAT=FI
- fi
- }
- # Jos annettu argumenttina päivämäärä
- if [[ $# -gt 2 ]]; then
- date -d $3 &>/dev/null
- if [ $? -eq 0 ]; then
- DATE=$3
- else
- convert_date $3
- fi
- fi
- # Tarkastetaan onko CSV-tiedosto olemassa
- if [ ! -f "$FILENAME" ]; then
- download_file
- fi
- # Tiedoston luontipäivä
- FILEDATE=$(date -r "$FILENAME" +"%-m/%-d/%y")
- # Hakupäivän arvo sekunteina
- DATE_SECONDS=$(date -d $DATE +%s)
- # Tiedoston luontipäivän arvo sekunteina
- FILEDATE_SECONDS=$(date -d $FILEDATE +%s)
- # Jos tiedosto on vanhempi kuin haettava, niin ladataan uudelleen
- if [[ $DATE_SECONDS -gt $FILEDATE_SECONDS ]]; then
- rm "$FILENAME"
- download_file
- fi
- IFS=','
- # Ensimmäinen rivi, jossa päivämäärät
- row=$(cat "$FILENAME" | head -1)
- read -ra daterow <<< $row
- # Oletuksena haettava maa
- country=$DEFAULT_COUNTRY
- # Jos annettu maa argumenttina, niin etsitään sitä
- if [ $# -gt 0 ]; then
- country=$1
- fi
- row=$(cat "$FILENAME" | grep --color=none ${country})
- read -ra countryrow <<< $row
- if [ ${#daterow[@]} -ne ${#countryrow[@]} ]; then
- # Maata ei löytynyt, tai indeksit eivät muuten mätsää
- exit 0
- fi
- # Lasketaan montako päivää vanhempia haetaan
- days=$(($DEFAULT_DAYS-1))
- if [ $# -gt 1 ]; then
- diff=$(($2 - 1))
- if [ $diff -gt -1 ]; then
- days=$diff
- fi
- fi
- IFS=' '
- from=$(date --date="${DATE} -${days} day" +"%-m/%-d/%-y")
- last=$((${#daterow[@]} - 1))
- first=-1
- # Etsitään ensimmäisen ja viimeisen päivän indeksit
- for i in "${!daterow[@]}"; do
- if [[ "${daterow[$i]}" = "${from}" ]]; then
- first=$i
- last=$(($first + $days))
- if [ $last -gt $((${#daterow[@]} - 1)) ]; then
- last=$((${#daterow[@]} - 1))
- fi
- break
- fi
- done
- if [ $first -eq -1 ]; then
- echo "Ei hakuehdot täyttäviä tuloksia (päivä: $DATE, päiviä: $(($days+1)))"
- exit 0
- fi
- # Tulostetaan silmukassa indekseiden arvot
- for ((i=$first; i<=$last; i++)); do
- datevalue=${daterow[$i]}
- if [ $DATEFORMAT = FI ]; then
- datevalue=$(date -d $datevalue +"%-d.%-m.%Y")
- fi
- echo $datevalue ${countryrow[$i]}
- done
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement