我在 Brian Kernighan 的演讲中找到了这个例子。将两列表格中的食品价格相加
#!/usr/bin/awk -f
{amount[$1] += $2}
END {for (name in amount)
print name, amount[name] | "sort -k1 "
print "Finished processing everything!"
}
最后的打印声明print "Finished...."
是我自己的一点补充。
对于输入
pizza 200
beer 100
pizza 500
beer 50
它产生输出
Finished processing everything!
beer 150
pizza 700
即,它将啤酒的价格和比萨饼的价格加起来。我没有得到的是我添加的最后一个打印语句是如何在 for 循环之前执行的。
另外为什么| sort...
语句在for
循环内?不应该在所有打印完成后的 for 循环之后,有点像在 bash 命令行中通过 bash 做同样的事情
cat file | sort
吗?
AWK(1P)有一段关于
Output Statements
在
awk
管道中创建一个保持打开状态的流,直到您关闭它。这允许它在循环中使用。使用您的示例:这将关闭
sort -k1
,允许打印。