¿Existe una herramienta estándar que convierta un recuento entero de bytes en un recuento legible por humanos del tamaño de unidad más grande posible, mientras se mantiene el valor numérico entre 1.00 y 1023.99?
Tengo mi propio script bash / awk, pero estoy buscando una herramienta estándar , que se encuentra en muchas / la mayoría de las distribuciones ... algo más generalmente disponible, e idealmente tiene argumentos simples de línea de comandos, y / o puede aceptar entradas entubada.
Aquí hay algunos ejemplos del tipo de salida que estoy buscando.
1 Byt
173.00 KiB
46.57 MiB
1.84 GiB
29.23 GiB
265.72 GiB
1.63 TiB
Aquí está el script bytes-humano (utilizado para la salida anterior)
awk -v pfix="$1" -v sfix="$2" 'BEGIN {
split( "Byt KiB MiB GiB TiB PiB", unit )
uix = uct = length( unit )
for( i=1; i<=uct; i++ ) val[i] = (2**(10*(i-1)))-1
}{ if( int($1) == 0 ) uix = 1; else while( $1 < val[uix]+1 ) uix--
num = $1 / (val[uix]+1)
if( uix==1 ) n = "%5d "; else n = "%8.2f"
printf( "%s"n" %s%s\n", pfix, num, unit[uix], sfix )
}'
Actualización Aquí hay una versión modificada del guión de Gilles , como se describe en un comentario a su respuesta ... (modificado para adaptarse a mi aspecto preferido).
awk 'function human(x) {
s=" B KiB MiB GiB TiB EiB PiB YiB ZiB"
while (x>=1024 && length(s)>1)
{x/=1024; s=substr(s,5)}
s=substr(s,1,4)
xf=(s==" B ")?"%5d ":"%8.2f"
return sprintf( xf"%s\n", x, s)
}
{gsub(/^[0-9]+/, human($1)); print}'
standard tool
creación :)