如何使用awk计算异常值?为何原脚本未计入第一行数据?
原awk脚本错误原因分析
你写的第一段脚本计算平均值的逻辑是正确的,已经计入了第一行的值,问题出在输出环节漏掉了第一行,核心错误点如下:
- 第二次读取
file.txt时,第一行(序号为1的行)会命中FNR==1 && f==1的分支,你在这个分支计算完平均值后直接执行了next命令,会直接跳过当前行后续的所有处理逻辑,导致第一行没有走到下方的打印分支,自然不会输出。 - 你误以为计算时没有包含第一行,是因为最终输出结果少了第一行,实际上第一次遍历文件统计总和、计数的逻辑没有问题,所有1~10行的数据都被纳入了平均值计算。
原脚本简易修复方案
如果不想改动原脚本的整体结构,只需要删掉第二个分支里的next语句即可,修改后如下:
awk 'FNR==NR{ f=1; if($1 >= 1 && $1 <= 10){ count++; SUM+=$2; }; next } FNR==1 && f==1{ AVG=SUM/count; # 删掉原来的next语句,让第一行继续执行后续打印逻辑 } ($1 >= 1 && $1 <= 10){ print $1, $2-AVG } ' file.txt file.txt
内容的提问来源于stack exchange,提问作者Kay
相关产品推荐
相关产品推荐

