如何将大数转换为科学记数法

如何将大数转换为科学记数法

我正在处理一个文件,其中包含非常大的值的列。

(比如 40 位数字:646512354651316486246729519751795724672467596754627.06843 等等...)

我希望这些数字采用科学计数法,但点后只有 3 或 4 个数字。有没有办法sed对我的文件中出现的每个数字使用或执行此操作?

答案1

您的 shell 可能有一个printf可用于格式化数字的内置函数。

$ type printf
printf is a shell builtin
$ printf "%.3e\n" 646512354651316486246729519751795724672467596754627.06843
6.465e+50
$ printf "%.4e\n" 646512354651316486246729519751795724672467596754627.06843
6.4651e+50
$ _

如果没有,通常也有专用的printf二进制文件。

$ which printf
/usr/bin/printf
$ _

答案2

如果您只想转换特定列,awk有帮助

$ cat ip.txt
foo 64651235465131648624672951975 123
bar 3452356235235235 xyz
baz 234325236452352352345234532 ijkls

$ # change only second column
$ awk '{$2 = sprintf("%.3e", $2)} 1' ip.txt
foo 6.465e+28 123
bar 3.452e+15 xyz
baz 2.343e+26 ijkls

相关内容