在 Linux 中将文件中的所有指数数转换为十进制数?

在 Linux 中将文件中的所有指数数转换为十进制数?

我已经检查了以前与此相关的所有帖子,但我找不到我想要做的方式。

我有一个包含一些指数数字的文件,如下所示。我不知道哪些列具有指数数字。

文件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该行。

相关内容