Có một công cụ tiêu chuẩn chuyển đổi số lượng byte nguyên thành số đếm có thể đọc được của con người với kích thước đơn vị lớn nhất có thể, trong khi vẫn giữ giá trị số trong khoảng từ 1,00 đến 1023,99?
Tôi có tập lệnh bash / awk của riêng mình, nhưng tôi đang tìm kiếm một công cụ tiêu chuẩn , được tìm thấy trên nhiều / hầu hết ... một cái gì đó thường có sẵn hơn, và lý tưởng là có dòng lệnh đơn giản, và / hoặc có thể chấp nhận đầu vào đường ống.
Dưới đây là một số ví dụ về loại đầu ra mà tôi đang tìm kiếm.
1 Byt
173.00 KiB
46.57 MiB
1.84 GiB
29.23 GiB
265.72 GiB
1.63 TiB
Đây là kịch bản byte-human (được sử dụng cho đầu ra ở trên)
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 )
}'
Cập nhật Dưới đây là phiên bản sửa đổi của tập lệnh Gilles , như được mô tả trong một nhận xét cho câu trả lời của anh ấy .. (được sửa đổi cho phù hợp với giao diện ưa thích của tôi).
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
trong quá trình tạo ra :)