我正在处理一个文件,其中包含非常大的值的列。
(比如 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