我有下一个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来计算所有数学,然后组合字符串并将其作为字典值。我已经尝试过一些空格和括号的组合,但仍然没有运气。
Vars从输入流填充:
$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”和容量部分移动到字典键,因为dict值在我的情况下不能是字符串,所以我将把它与INT进行比较。
答案 0 :(得分:2)
串联工作正常。这不是问题。
问题是您在打印时计算字典值的int()
。由于该值是字符串,因此结果将被截断。如果您需要在执行计算时而不是在打印时使用int()
。
顺便说一句,如果您提供了一些示例数据,那么测试代码并提供答案就会容易得多。这一点尤为重要,因为在这里,问题出现在一个不符合预期的地方。