Linux

將Linux中文件中的所有指數數轉換為十進制數?

  • November 24, 2020

我已經檢查了與此相關的所有以前的文章,但我找不到我想做的方式。

我有一個包含一些指數數字的文件,如下所示。我不知道哪些列有指數數。

文件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

我想將所有指數數轉換為十進制數。

如果我只想轉換一個數字,我可以執行以下操作。

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

但是這樣,有沒有人知道怎麼做?

先感謝您!

您可以循環訪問每行的所有欄位。測試欄位是否為數值 ( $i+0==$i) 和 ( &&) 是否包含字元e似乎很好。所以我們只修改這些欄位為小數。

這裡使用 GNU awksprintf函式:

awk '{
   for (i=1;i<=NF;i++) if ($i+0 == $i && $i ~ /e/) $i = sprintf("%.10f", $i)
} 1' file
  • 您可以使用任何格式而不是.10f進入那裡。
  • 1最後表示預設操作,到print該行。

引用自:https://unix.stackexchange.com/questions/621256