AWK - if和printf,之前或之内

时间:2016-06-26 04:57:59

标签: awk gawk

我有以下printf

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

这个数组如下:

sum[$2] += $3
count[$2]++

$2 = test1 $3 = 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[$2] += $3没有匹配的行,则会返回0null

非常感谢所有帮助。

1 个答案:

答案 0 :(得分:2)

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

但是请阅读Arnold Robbins撰写的有效Awk编程,第4版,以获得一个基础,这样你就不必在每一步都不断寻求帮助。