68

ファイルのサイズがバイト単位で指定されている場合、 IEC (バイナリ) プレフィックス末尾のゼロ付きの3 つの有効数字でフォーマットしたいと思います。たとえば、1883954 は 1.80M になります。

浮動小数点演算は bash ではサポートされていないため、代わりに awk を使用しました。問題は、末尾のゼロを保持する方法がわからないことです。現在の解決策:

if [ $size -ge 1048576 ]
then
    size=$(awk 'BEGIN {printf "%.3g",'$size'/1048576}')M
elif [ $size -ge 1024 ]
then
    size=$(awk 'BEGIN {printf "%.3g",'$size'/1024}')K
fi

(ファイルはそれほど大きくないので、より大きなユニットを考慮する必要はありません。)

編集:これには別の問題があります。以下の Adrian Frühwirth のコメントを参照してください。

4

7 に答える 7

140

使用していない理由はありますか

ls -lh

指図 ?ここ数年でリリースされた Linux システムを使用している場合は、この機能があります。

于 2013-04-06T18:36:26.590 に答える
75

GNU Coreutilsには、数値変換用に呼び出された明らかにあまり知られていない小さなツールが含まれており、numfmt必要なことを実行します。

$ numfmt --to=iec-i --suffix=B --format="%.3f" 4953205820
4.614GiB

それはあなたのニーズによく合っていると思います.他の答えほど大きくもハックでもありません.

より強力なソリューションが必要な場合は、他の回答をご覧ください。

于 2013-12-12T01:27:18.393 に答える
13
ls -lah /path/to/your/file | awk -F " " {'print $5'}
于 2015-02-22T21:00:54.960 に答える
3

少し遅れていることはわかっています。しかし、誰かがそれを便利だと思うかもしれません。

答えは、単純に、スクリプト%.2fの代わりに使用することです。%.3g(ソース)


テスト:

#!/bin/bash

size=1883954

if [ $size -ge 1048576 ]
then
    size=$(awk 'BEGIN {printf "%.2f",'$size'/1048576}')M
elif [ $size -ge 1024 ]
then
    size=$(awk 'BEGIN {printf "%.2f",'$size'/1024}')K
fi

echo $size

出力:

1.80M
于 2015-11-11T15:24:12.450 に答える
2

使用しても構わない場合はbc、以下が浮動小数点演算に役立ちます。scale印刷する桁数に応じて、必要に応じて変更できます。

size=1883954

if [ $size -ge 1048576 ]
then
    size=$(echo "scale=2;$size/1048576"| bc)M
elif [ $size -ge 1024 ]
then
    size=$(echo "scale=2;$size/1024" | bc)K
fi

echo $size
于 2013-04-06T18:21:23.380 に答える