これに関連する以前の投稿をすべて確認しましたが、目的の方法が見つかりませんでした。
以下のように指数を含むファイルがあります。どの列に指数があるかわかりません。
ファイル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
。