1

我有下一个 awk oneliner :

{dict[$2"@"$6]=($(NF-2)/($(NF-2)+$NF))*100 } END {for (a in dict) {  printf "%s %d :" ,  a, int(dict[a]) }}

我需要的是添加到每个字典键组合的值

($(NF-2)/($(NF-2)+$NF))*100 " out of"  $(NF-2)+$NF 

所以我希望 awk 计算所有数学,然后编写字符串并将其作为字典值。我已经尝试过一些空格和括号的组合,但仍然没有运气。

变量从输入流中填充:

$2 - host , not unique in input stream
$3 - partition , not unique in input stream
$NF - space avail 
$NF-2 - space used
$(NF-2)+$NF - gives you overall capacity of partiton 

输出是

80% host1@/local/1

预期输出:

80% host1@/local/1   out of 112G

- - - - - - - - - - - 解决方案 - - - - - - - - - - - - - - --------

有了下面的好消息,我解决了这个问题。问题是我在 printf 部分做了 int() ,截断了输出。尽管如此,我的环绕式外壳部分还面临其他问题,因此我的最终代码与我预期的问题不同。

'{key=($2 "@" $6 " out of " int((($(NF-2)+$NF)/1000)/1000) "GB" ) ; dict[key]=($(NF-2)/($(NF-2)+$NF))*100 } END {for (a in dict) {  printf "%s ,  %d :" ,  a, int(dict[a]) }}'

我已经将“out of”和容量部分移到了字典键中,因为在我的情况下字典值不能是字符串,进一步我会将它与 INT 进行比较。

4

1 回答 1

2

串联工作正常。这不是问题。

问题是您int()在打印时正在计算字典值。由于该值是一个字符串,因此结果被截断。如果您需要int()在执行计算时而不是在打印时使用它。

顺便说一句,如果您提供了一些示例数据,那么测试您的代码并提供答案会容易得多。这一点尤其重要,因为有时,就像这里一样,问题出在预期之外的地方。

于 2012-08-01T19:38:25.367 回答