Bash
刪除科學計數法 bash 腳本
當我將 MB 轉換為 GB 時,我得到低於輸出。我想要正常格式的輸出。當我使用
bc
我得到一個錯誤。文本文件包含近 100 行這樣的行。我想在正常輸出中列印它,(不帶符號):
1.14441e-07 4.95911e-07 3.05176e-07 1.90735e-07 3.05176e-07
命令:
$ DIVISOR=104857600 $ sudo du --max-depth=1 /home/xxx | tail -1 | \ awk -v DIVISOR=104857600 '{print $1/DIVISOR}' 1.14441e-07
awk
有一個 sprintf 函式,它使您可以訪問 printf “f” 格式說明符。echo .123456 | awk '{ print sprintf("%.9f", $1); }'
生產
0.123456000
要控制輸出的格式,您可以
printf
直接從shell 使用awk
或直接通過 shell 使用。但是,您也可以使用直接控制輸出
du
。例如,您可以指定-h
以人類可讀的格式輸出結果。例子
$ du -h --max-depth=1 /home/saml/apps | tail -1 9.0G /home/saml/apps $ du -h --max-depth=1 /home/saml/apps/gCAD3D | tail -1 1.1M /home/saml/apps/gCAD3D
使用 printf 格式化
但是正如您所注意到的,您使用這種方法會失去解析度。因此,如果您真的想保持更高的解析度,則必須從
du
較低級別獲取值,然後格式化輸出以適應您想要的更高級別的單位。例子
在 MB 的使用中
du
。$ du -m --apparent-size --max-depth=1 /home/saml/apps | tail -1 8916 /home/saml/apps
使用
awk
+printf
。$ DIVISOR=10487600 $ du --apparent-size --max-depth=1 /home/saml/apps | \ tail -1 | awk -v D=$DIVISOR '{printf "%.9f\n", $1/D}' 0.870499638
您可以通過將參數更改為 來控制所需的精度
printf
。這裡有5個地方。$ DIVISOR=10487600 $ du --apparent-size --max-depth=1 /home/saml/apps | \ tail -1 | awk -v D=$DIVISOR '{printf "%.5f\n", $1/D}' 0.87050
請注意,在您決定切斷精度的任何地方都要注意正確地舍入它。