AWK - если и printf, до или в течение

У меня есть следующее printf

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

Массивы к этому следующие:

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

$2 = test1$3 = 0 - 9 по разным строкам наугад

Я должен сделать заявление, чтобы сказать, если либо sum[msg] или же count[msg] == 0 затем заменить на -

Я не уверен, должен ли я сделать следующее:

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

или можно поставить если в пределах printf как следующее:

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

Также, если фактический sum[$2] += $3 не имеет соответствующих строк, которые будут возвращать 0 или же null

вся помощь очень ценится.

1 ответ

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

но, пожалуйста, прочитайте книгу Арнольда Роббинса "Эффективное программирование Awk", 4-е издание, чтобы получить основу, чтобы вам не приходилось постоянно просить о помощи на каждом этапе пути.

Другие вопросы по тегам