awk:dict值中带有数字的concat字符串

awk:dict值中带有数字的concat字符串,awk,Awk,我有下一个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计算所有的数学运算,然后合成字符串并将其作为字典值。我已经尝试了一些空格和括号的组合,

我有下一个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”和capacity部分移到dictionary键,因为dict值在我的例子中不能是string,接下来我会将它与INT进行比较。

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

问题是打印时正在计算字典值的
int()
。由于该值是字符串,因此结果将被截断。如果需要使用
int()


顺便说一句,如果您提供了一些示例数据,那么测试代码和提供答案就会容易得多。这一点尤其重要,因为有时情况就是这样,就像这里一样,问题发生在一个与预期不符的地方。

我已经添加了细节,但它们在我的问题范围内的重要性很低。问题是,如何将数学结果+字符串+数学结果合并到字典中。我开始认为awk对此有问题。谢谢你,丹尼斯。我现在觉得自己很愚蠢。事实上,我完全忘记了printf部分,还没有检查它。