Bash awk计算平均值或零

Bash awk计算平均值或零,bash,awk,Bash,Awk,我正在计算一堆文本文件中一堆数字的平均值,如下所示: grep '^num' file.$i | awk '{ sum += $2 } END { print sum / NR }' 但有时文件不包含模式,我希望脚本返回零。有没有关于这个稍微修改过的单衬里的想法?试试这个: ... END { print NR ? sum/NR : 0 } 使用awk的三元运算符,即m?m:n这意味着,如果m有一个值“?”,使用它,否则“:”使用这个其他值。n和m都可以是字符串、数字或生成值的表达式 gre

我正在计算一堆文本文件中一堆数字的平均值,如下所示:

grep '^num' file.$i | awk '{ sum += $2 } END { print sum / NR }'
但有时文件不包含模式,我希望脚本返回零。有没有关于这个稍微修改过的单衬里的想法?

试试这个:

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

使用awk的三元运算符,即
m?m:n
这意味着,如果m有一个值“?”,使用它,否则“:”使用这个其他值。n和m都可以是字符串、数字或生成值的表达式

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

通过生成一个额外的进程来完成第一个进程所能做的一切,您正在增加负载(平均值)。同时使用“grep”和“awk”是一个危险信号。你最好写下:

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

其他答案已经指出了无用的grep,但也许你还是想解决这个问题。