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

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 に答える