考虑这个简单的 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;
将为每一行输入运行。这里不需要显式地循环各行。