2011-12-08 18 views
7

Sto calcolando la media per un po 'di numeri in un gruppo di file di testo come questo:awk calcolare la media o pari a zero

grep '^num' file.$i | awk '{ sum += $2 } END { print sum/NR }' 

Ma alcune volte il file non contiene il modello, in cui ho cas vuoi che lo script restituisca zero. Qualche idea di questo one-liner leggermente modificato?

risposta

14

Si sta aggiungendo al carico (in media) generando un processo in più per fare tutto il primo possibile. Usare 'grep' e 'awk' insieme è una bandiera rossa. Si sarebbe meglio scrivere:

awk '/^num/ {n++;sum+=$2} END {print n?sum/n:0}' file 
5

Prova questo: operatore ternario

... END { print NR ? sum/NR : 0 } 
1

Uso di awk, vale a dire m ? m : n il che significa che, se m ha un valore, usarlo, altrimenti '?' ':' Utilizzare questo altro valore. Sia n che m possono essere stringhe, numeri o espressioni che producono un valore.

grep '^num' file.$i | awk '{ sum += $2 } END { print sum ? sum/NR : 0.0 }' 
+0

altre risposte già sottolineano l'inutile 'grep', ma forse si desidera risolvere che ancora. – tripleee

Problemi correlati