GNU/Linux >> Linux Esercitazione >  >> Linux

Converti leggibile dall'uomo in byte in bash

Ecco una funzione che comprende i prefissi binari e decimali ed è facilmente estendibile per unità di grandi dimensioni in caso di necessità:

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
} 

esempio:

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

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

I suffissi non fanno distinzione tra maiuscole e minuscole.


Usa numfmt --from=iec da GNU coreutils.


Linux
  1. Converti i formati di data in bash

  2. convertire l'output di bash `ls` in un array json

  3. Dimensione del file in formato leggibile dall'uomo

  4. Converti una stringa di testo in bash in array

  5. Esegui il comando bash sulla pipeline jenkins

Bash fino a Loop

Dichiarazione del caso Bash

Bash if..else Statement

Matrici Bash

Bash Shebang

Come visualizzare la dimensione del file in formato leggibile dall'uomo (KB, MB, GB) nel terminale Linux