首页 > 解决方案 > awk:负指数未被正确解释

问题描述

我有这张桌子:

a   0
b   0
c   1.6149e-315
d   5.2587e-265
e   8.2045e-227
f   8.2045e-227

如果我输入

$awk '($2<1){print}' my_file.txt

它返回

a   0
b   0
d   5.2587e-265
e   8.2045e-227
f   8.2045e-227

但它认为第三行中的值 1.6149e-315 大于 1:

$awk '($2>1){print}' my_file.txt 
c   1.6149e-315

这种行为的原因是什么?负指数 <1e-300 是否太小,因此会删除“e-”部分?看起来是这样,因为

$awk '($2>1.6149){print}' my_file.txt 
c   1.6149e-315

但如果我跑

$ awk '($2>1.615){print}' my_file.txt

没有任何输出。

我该如何克服这个问题?

标签: shellif-statementunixawkexponential

解决方案


像这样运行你的 awk:

awk '($2+0) < 1' file

这将输出:

a   0
b   0
c   1.6149e-315
d   5.2587e-265
e   8.2045e-227
f   8.2045e-227

$2+0转换$2为数值。

顺便说一句GNU Awk 5.0.1,即使没有这个技巧,我也能得到正确的输出。


推荐阅读