awk浮点比较不工作

我有一个输入文件,里面有x1 , x2和x值,我想检查x是否是x1和x2之间的中点,但比较失败,请问我应该怎么做?

输入文件示例

x1=20.9280 x2=20.9600 x=20.9440
x1=20.9280 x2=20.9600 x=20.9440
x1=22.7840 x2=22.8160 x=22.8000

Awk命令

awk -F'[ =]' '{ if(($2 + $4)/2 != ($6)) print ($2 + $4)/2, " ", $6;}' sample

输出

20.944   20.9440
20.944   20.9440
22.8   22.8000

由于小数点后多了个0,导致比较失败。请帮助解决这个问题。

解决方案:

这是由于所有平台上常见的浮点比较问题造成的。

您可以使用以下方法 awk 通过将数字转换为有4个小数点的浮点数来进行浮点数比较。

awk -F'[ =]+' '{avg = sprintf("%.4f", ($2 + $4) / 2)} avg != $6 { print avg, $6 }' file

如果你有 gnu awk 然后,你可以设置精度为一个较低的数字。

awk -M -v PREC=30 -F'[ =]+' '{avg = ($2 + $4) / 2; $6 += 0} avg != $6 { print avg, $6 }' file

给TA打赏
共{{data.count}}人
人已打赏
未分类

发送带有多个附件的数据,并带有电子邮件的意图。

2022-9-9 0:00:18

未分类

在反应中设置按钮动画

2022-9-9 0:00:20

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索