
この例はうまくいきます:
awk -v num1=5999 -v num2=5999 'BEGIN{ print (num2==num1) ? "equal" : "not equal" }'
equal
この例はうまくいきません。
awk -v num1=59558711052462309110012 -v num2=59558711052462309110011 'BEGIN{ print (num2==num1) ? "equal" : "not equal" }'
equal
2番目の例では、比較される数値が異なります。なぜ「等しくない」が印刷されないのですか?
答え1
awk 数値の精度限界に達しました。
比較を文字列比較として強制できます。
awk -v num1=59558711052462309110012 -v num2=59558711052462309110011 '
BEGIN{ print (num2""==num1) ? "equal" : "not equal" }'
(ここで空の文字列に関連付けると、数値ではなく文字列として扱われます。)
数値比較を実行するには、bc
などの任意の精度の数値を処理できるツールを使用する必要がありますpython
。