awk 读取浮点数精度:无法读取小浮点数,例如4e-320

awk read float precision: cannot read small floats, e.g. 4e-320

我无法 awkgawk 读取科学计数法中的小浮点数并将它们正确解释为浮点数。

我只想用 awk 输出高于小阈值的数字。

示例

考虑以下输入:

4
3e-20
4.5e-320
3
1e-10

我想以 1e-15 为阈值,所以我执行以下操作:

echo -e "4\n3e-20\n4.5e-320\n3\n1e-10"  |  awk ' > 1e-15'

给出输出:

4
4.5e-320
3
1e-10

当然4.5e-320没有通过1e-15的门槛,但是awkgawk拒绝不了!

我查了 (g)awk 浮点精度。它似乎将 only 应用于算术运算 within awk.

因此,将 awk ' > 1e-15' 替换为 gawk -v PREC="double" ' > 1e-15' 也会失败。它也因 PREC="quad"

而失败

因此,我得出结论 (g)awk 不是 reading 4.5e-320 作为浮点数,而是字符串?

我从 awk 版本 3.1.5 得到了预期的输出。

我从 awk 版本 3.1.7 得到你的输出。

您可以强制 awk 将字符串转换为数字,方法是向其添加零。

所以试试这个 awk 脚本:

printf '4\n3e-20\n4.5e-320\n3\n1e-10\n' | awk '+0 > 1e-15'