shell - 为什么 'next' 对 awk 有影响
问题描述
当我在 awk 表达式中添加“next”时,Avg 的值完全不同。
没有下一个
seq 1 1 100 | awk ' NR==1 { min = max = $1; } { min = $1 < min ? $1 : min; max = $1 > max ? $1 : max; total += $1 } END { print "Min :",min,"Max :",max,"Avg :",total/NR,"Sum :",total }'
平均:50.5 总和:5050
下一个
seq 1 1 100 | awk ' NR == 1 { min = max = $1; next; } { min = $1 < min ? $1 : min; max = $1 > max ? $1 : max; total+= $1 } END { print "Min :",min,"Max :",max,"Avg: ",total/NR,"Sum :",total }'
平均:50.49 总和:5049
我不明白它是怎么发生的。如果有人能向我解释,我将不胜感激。
解决方案
终止该next
输入行的处理,从而防止为该行运行第二个块(没有条件的块,否则它会为每一行输入运行)。
因此,它防止total
被初始化为第 1 行的值,并导致您的total
值太低(当您的输入来自seq
并且第一行仅包含时1
)。
如果你想要next
,那么你需要total
在那个块中初始化以避免抛出你的结果:
NR==1 {
min = max = total = $1
next
}
推荐阅读
- pytorch - DistilBERT 损失梯度用于衡量代币重要性
- sql - 我可以查询其名称存储在列中的表吗
- python - Scale an axis to scientific notation in Altair
- c - 如何在 C 中使用相对路径
- c++ - std::cin 在 for 循环中不起作用
- python - Set size of FieldLenField
- javascript - 根据数组索引从原始数组推送到目标内部数组
- python - 比较两个句子数据框并返回第三个
- javascript - 本地策略的 Passport.js 代码在登录模块中无法正常工作
- javascript - Laravel 有选择地使用来自节点模块的插件