숫자 값을 1.00과 1023.99 사이로 유지하면서 바이트 수의 정수를 가능한 가장 큰 단위 크기의 사람이 읽을 수있는 카운트로 변환 하는 표준 도구 가 있습니까?
나는 내 자신의 bash / awk 스크립트를 가지고 있지만 많은 / 대부분의 배포판에서 찾을 수 있는 표준 도구를 찾고 있습니다 ... 더 일반적으로 사용 가능한 것이 이상적이며 간단한 명령 줄 인수가 있거나 파이프 입력을 허용 할 수 있습니다.
여기 내가 찾고있는 출력 유형의 예가 있습니다.
1 Byt
173.00 KiB
46.57 MiB
1.84 GiB
29.23 GiB
265.72 GiB
1.63 TiB
다음은 bytes-human 스크립트입니다 (위의 출력에 사용됨).
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 )
}'
업데이트 그의 대답에 대한 설명에 설명 된대로 Gilles의 스크립트 의 수정 된 버전이 있습니다 . (내 선호하는 모양에 맞게 수정 됨)
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
만드는 새로운 것 같습니다 :)