뭘 이런걸..

Posted
Filed under Tech/프로그래밍
디스크 크기나 네트워크 전송 대역폭 등을 단위대로 보기 좋게 하기 위한 코드를 살펴보겠습니다.
C나 여러 언어로 많이 있으나, bash 로는 딱히 마음에 드는 코드가 없어 만들어 보았습니다.

HUMANREADABLE_SIZE_SUFFIX=( "B" "KB" "MB" "GB" "TB" )
# HUMANREADABLE_SIZE req_size base_suffix
function HUMANREADABLE_SIZE {
local suffix=${2:-0}
local size=$1
local isize=${size}

while [ 1 ]
do
(( isize < 1024 )) && break
size="$( bc <<< "scale = 2; ${size} / 1024" )"
isize=${size%%.*}
let "suffix += 1"
done

echo "${size} ${HUMANREADABLE_SIZE_SUFFIX[suffix]}"
}


사용법은 간단합니다.

HUMANREADABLE_SIZE 입력_숫자 입력단위(0-B,1-KB,2-MB,3-GB)


[root@host ~]# # convert 1024 B
[root@host ~]# HUMANREADABLE_SIZE 1024
1KB
[root@host ~]# # convert 1024 KB
[root@host ~]# HUMANREADABLE_SIZE 1024 1
1MB
[root@host ~]# # convert 1024 MB
[root@host ~]# HUMANREADABLE_SIZE 1024 2
1GB
[root@host ~]# # convert 1024 GB
[root@host ~]# HUMANREADABLE_SIZE 1024 3
1TB


변환 값을 변수로 받고 싶다면 다음과 같이 할 수 있습니다.


[root@host ~]# SIZE=$( HUMANREADABLE_SIZE 1024 3 )
[root@host ~]# echo -n ${SIZE} # newline 이 없어야 할 경우..
2021/01/13 11:45 2021/01/13 11:45