![为什么要三重打印?](https://linux22.com/image/132453/%E4%B8%BA%E4%BB%80%E4%B9%88%E8%A6%81%E4%B8%89%E9%87%8D%E6%89%93%E5%8D%B0%EF%BC%9F.png)
我已经编写了这个脚本,它多次打印同一行。如果我只想打印一次怎么办?
BEGIN {print "Average of salary"}
cnt=cnt+1
total=total+$3
avg=total/cnt
END {printf "Number of records:%d avg is:%d",cnt,avg}
答案1
问题是您没有将下面的代码括在大括号内,如下所示,并将awk
满足 True 语句并打印它读取的每一行:
{
cnt=cnt+1
total=total+$3
avg=total/cnt
}
但你可以这样做:
awk '{ avg=(total+=$3)/NR } END{ print "...", NR, avg }' <infile
该值在从输入文件读取的NR
每个记录/行上递增,这意味着当awk
awk读取所有行,其值NR
是最后一行的行号(基本上它指向右埃科德氮数)
答案2
你几乎成功了。
将计算行括在 {} 中,例如
BEGIN { ...}
{ compute goes here}
END { printf "..."}
为什么要三重打印?
每个像这样的赋值foo=$3+foo
都是对 awk 的积极测试,默认操作是打印行。
(顺便说一句,您只需要计算END
子句中的平均值)