我已经检查了以前与此相关的所有帖子,但我找不到我想要做的方式。
我有一个包含一些指数数字的文件,如下所示。我不知道哪些列具有指数数字。
文件1.txt
1 499 5e-29 0.33 1.35 46.65
5 999 0.4444 3e-6 0.556 89.444
many more lines
我想将所有指数数转换为十进制数。
如果我只想转换一个数字,我可以这样做。
echo 12.34567E-3 | awk '{printf "%5.10f\n", $1}'
但这样的话,有人知道该怎么做吗?
先感谢您!
答案1
您可以循环每行的所有字段。测试该字段是否为数值 ( $i+0==$i
) 以及 ( &&
) 是否包含该字符e
似乎不错。所以我们只将这些字段修改为小数。
这里使用 GNU awksprintf
函数:
awk '{
for (i=1;i<=NF;i++) if ($i+0 == $i && $i ~ /e/) $i = sprintf("%.10f", $i)
} 1' file
- 您可以使用任何格式而不是
.10f
进入那里。 1
末尾表示默认操作,即到print
该行。