awk calculate average or zero

前端 未结 3 459
甜味超标
甜味超标 2020-12-09 21:47

I am calculating the average for a bunch of numbers in a bunch of text files like this:

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


        
相关标签:
3条回答
  • 2020-12-09 22:09

    You're adding to your load (average) by spawning an extra process to do everything the first can do. Using 'grep' and 'awk' together is a red-flag. You would be better to write:

    awk '/^num/ {n++;sum+=$2} END {print n?sum/n:0}' file
    
    0 讨论(0)
  • 2020-12-09 22:11

    Use awk's ternary operator, i.e. m ? m : n which means, if m has a value '?', use it, else ':' use this other value. Both n and m can be strings, numbers, or expressions that produce a value.

    grep '^num' file.$i | awk '{ sum += $2 } END { print sum ? sum / NR : 0.0 }'
    
    0 讨论(0)
  • 2020-12-09 22:24

    Try this:

    ... END { print NR ? sum/NR : 0 }
    
    0 讨论(0)
提交回复
热议问题