我使用命令获取远程文件夹的大小,在运行后返回
120928312 http://blah.com
数字是字节的大小。我想要做的是将其输出为 MB ,并删除http
部分。我猜对文件很好,但不知道如何去做。
答案 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)
尝试使用bash内置函数(显示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)
bc
和printf
bc
和printf
可用于显示具有可配置的小数位数以及分组数字的输出:
$ 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
请参阅其手册页,并确保其正确使用。