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

人間が読める形式を bash のバイトに変換する

以下は、2 進数と 10 進数のプレフィックスを理解し、必要に応じて大きな単位に簡単に拡張できる関数です:

dehumanise() {
  for v in "${@:-$(</dev/stdin)}"
  do  
    echo $v | awk \
      'BEGIN{IGNORECASE = 1}
       function printpower(n,b,p) {printf "%u\n", n*b^p; next}
       /[0-9]$/{print $1;next};
       /K(iB)?$/{printpower($1,  2, 10)};
       /M(iB)?$/{printpower($1,  2, 20)};
       /G(iB)?$/{printpower($1,  2, 30)};
       /T(iB)?$/{printpower($1,  2, 40)};
       /KB$/{    printpower($1, 10,  3)};
       /MB$/{    printpower($1, 10,  6)};
       /GB$/{    printpower($1, 10,  9)};
       /TB$/{    printpower($1, 10, 12)}'
  done
} 

例:

$ dehumanise 2K 2k 2KiB 2KB 
2048
2048
2048
2000

$ dehumanise 2G 2g 2GiB 2GB 
2147483648
2147483648
2147483648
2000000000

サフィックスは大文字と小文字を区別しません。


numfmt --from=iec を使用 GNU coreutils から。


Linux
  1. bash で日付形式を変換する

  2. パス名の .. を bash スクリプトの絶対名に変換する方法は?

  3. Linux bashでISO日付をエポックからの秒数に変換する

  1. bash `ls` 出力を json 配列に変換します

  2. 人間が読める形式のファイルサイズ

  3. bash のテキスト文字列を配列に変換する

  1. Bashは\xc3\ x89をÉに変換しますか?

  2. jenkins パイプラインで bash コマンドを実行する

  3. 人間が読めるサイズのファイルの並べ替え