I would like to make a script that will calculate the difference of download time between two curl.
For example with this command :
curl -s -w 'total : %{time_total}n' https://releases.ubuntu.com/20.04.1/ubuntu-20.04.1-desktop-amd64.iso -o ubuntu.iso >> total.txt
My curl command will be run each day and I would like to make a substraction between the value of the day and the value of the previous day. For that, I will save the time_total
value of each day in an external file called total.txt :
total : 77,844315 total : 95,531319 total : 91,270609 total : 79,185359 total : 94,861921
For that, this is my script :
#!/bin/bash Previous_value=$(cat total.txt| awk '{print $3}' | tail -n 2 | head -n 1 ) Current_value=$(cat total.txt | awk '{print $3}' | tail -n 2 | tail -n 1 ) echo "Yesterday download time : "$Previous_value"s" echo "Today download time : "$Current_value"s" test=$(($Current_value-$Previous_value)) echo "Download : + "$test"s"
Output :
Yesterday download time : 79,185359s Today download time : 94,861921s Download : + 185359s
The result should be Download : + 15.676562s
but currently the result is Download : + 185359s
. Someone to tell me why ?
Advertisement
Answer
For more precise math use bc
. Also make sure you are entering valid numbers. bc
only interprets decimals for separating whole and fractional components so you may want to translate those commas to decimals: tr ',' '.'
Instead of:
echo $(( $A - $B ))
Do:
bc -l <<< "$A - $B"
Specifically for your script:
#!/bin/bash Previous_value=$(cat total.txt| awk '{print $3}' | tail -n 2 | head -n 1 | tr ',' '.') Current_value=$(cat total.txt | awk '{print $3}' | tail -n 2 | tail -n 1 | tr ',' '.') echo "Yesterday download time : "${Previous_value}"s" echo "Today download time : "${Current_value}"s" test=$( bc -l <<< "${Current_value} - ${Previous_value}" ) echo "Download : + "$test"s"