以下命令将disk_space_in_bytes
变量格式化为人类可读输出,逗号后面有2位数。
echo $disk_space_in_bytes | awk '{ suffix=" KMGT"; for(i=1; $1>1024 && i < length(suffix); i++) $1/=1024; printf("%.2f\n", $1); print(substr(suffix, i, 1)"B")}'
(这封awk命令归功于@Innocent Bystander https://stackoverflow.com/a/36724130/6133648)
例如,如果disk_space_in_bytes
为858 458 685,44
(以字节为单位的值),则命令将打印818.69 MB
,但中间有空格。
我想删除这个额外的空格,例如818,69MB
。但是这对我来说在awk中有点棘手。我尝试了一些ORS和OFS操作但没有成功。
你能找到方法来消除多余的空间吗?
由于
答案 0 :(得分:3)
只需更改awk
命令的参数,如下所示。目前,它在字节数之后有一个额外的换行符,并且它仍然在" KMGT"
中打印一个空格,但该空间对于特定awk
命令显示正确的字节面值的方式是必需的。 / p>
此命令假定您使用gawk
变体,因为它使用gawk
特定函数gensub
。
echo $disk_space_in_bytes | awk '{ suffix=" KMGT"; for(i=1; $1>1024 && i < length(suffix); i++) $1/=1024; printf("%.2f", $1); print(gensub(/ /, "", "g", substr(suffix, i, 1))"B")}'
显示碎片使其更有意义:
echo $disk_space_in_bytes |
awk '{
suffix=" KMGT";
for(i=1; $1>1024 && i < length(suffix); i++)
$1/=1024;
printf("%.2f", $1);
print(gensub(/ /, "", "g", substr(suffix, i, 1))"B")
}'
基本上,这里只有两处变化:
\n
命令printf
)
gensub
命令会从附加到字节面额的后缀中删除空白,如果是字节,则为空格,而不是千字节等。