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 }\'
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
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 }'
Try this:
... END { print NR ? sum/NR : 0 }