Apakah ada alat standar yang mengubah bilangan integer Bytes menjadi jumlah yang dapat dibaca manusia dari ukuran unit terbesar yang mungkin, sambil menjaga nilai numerik antara 1,00 dan 1023,99?
Saya memiliki skrip bash / awk saya sendiri, tetapi saya sedang mencari alat standar , yang ditemukan di banyak / kebanyakan distro ... sesuatu yang lebih umum tersedia, dan idealnya memiliki args baris perintah sederhana, dan / atau dapat menerima input pipa.
Berikut adalah beberapa contoh tipe output yang saya cari.
1 Byt
173.00 KiB
46.57 MiB
1.84 GiB
29.23 GiB
265.72 GiB
1.63 TiB
Berikut ini skrip byte-manusia (digunakan untuk output di atas)
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 )
}'
Pembaruan Berikut ini adalah versi modifikasi dari skrip Gilles , seperti yang dijelaskan dalam komentar atas jawabannya .. (dimodifikasi agar sesuai dengan tampilan yang saya sukai).
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
dalam pembuatan :)