Joh*_*ohn 2 awk floating-point
我有空格分隔的文件。该文件包含指数格式的文本和数字。我想将指数数转换为实际的十进制值。有人可以建议我如何实现这一目标吗?
使用 GNU awk
:
gawk -v RS='[-+]?[0-9.]+[eE][-+]?[0-9]+' \
-v ORS= \
-v CONVFMT=%.1000g '{print $0 (RT == "" ? "" : +RT)}'
Run Code Online (Sandbox Code Playgroud)
gawk
将记录分隔符匹配的内容存储到RT
变量中,我们将其转换为没有指数的浮点数CONVFMT
。
对于更高的精度,例如1e123
要变成1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
而不是999999999999999977709969731404129670057984297594921577392083322662491290889839886077866558841507631684757522070951350501376
,用 gawk 4.1 或更高版本添加-M -v PREC=1000
(1000 是位数)