为什么要三重打印?

为什么要三重打印?

我已经编写了这个脚本,它多次打印同一行。如果我只想打印一次怎么办?

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每个记录/行上递增,这意味着当awkawk读取所有行,其值NR是最后一行的行号(基本上它指向埃科德数)

答案2

你几乎成功了。

将计算行括在 {} 中,例如

BEGIN { ...}
{ compute goes here}
END { printf "..."}

为什么要三重打印?

每个像这样的赋值foo=$3+foo都是对 awk 的积极测试,默认操作是打印行。

(顺便说一句,您只需要计算END子句中的平均值)

相关内容