请帮忙。怎么能做到这一点
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 命令。
请帮忙。怎么能做到这一点
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 命令。
概括它:
function gt {
awk -v n1=$1 -v n2=$2 'BEGIN {exit !(n1 > n2)}'
}
if gt 0.01 0.9; then
do_something
fi
这应该有效:
[[ $(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"
$ 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
从字面上看,以您现有的代码为例,它缺少变量,那么这就足够了:
DO SOMETHING
由于 0.001 永远不会大于 0.9,awk
所以应该打印 0,这当然等于 0,所以整个测试在不使用任何变量的情况下有点毫无意义......