바이트를 일반 10진수 형식의 GB, MB, KB로 변환해야 합니다.

바이트를 일반 10진수 형식의 GB, MB, KB로 변환해야 합니다.

바이트를 해당 값으로 변환하기 위해 아래에 제공된 코드가 있습니다.

for OUTPUT in $(find $IP_DIR -maxdepth 1 | awk 'NR>1')
do
    case $RETURNSIZE in
        "gb") FS=`du -b $OUTPUT | awk {'print $1'}`
              FS=`echo $FS | awk '{ byte =$1 /1024/1024**2 ; print byte " GB" }'`
              echo $OUTPUT "|" $FS;;
        "mb") FS=`du -b $OUTPUT | awk {'print $1'}`
              FS=`echo $FS | awk '{ byte =$1 /1024/1024 ; print byte " MB" }'`
              echo $OUTPUT "|" $FS;;
        "kb") FS=`du -b $OUTPUT | awk {'print $1'}`
              FS=`echo $FS | awk '{ byte =$1 /1024 ; print byte " KB" }'`
              echo $OUTPUT "|" $FS;;
        "b")  FS=`du -b $OUTPUT | awk {'print $1'}`
              echo $OUTPUT "|" $FS "B";;
    esac
    

OUTPUT

/home/work/exten.sh | 3.53903e-07 GB
/home/work/e.txt | 0 GB
/home/work/t.txt | 0 GB
/home/worktest | 9.53674e-07 GB
/home/work/s.txt | 3.23169e-07 GB

논리는 완벽해 보이지만 상황에 도달하면 gb (RETURNSIZE)결과는 지수 형식입니다.

하지만 저는 일반 십진수 형식으로 결과를 찾고 있습니다.

답변1

이것은 Linux이므로 아무도 이 numfmt명령을 언급하지 않았다는 사실에 놀랐습니다.

numfmt - 숫자를 사람이 읽을 수 있는 문자열로 변환

>>numfmt --to iec --format "%8.4f" 599511627776
558.3388G

답변2

테스트하지는 않았지만 bc mathlib 로딩 사용과 관련이 있다고 생각합니다 bc -l.

awkGB의 계산 부분을 다음과 같이 변경해 보십시오 .

awk '{ byte =$1 /1024/1024/1024; print byte " GB" }'

참고: 매체 1024/1024**2와 동일합니다 .1024/1024/1024awk

답변3

> printf "1GiB\\nMB" | units
Currency exchange rates from finance.yahoo.com on 2017-10-31 
3047 units, 109 prefixes, 109 nonlinear units

You have: You want:     * 1073.7418
        / 0.00093132257
You have:

또는

> echo $((1024*1024*1024))
1073741824
>   

또한보십시오:명 7대

화타이

답변4

이를 위해 작은 cli를 만들었습니다.

https://github.com/gonejack/hsize

> hsize 123 45678
123 => 123B
45678 => 44.61KB
> echo 19129219219129119 | hsize
19129219219129119 => 16.99PB

관련 정보