gpt4 book ai didi

linux - 删除 awk printf/print 之间的空格分隔符

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:46:02 24 4
gpt4 key购买 nike

以下命令将 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_bytes858 458 685,44(以字节为单位的值),则该命令将打印 818.69 MB,但是中间有一个空格。

我想删除这个额外的空间,例如 818,69MB。但这在 awk 中对我来说有点棘手。我尝试了一些 ORS 和 OFS 操作但没有成功。

你能找到删除多余空间的方法吗?

谢谢

最佳答案

只需更改 awk 命令的参数,如下所示。目前,它在字节数之后有一个额外的换行符,它还在 "KMGT" 中打印一个空格,但该空格对于特定的 awk 命令是必需的显示正确的字节单位。

此命令假定您使用的是 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")
}'

基本上,这里只有两个变化:

  • printf 命令中删除了换行符 (\n)
  • 此处使用的 gensub 命令从附加到字节单位的后缀中去除空格,如果它是字节而不是千字节等,则它是一个空格。

关于linux - 删除 awk printf/print 之间的空格分隔符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45355564/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com