使用bash KB到MB

时间:2013-09-27 20:56:49

标签: bash shell

我使用命令获取远程文件夹的大小,在运行后返回

120928312 http://blah.com

数字是字节的大小。我想要做的是将其输出为 MB ,并删除http部分。我猜对文件很好,但不知道如何去做。

6 个答案:

答案 0 :(得分:12)

你可以使用shell builtins

来做到这一点
some_command |while read KB dummy;do echo $((KB/1024))Mb;done

这是一个更有用的版本:

#!/bin/sh
human_print(){
while read B dummy; do
  [ $B -lt 1024 ] && echo ${B} bytes && break
  KB=$(((B+512)/1024))
  [ $KB -lt 1024 ] && echo ${KB} kilobytes && break
  MB=$(((KB+512)/1024))
  [ $MB -lt 1024 ] && echo ${MB} megabytes && break
  GB=$(((MB+512)/1024))
  [ $GB -lt 1024 ] && echo ${GB} gigabytes && break
  echo $(((GB+512)/1024)) terabytes
done
}

echo 120928312 http://blah.com | human_print

答案 1 :(得分:5)

尝试使用内置函数(显示KB版本之类的整数)

var="120928312 http://blah.com"
echo "$(( ${var%% *} / 1024)) MB"

答案 2 :(得分:4)

这一行怎么样:

kent$  echo "120928312 http://blah.com"|awk '{$1/=1024;printf "%.2fMB\n",$1}'
118094.05MB

答案 3 :(得分:3)

function bytes_for_humans {
    local -i bytes=$1;
    if [[ $bytes -lt 1024 ]]; then
        echo "${bytes}B"
    elif [[ $bytes -lt 1048576 ]]; then
        echo "$(( (bytes + 1023)/1024 ))KiB"
    else
        echo "$(( (bytes + 1048575)/1048576 ))MiB"
    fi
}

$ bytes_for_humans 1
1 Bytes
$ bytes_for_humans 1024
1KiB
$ bytes_for_humans 16777216
16MiB

答案 4 :(得分:1)

尝试使用awk

awk '{MB=$1/1024; print $MB}'

$1 - 第一列的值,本例中的大小(KB)

答案 5 :(得分:0)

使用bcprintf

bcprintf可用于显示具有可配置的小数位数以及分组数字的输出:

$ KB=1234567890
$ echo "$KB / 1000" | bc -l | xargs -i printf "%'.1f MB" {}
1,234,567.9 MB

使用numfmt

要使用numfmt自动缩放输出单位,请执行以下操作:

$ numfmt --from=iec --to=si 123456789K
127G
$ numfmt --from=si --to=iec 123456789K
115G

要使用numfmt输出到固定单位,例如M

$ numfmt --from=iec --to-unit=1M --grouping 123456789K
126,420

$ numfmt --from=si --to-unit=1Mi --grouping 123456789K
117,738

请参阅其手册页,并确保其正确使用。