大きな数字を科学的表記法に変換する方法

大きな数字を科学的表記法に変換する方法

私は非常に大きな値を持つ列を含むファイルを扱っています。

(例:40桁:646512354651316486246729519751795724672467596754627.06843 など...)

数字を科学的表記法で表示したいのですが、ドットの後には3~4桁の数字だけが必要です。sed自分のファイルに表示されるすべての番号に対してこれを使用または実行する方法はありますか?

答え1

シェルには、おそらく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

関連情報