バイトを通常の10進形式のGB、MB、KBに変換する必要があります。

バイトを通常の10進形式のGB、MB、KBに変換する必要があります。

バイトをその値に変換するために、以下に提供されるコードがあります。

for OUTPUT in $(find $IP_DIR -maxdepth 1 | awk 'NR>1')
do
    case $RETURNSIZE in
        "gb") FS=`du -b $OUTPUT | awk {'print $1'}`
              FS=`echo $FS | awk '{ byte =$1 /1024/1024**2 ; print byte " GB" }'`
              echo $OUTPUT "|" $FS;;
        "mb") FS=`du -b $OUTPUT | awk {'print $1'}`
              FS=`echo $FS | awk '{ byte =$1 /1024/1024 ; print byte " MB" }'`
              echo $OUTPUT "|" $FS;;
        "kb") FS=`du -b $OUTPUT | awk {'print $1'}`
              FS=`echo $FS | awk '{ byte =$1 /1024 ; print byte " KB" }'`
              echo $OUTPUT "|" $FS;;
        "b")  FS=`du -b $OUTPUT | awk {'print $1'}`
              echo $OUTPUT "|" $FS "B";;
    esac
    

OUTPUT

/home/work/exten.sh | 3.53903e-07 GB
/home/work/e.txt | 0 GB
/home/work/t.txt | 0 GB
/home/worktest | 9.53674e-07 GB
/home/work/s.txt | 3.23169e-07 GB

ロジックは完璧に見えますが、状況に達するとgb (RETURNSIZE)結果は指数形式です。

しかし、私は通常の10進形式で結果を探しています。

答え1

これはLinuxなので、誰もこのnumfmtコマンドに言及していないことに驚きました。

numfmt - 数値を人間が読める文字列に変換

>>numfmt --to iec --format "%8.4f" 599511627776
558.3388G

答え2

私はテストしていませんが、bc mathlibローディングの使用に関連していると思いますbc -l

awkGBの計算部分を次のように変更してみてください。

awk '{ byte =$1 /1024/1024/1024; print byte " GB" }'

注:メディア1024/1024**2と同じです。1024/1024/1024awk

答え3

> printf "1GiB\\nMB" | units
Currency exchange rates from finance.yahoo.com on 2017-10-31 
3047 units, 109 prefixes, 109 nonlinear units

You have: You want:     * 1073.7418
        / 0.00093132257
You have:

または

> echo $((1024*1024*1024))
1073741824
>   

また見なさい:人7台

ファタイ

答え4

このために小さなcliを作成しました。

https://github.com/gonejack/hsize

> hsize 123 45678
123 => 123B
45678 => 44.61KB
> echo 19129219219129119 | hsize
19129219219129119 => 16.99PB

関連情報