0

请帮忙。怎么能做到这一点

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 等一样浮动...
啊,我绝不能使用 bc 命令。

4

4 回答 4

5

概括它:

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

if gt 0.01 0.9; then
    do_something
fi
于 2013-11-22T19:49:15.423 回答
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"
于 2013-11-22T19:46:16.207 回答
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
于 2013-11-22T20:31:19.843 回答
1

从字面上看,以您现有的代码为例,它缺少变量,那么这就足够了:

DO SOMETHING

由于 0.001 永远不会大于 0.9,awk所以应该打印 0,这当然等于 0,所以整个测试在不使用任何变量的情况下有点毫无意义......

于 2013-11-22T19:59:07.013 回答