这个例子工作正常:
awk -v num1=5999 -v num2=5999 'BEGIN{ print (num2==num1) ? "equal" : "not equal" }'
equal
Run Code Online (Sandbox Code Playgroud)
这个例子不能很好地工作:
awk -v num1=59558711052462309110012 -v num2=59558711052462309110011 'BEGIN{ print (num2==num1) ? "equal" : "not equal" }'
equal
Run Code Online (Sandbox Code Playgroud)
在第二个例子中,比较的数字是不同的。为什么不打印“不等于”?
Sté*_*las 12
您已达到 awk 数字精度的限制。
您可以强制比较为字符串比较:
awk -v num1=59558711052462309110012 -v num2=59558711052462309110011 '
BEGIN{ print (num2""==num1) ? "equal" : "not equal" }'
Run Code Online (Sandbox Code Playgroud)
(此处与空字符串的连接强制将它们视为字符串而不是数字)。
如果要进行数值比较,则必须使用可以处理任意精度数字的工具,例如bc
或python
。