为什么'next'会对awk产生影响

时间:2018-04-26 17:55:04

标签: shell 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

我不明白它是如何发生的。如果有人能向我解释,我将不胜感激。

1 个答案:

答案 0 :(得分:3)

next终止对该输入行的处理,从而防止第二个块(没有条件的块,因此否则运行每个输入行)运行那条线。

因此,它会阻止total初始化为第1行的值,并导致total值太低(当您的输入来自seq时行仅包含1)。

如果你想要next,那么你需要在该块中初始化total以避免抛弃你的结果:

NR==1 {
  min = max = total = $1
  next
}