shell - 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
没有任何输出。
我该如何克服这个问题?
解决方案
像这样运行你的 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
,即使没有这个技巧,我也能得到正确的输出。
推荐阅读
- javascript - 没有服务器的 Sapper 导出失败
- apache-kafka - 将两个不同的连接器部署到 Kafka Connect
- c# - 如果它是真的,我如何通过按钮激活一个方法并在更新方法中调用它?
- node.js - 递归承诺,用于 AMQPLIB 重新连接方法
- java - 从一堆地图中创建特定值列表的有效方法
- python - 如何构建简单的神经网络来判断来自不同空间的两个嵌入是否属于同一类
- pouchdb - 如何序列化 pouchdb 更改处理?
- html - 为什么滚动条会消失?
- html - 如何获取背景以显示完整图像
- html - 如何在 HTML 中将文本添加到图像填充?