8

ファイルと(そのファイル内の)フィールド番号を入力として受け取り、そのファイル内のそのフィールドの平均値を取得できる汎用awkスクリプトを作成したいと思います。私はそれを次のように使用します:

bash$ avg.awk 3 input.file
22
bash$ avg.awk 4 input.file
2001

もちろん、どのフィールド(たとえば、$ 3)を平均化するかを事前に知っていれば、スクリプトを作成できます。これは次のようになります。

//{tot+=$3; count++}
END{
    print tot/count;
}

ただし、コマンドラインオプションを使用して、平均化するフィールドを変更できるようにしたいと考えています。それは可能ですか?ありがとう!

4

2 に答える 2

11

これはあなたが望むことをします:

$ cat avg.awk
#!/usr/bin/env awk -f
# Calculate average, syntax: avg.awk field-number file
BEGIN { field = ARGV[1]; ARGV[1] = "" }
{ sum += $field }
END { print sum / NR }

$ cat data
1 5 7
3 6 5
8 4 6

$ avg.awk 1 data
4

$ avg.awk 2 data
5

$ avg.awk 3 data
6
于 2009-09-17T03:55:24.007 に答える
5
{ tot += $field; count++ }
END { print tot/count }

のように呼び出す awk -v field=3 -f avg.awk input.file

于 2009-09-16T16:22:15.303 に答える