我总是咬人(4521564 b)
if the result is > 1 YB - print result in YB
if the result is > 1 ZB and < 1 YB - print result in ZB
if the result is > 1 EB and < 1 ZB - print result in EB
if the result is > 1 PB and < 1 EB - print result in PB
if the result is > 1 TB and < 1 PB - print result in TB
if the result is > 1 GB and < 1 TB - print result in GB
if the result is > 1 MB and < 1 GB - print result in MB
if the result is > 1 KB and < 1 MB - print result in KB
不知道可以计算出的bash?
答案 0 :(得分:3)
使用awk:
f.awk内容:
$ cat f.awk
function calc(num,i)
{
if (num>=1024)
calc(num/1024,i+1);
else
printf "%.2f %s\n", num,a[i+1];
}
BEGIN{
split("b KB MB GB TB PB EB ZB YB",a);
calc(val,0)
}
运行上面的awk程序:
$ awk -v val=4521564 -f f.awk
4.31 MB
这里使用的逻辑是将数字保持为1024,直到原始数字小于1024.并且在每个分区期间增加一个计数。计数最终映射到单位以获得适当的单位。函数calc是递归调用的。
例如:I / p:1000bytes:在这种情况下,因为没有。小于1024,不进行除法,计数器为0.计数器映射到字节索引。
I / p:2050:除以1024,计数递增1.除法后,由于没有。小于1024,用计数器指向的单位打印,在这种情况下是Kb。
答案 1 :(得分:1)
shell没有帮助程序时不执行浮点运算,因此这个shell函数将循环
byteme(){
v=$1
i=0
s=" KMGTPEZY"
while [ $v -gt 1024 ]; do
i=$((i+1))
v=$((v/1024))
done
echo $v${s:$i:1}b
}
byteme 1234567890
1Gb