GNU/Linux >> Belajar Linux >  >> Linux

Ubah yang dapat dibaca manusia menjadi byte di bash

Berikut adalah fungsi yang memahami awalan biner dan desimal dan mudah diperluas untuk unit besar jika diperlukan:

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
} 

contoh:

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

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

Akhiran tidak peka huruf besar/kecil.


Gunakan numfmt --from=iec dari GNU coreutils.


Linux
  1. Konversi format tanggal dalam bash

  2. konversi keluaran bash `ls` ke array json

  3. Ukuran file dalam format yang dapat dibaca manusia

  1. Bash Konversi \xc3\x89 Ke ?

  2. Konversikan string teks dalam bash ke array

  3. Menyortir ukuran file yang dapat dibaca manusia

  1. Bagaimana cara mengonversi .. dalam nama jalur menjadi nama absolut dalam skrip bash?

  2. Ubah tanggal ISO menjadi detik sejak zaman di linux bash

  3. Jalankan perintah bash pada pipa jenkins