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-е издание, чтобы получить основу, чтобы вам не приходилось постоянно просить о помощи на каждом этапе пути.