Hier ist eine Funktion, die binäre und dezimale Präfixe versteht und bei Bedarf leicht für große Einheiten erweiterbar ist:
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
}
Beispiel:
$ dehumanise 2K 2k 2KiB 2KB
2048
2048
2048
2000
$ dehumanise 2G 2g 2GiB 2GB
2147483648
2147483648
2147483648
2000000000
Bei den Suffixen wird die Groß- und Kleinschreibung nicht beachtet.
Verwenden Sie numfmt --from=iec
von GNU Coreutils.