Advertisement
Guest User

Untitled

a guest
Oct 9th, 2021
52
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 2.89 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. URL="https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_deaths_global.csv"
  4. FILENAME=${URL##*/}
  5.  
  6. # Oletuspäivä tämä päivä
  7. DATE=$(date +"%-m/%-d/%-y")
  8. # Oletuksena aikaformaatti US
  9. DATEFORMAT=US
  10. # Oletusmaa
  11. DEFAULT_COUNTRY=Finland
  12. # Oletuksena haettavien päivien määrä
  13. DEFAULT_DAYS=1
  14.  
  15. # Apumuuttuja, ettei tiedostoa haeta kahdesti
  16. FILE_ALREADY_UPDATED=0
  17.  
  18. # CSV:n latausfunktio
  19. download_file () {
  20.   if [ $FILE_ALREADY_UPDATED -eq 0 ]; then
  21.     wget -q "$URL"
  22.     FILE_ALREADY_UPDATED=1
  23.   fi
  24. }
  25.  
  26. # Päivämäärän konversio FI -> US
  27. convert_date () {
  28.   IFS='.'
  29.   read -ra arr <<< "$1"
  30.   string=${arr[1]}/${arr[0]}/${arr[2]:2}
  31.   date -d $string &>/dev/null
  32.   if [ $? -eq 0 ]; then
  33.     DATE=$string
  34.     DATEFORMAT=FI
  35.   fi
  36. }
  37.  
  38. # Jos annettu argumenttina päivämäärä
  39. if [[ $# -gt 2 ]]; then
  40.   date -d $3 &>/dev/null
  41.   if [ $? -eq 0 ]; then
  42.     DATE=$3
  43.   else
  44.     convert_date $3
  45.   fi
  46. fi
  47.  
  48. # Tarkastetaan onko CSV-tiedosto olemassa
  49. if [ ! -f "$FILENAME" ]; then
  50.   download_file
  51. fi
  52.  
  53. # Tiedoston luontipäivä
  54. FILEDATE=$(date -r "$FILENAME" +"%-m/%-d/%y")
  55. # Hakupäivän arvo sekunteina
  56. DATE_SECONDS=$(date -d $DATE +%s)
  57. # Tiedoston luontipäivän arvo sekunteina
  58. FILEDATE_SECONDS=$(date -d $FILEDATE +%s)
  59.  
  60. # Jos tiedosto on vanhempi kuin haettava, niin ladataan uudelleen
  61. if [[ $DATE_SECONDS -gt $FILEDATE_SECONDS ]]; then
  62.   rm "$FILENAME"
  63.   download_file
  64. fi
  65.  
  66. IFS=','
  67. # Ensimmäinen rivi, jossa päivämäärät
  68. row=$(cat "$FILENAME" | head -1)
  69. read -ra daterow <<< $row
  70. # Oletuksena haettava maa
  71. country=$DEFAULT_COUNTRY
  72. # Jos annettu maa argumenttina, niin etsitään sitä
  73. if [ $# -gt 0 ]; then
  74.   country=$1
  75. fi
  76. row=$(cat "$FILENAME" | grep --color=none ${country})
  77. read -ra countryrow <<< $row
  78.  
  79. if [ ${#daterow[@]} -ne ${#countryrow[@]} ]; then
  80.   # Maata ei löytynyt, tai indeksit eivät muuten mätsää
  81.   exit 0
  82. fi
  83.  
  84. # Lasketaan montako päivää vanhempia haetaan
  85. days=$(($DEFAULT_DAYS-1))
  86. if [ $# -gt 1 ]; then
  87.   diff=$(($2 - 1))
  88.   if [ $diff -gt -1 ]; then
  89.     days=$diff
  90.   fi
  91. fi
  92.  
  93. IFS=' '
  94. from=$(date --date="${DATE} -${days} day" +"%-m/%-d/%-y")
  95. last=$((${#daterow[@]} - 1))
  96. first=-1
  97.  
  98. # Etsitään ensimmäisen ja viimeisen päivän indeksit
  99. for i in "${!daterow[@]}"; do
  100.   if [[ "${daterow[$i]}" = "${from}" ]]; then
  101.     first=$i
  102.     last=$(($first + $days))
  103.     if [ $last -gt $((${#daterow[@]} - 1)) ]; then
  104.       last=$((${#daterow[@]} - 1))
  105.     fi
  106.     break
  107.   fi
  108. done
  109.  
  110. if [ $first -eq -1 ]; then
  111.   echo "Ei hakuehdot täyttäviä tuloksia (päivä: $DATE, päiviä: $(($days+1)))"
  112.   exit 0
  113. fi
  114.  
  115. # Tulostetaan silmukassa indekseiden arvot
  116. for ((i=$first; i<=$last; i++)); do
  117.   datevalue=${daterow[$i]}
  118.   if [ $DATEFORMAT = FI ]; then
  119.     datevalue=$(date -d $datevalue +"%-d.%-m.%Y")
  120.   fi
  121.   echo $datevalue ${countryrow[$i]}
  122. done
  123.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement