私は同じ行を何度も印刷するこのスクリプトを書いています。一度だけ印刷したい場合はどうすればよいですか?
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
アッすべての行を読み取り、その値はNR
最後の行の行番号です(デフォルトでは、次を指します)。右エココード窒素数字)
答え2
あなたはほぼ成功しました。
たとえば、計算された行を{}で囲みます。
BEGIN { ...}
{ compute goes here}
END { printf "..."}
なぜ三重印刷ですか?
このようなすべての割り当てはfoo=$3+foo
awkのアクティブテストであり、基本的な作業はその行を印刷することです。
END
(ところで、節の平均を計算するだけです)