Existe-t-il un outil standard qui convertit un nombre entier d'octets en un nombre lisible par l'homme de la plus grande taille d'unité possible, tout en maintenant la valeur numérique entre 1,00 et 1023,99?
J'ai mon propre script bash / awk, mais je recherche un outil standard , que l'on trouve sur de nombreuses / la plupart des distributions ... quelque chose de plus disponible, et idéalement avec de simples arguments en ligne de commande, et / ou pouvant accepter une entrée dérivée.
Voici quelques exemples du type de sortie que je recherche.
1 Byt
173.00 KiB
46.57 MiB
1.84 GiB
29.23 GiB
265.72 GiB
1.63 TiB
Voici le script octets-humain (utilisé pour la sortie ci-dessus)
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 )
}'
Mise à jour Voici une version modifiée du script de Gilles , telle que décrite dans un commentaire à sa réponse. (Modifiée pour correspondre à mon look préféré).
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
en train de se faire :)