如何使用vim将指数值转换为十进制值

时间:2015-10-18 14:06:49

标签: vim

我有一个带有两列的文本文件,其数字如下:

 0.00000000E+00   0.66244638E+00
 0.10000000E+01   0.66630906E+00
 0.20000000E+01   0.66920608E+00
 0.30000000E+01   0.67210299E+00

...

 0.59600000E+03   0.66341203E+02
 0.59700000E+03   0.66824037E+02
 0.59800000E+03   0.67403436E+02
 0.59900000E+03   0.67886269E+02
 0.60000000E+03   0.68369102E+02

如何使用 vim

将值转换为小数值

结果:

 0.0   0.66244638
 1.0   0.66630906

...

 599.0   67.886269
 600.0   68.369102

谢谢

1 个答案:

答案 0 :(得分:2)

一种方法,来自Vim:

:%s/\v(\d+\.\d+E[+-]\d+)\s+(\d+\.\d+E[+-]\d+)/\=printf("%.1f\t%.8f", str2float(submatch(1)), str2float(submatch(2)))/

这需要使用+float编译的Vim版本。

在Vim之外的理智/聪明/简单/快捷的方式:

awk '{ printf("%.1f\t%.8f\n", $1, $2) }' file.txt