Não, não existe essa ferramenta padrão.
Desde o GNU coreutils 8.21 (fevereiro de 2013, portanto ainda não está presente em todas as distribuições), no Linux não integrado e no Cygwin, você pode usar numfmt
. Ele não produz exatamente o mesmo formato de saída (como do coreutils 8.23, eu não acho que você pode obter 2 dígitos após os pontos decimais).
$ numfmt --to=iec-i --suffix=B --padding=7 1 177152 48832200 1975684956
1B
173KiB
47MiB
1.9GiB
Muitas ferramentas GNU mais antigas podem produzir este formato e O tipo GNU pode ordenar números com unidades desde o coreutils 7.5 (agosto de 2009, assim presente em distribuições Linux não-embarcadas modernas).
Eu acho seu código um pouco confuso. Aqui está uma versão awk mais limpa (o formato de saída não é exatamente idêntico):
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}'