如何在awk中比较两个数字?

now*_*wy1 5 awk numeric-data

这个例子工作正常:

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)

(此处与空字符串的连接强制将它们视为字符串而不是数字)。

如果要进行数值比较,则必须使用可以处理任意精度数字的工具,例如bcpython