Код: Выделить всё
#! /usr/bin/awk -f
BEGIN {
lim = split("Ki:Mi:Gi:Ti:Pi:Ei:Zi:Yi", h, ":")
}
/^[[:digit:].]+$/ {
n=$0
for(i = 0; n >= 2^10 && i <= lim; i++)
n /= 2^10
if(n == int(n))
f = 0
else if(n >= 10) {
n = int(n)
f = 0
} else
f = 1
if(i > lim)
h[i] = h[lim]
printf "%'.*f %sB\n", f, n, h[i]
}
/^[[:digit:].]+[[:space:]]+([[:alpha:]]+|B)$/ {
n=$1
s=$2
sub("B$", "", s)
for(i = 0; i <= lim; i++)
if(s == h[i])
printf "%'f\n", n * 2^(10 * i)
}
Код: Выделить всё
$ echo 1073741824 | ./a.awk
1 GiB
$ echo 1073741823 | LC_NUMERIC=en_US.UTF-8 ./a.awk
1,023 MiB
$ echo 1000000000000000000000000000000000000000000000000000000000000 | LC_NUMERIC=en_US.UTF-8 ./a.awk
807,793,566,946,316,047,856,863,539,101,696 YiB