AWK - if 和 printf,之前或之内

AWK - if and printf, before or within

我有以下printf

printf ("%-6s\t%6.3f\n",msg,sum[msg]/count[msg])

数组如下:

sum[] += 
count[]++

= test1 = 0 - 9 随机在不同的行上

我要做一个 if 语句来说明如果 sum[msg]count[msg] == 0 则替换为 -

我不确定是否必须执行以下操作:

if (count[msg] == 0 || sum[msg] == 0) {
printf ("%-6s\t-\n",msg)
}

或者是否可以将 if 放在 printf 中,如下所示:

printf ("%-6s\t%6.3f\n",msg,if (count[msg] == 0 || sum[msg] == 0) {print -} else sum[msg]/count[msg])

此外,如果实际 sum[] += 没有匹配的行,那么 return 0null

非常感谢所有帮助。

printf "%-6s\t%s\n",msg,(sum[msg]*count[msg]?sprintf("%6.3f",sum[msg]/count[msg]):"-")

但请务必阅读 Arnold Robbins 撰写的《Effective Awk Programming》第 4 版,打下基础,这样您就不必每一步都寻求帮助。