这个例子运行良好:
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
在第二个示例中,比较的数字不同。为什么不打印“不等于”?
答案1
您已达到 awk 数字的精度极限。
您可以强制比较为字符串比较:
awk -v num1=59558711052462309110012 -v num2=59558711052462309110011 '
BEGIN{ print (num2""==num1) ? "equal" : "not equal" }'
(这里与空字符串的连接强制将它们视为字符串而不是数字)。
如果您想进行数值比较,则必须使用可以处理任意精度数字的工具,例如bc
或python
。