在 awk 函数中将值 GB 转换为 TB

在 awk 函数中将值 GB 转换为 TB

我们正在尝试将 GB 值转换为 TB 值,我的代码中是否缺少任何内容。

样本输出

isi status -q | grep -e "^Size" -e "^Used" -e "^Avail"
Size:       501T (5041T Raw)    19T (19T Raw)
Used:       440G (80%)          1.4T(7%)
Avail:      61T (12%)           18T (93%)

需要输出在某些情况下,Used值可能以 GB 为单位,需要将其转换为 TB

Size:       501T 
Used:       0.39T
Avail:      61T 

我尝试了这个但没有得到预期的结果

isi status -q | grep -e "^Size" -e "^Used" -e "^Avail" | awk '{print $1 $2}' | awk 'function num2gb(n) { if (n ~ /T$/) return n / 1; return n / 14; }
/Size:/ { size=$NF }
/Used:/ { used=num2gb($NF) }
END {
print size
print "used=" used }'

答案1

我不明白你的算术,但也许是这样的

awk '/^(Size|Used|Avail):/ {
  $2 = $2 ~ /G$/ ? sprintf("%.2fT", ($2+0)/1024) : $2;
  print $1, $2;
}' OFS='\t' file

相关内容