awk getline 在第一次循环迭代中未按预期工作

awk getline 在第一次循环迭代中未按预期工作

考虑这个简单的 awk 计算器程序及其输出

$ awk '{while (getline) {n=0;for(i=NF;i>0;i--)n+=$i; print "sum: " n;}}'
1 1
2 2
sum: 4
3 3
sum: 6

请注意第一个输入行如何1 1不产生总和。所有连续的生产线均按预期工作。为什么第一行输入没有打印总和?

答案1

使用getline会丢弃第一行。尝试改为:

awk '{n=0;for(i=NF;i>0;i--)n+=$i; print "sum: " n;}'

就其本质而言,awk将隐式迭代输入行。因此,代码n=0;for(i=NF;i>0;i--)n+=$i; print "sum: " n;将为每一行输入运行。这里不需要显式地循环各行。

相关内容