GNU/Linux >> Linux の 問題 >  >> Linux

バイトカウントをHumanKibMibなどに変換するための標準ツール。デュのように、Ls1?

標準ツールはありますか これは、バイトの整数カウントを、数値を1.00から1023.99の間に保ちながら、人間が読める最大の単位サイズのカウントに変換しますか?

私は自分のbash/awkスクリプトを持っていますが、標準を探しています 多くの/ほとんどのディストリビューションにあるツール…より一般的に利用可能なもので、理想的には単純なコマンドライン引数を持ち、および/またはパイプ入力を受け入れることができます。

これが私が探している出力のタイプのいくつかの例です。

    1    Byt  
  173.00 KiB  
   46.57 MiB  
    1.84 GiB  
   29.23 GiB  
  265.72 GiB  
    1.63 TiB  

これがbytes-human スクリプト(上記の出力に使用)

awk -v pfix="$1" -v sfix="$2" 'BEGIN { 
      split( "Byt KiB MiB GiB TiB PiB", unit )
      uix = uct = length( unit )
      for( i=1; i<=uct; i++ ) val[i] = (2**(10*(i-1)))-1
   }{ if( int($1) == 0 ) uix = 1; else while( $1 < val[uix]+1 ) uix--
      num = $1 / (val[uix]+1)
      if( uix==1 ) n = "%5d   "; else n = "%8.2f"
      printf( "%s"n" %s%sn", pfix, num, unit[uix], sfix ) 
   }'

更新 こちらがGilles’の修正版です 彼の答えへのコメントで説明されているように、スクリプト..(私の好みの外観に合うように変更されました)。

awk 'function human(x) {
         s=" B   KiB MiB GiB TiB EiB PiB YiB ZiB"
         while (x>=1024 && length(s)>1) 
               {x/=1024; s=substr(s,5)}
         s=substr(s,1,4)
         xf=(s==" B  ")?"%5d   ":"%8.2f"
         return sprintf( xf"%sn", x, s)
      }
      {gsub(/^[0-9]+/, human($1)); print}'

承認された回答:

いいえ、そのような標準ツールはありません。

GNU coreutils 8.21(2013年2月、まだすべてのディストリビューションに存在していない)以降、組み込みLinuxおよびCygwinでは、numfmtを使用できます。 。まったく同じ出力形式は生成されません(coreutils 8.23の時点では、小数点以下2桁を取得できるとは思いません)。

$ numfmt --to=iec-i --suffix=B --padding=7 1 177152 48832200 1975684956
     1B
 173KiB
  47MiB
 1.9GiB

多くの古いGNUツールはこの形式を生成でき、GNUsortはcoreutils7.5以降の単位で数値を並べ替えることができます(2009年8月、最新の非組み込みLinuxディストリビューションに存在します)。

あなたのコードは少し複雑だと思います。これがよりクリーンなawkバージョンです(出力形式は完全に同一ではありません):

awk '
    function human(x) {
        if (x<1000) {return x} else {x/=1024}
        s="kMGTEPZY";
        while (x>=1000 && length(s)>1)
            {x/=1024; s=substr(s,2)}
        return int(x+0.5) substr(s,1,1)
    }
    {sub(/^[0-9]+/, human($1)); print}'

(より専門的な質問から再投稿)

関連:なぜ誰も真のBourneシェルを/ bin / shとして使用しないのですか?
Linux
  1. ハードリンクをシンボリックリンクに変換しますか?

  2. Linuxでコマンドラインを使用してPDFをJPGに変換するには?

  3. Linux ディスク イメージをスパース ファイルに変換するにはどうすればよいですか?

  1. LinuxでプロのようにGNOMEスクリーンショットツールを使用する

  2. リストの特定のテキストを大文字に変換する方法は?

  3. TAR ファイルを ISO ファイルに変換する方法

  1. openssh秘密鍵をSsh2秘密鍵に変換しますか?

  2. Gifski –あらゆるビデオを高品質のGIFにすばやく変換

  3. 複数の PDF ファイルを 1 つの PDF に結合/変換する