当我在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
我不明白它是如何发生的。如果有人能向我解释,我将不胜感激。
答案 0 :(得分:3)
next
终止对该输入行的处理,从而防止第二个块(没有条件的块,因此否则运行每个输入行)运行那条线。
因此,它会阻止total
初始化为第1行的值,并导致total
值太低(当您的输入来自seq
时行仅包含1
)。
如果你想要next
,那么你需要在该块中初始化total
以避免抛弃你的结果:
NR==1 {
min = max = total = $1
next
}