2013-11-22 26 views
0

請幫忙。如何做到這一點BASH without bc :: if [echo`awk'BEGIN {print 0.001> 0.9}'`-eq 0];然後做東西; fi

if [ echo `awk 'BEGIN{print 0.001>0.9}'` -eq 0 ]; then DO SOMETHING; fi 

但這是錯誤的。
我想要做的是:如果第一個數字(0.001),如果大於0.9,那麼做東西。否則什麼都不做
這些數字總是像0.001,0.03,0.89等float ...
啊,我不能使用bc命令。

+0

是什麼第一個數字的來源?顯然,0.001從不大於0.9,所以你必須有一些變量你打算比較0.9。 – chepner

回答

2

這應該工作:

[[ $(awk 'BEGIN{print (0.001>0.9)}') -eq 0 ]] && DO SOMETHING 

或者,如果你想將變量傳遞給AWK:

[[ $(awk -v a='0.001' -v b='0.9' 'BEGIN{print (a>b)}') -eq 0 ]] && echo "a is smaller" 
5

要概括它:

function gt { 
    awk -v n1=$1 -v n2=$2 'BEGIN {exit !(n1 > n2)}' 
} 

if gt 0.01 0.9; then 
    do_something 
fi 
1

以你現有的代碼,它的字面上沒有變量,那麼這應該就足夠了:

DO SOMETHING 

由於0.001是永遠大於0.9,awk應打印0,這當然是等於0,所以整個測試是不使用任何變量,無關緊要......

1
$ cat ./tst.sh 
function cmp { 
    awk -v v1="$1" -v v2="$2" 'BEGIN{ 
     if  (v1 > v2) { diff = 1 } 
     else if (v1 < v2) { diff = -1 } 
     else    { diff = 0 } 
     print diff 
    }' 
} 

if [ $(cmp "$1" "$2") -eq 1 ]; then rslt="is greater than"; fi 
if [ $(cmp "$1" "$2") -eq -1 ]; then rslt="is less than"; fi 
if [ $(cmp "$1" "$2") -eq 0 ]; then rslt="is equal to";  fi 

printf "%s %s %s\n" "$1" "$rslt" "$2" 

$ ./tst.sh 0.001 0.9 
0.001 is less than 0.9 

$ ./tst.sh 0.9 0.001  
0.9 is greater than 0.001 

$ ./tst.sh 0.9 0.9000 
0.9 is equal to 0.9000