How to compare two decimal numbers in bash/awk?

前端 未结 7 2186
傲寒
傲寒 2020-12-08 15:09

I am trying to compare two decimal values but I am getting errors. I used

if [ \"$(echo $result1 \'>\' $result2 | bc -l)\" -eq 1 ];then

7条回答
  •  失恋的感觉
    2020-12-08 15:52

    Following up on Dennis's reply:

    Although his reply is correct for decimal points, bash throws (standard_in) 1: syntax error with floating point arithmetic.

    result1=12
    result2=1.27554e-05
    
    
    if (( $(echo "$result1 > $result2" | bc -l) )); then
        echo "r1 > r2"
    else
        echo "r1 < r2"
    fi
    

    This returns incorrect output with a warning although with an exit code of 0.

    (standard_in) 1: syntax error
    r1 < r2

    While there is no clear solution to this (discussion thread 1 and thread 2), I used following partial fix by rounding off floating point results using awk followed by use of bc command as in Dennis's reply and this thread

    Round off to a desired decimal place: Following will get recursive directory space in TB with rounding off at the second decimal place.

    result2=$(du -s "/home/foo/videos" | tail -n1 | awk '{$1=$1/(1024^3); printf "%.2f", $1;}')
    

    You can then use bash arithmetic as above or using [[ ]] enclosure as in following thread.

    if (( $(echo "$result1 > $result2" | bc -l) )); then
        echo "r1 > r2"
    else
        echo "r1 < r2"
    fi
    

    or using -eq operator where bc output of 1 is true and 0 is false

    if [[ $(bc <<< "$result1 < $result2") -eq 1 ]]; then
        echo "r1 < r2"
    else
        echo "r1 > r2"
    fi
    

提交回复
热议问题