ファイルのすべての指数をLinuxから10進数に変換しますか?

ファイルのすべての指数をLinuxから10進数に変換しますか?

これに関連する以前の投稿をすべて確認しましたが、目的の方法が見つかりませんでした。

以下のように指数を含むファイルがあります。どの列に指数があるかわかりません。

ファイル1.txt

1 499 5e-29 0.33 1.35 46.65
5 999 0.4444 3e-6 0.556 89.444
many more lines

すべての指数を10進数に変換したいです。

数値を変換したい場合は、これを行うことができます。

echo 12.34567E-3 | awk '{printf "%5.10f\n", $1}'

ところで、このような場合にはどうするのかご存知の方ですか?

よろしくお願いします!

答え1

各行のすべてのフィールドを繰り返すことができます。フィールドが数字($i+0==$i)であるか、&&()に文字が含まれているかをテストしてみるとよいでしょうe。したがって、このフィールドを10進数に変更します。

GNU awk関数はここで使用されますsprintf

awk '{
    for (i=1;i<=NF;i++) if ($i+0 == $i && $i ~ /e/) $i = sprintf("%.10f", $i)
} 1' file
  • 何でも使えます滞在.10fそこに入る代わりに。
  • 1最後は、その行に移動する基本操作を表しますprint

関連情報