コマンドライン引数を使用して任意のフィールドの平均を計算する汎用awkスクリプト
-
07-07-2019 - |
質問
ファイルとフィールド番号(そのファイル内)を入力として受け取り、そのファイル内のそのフィールドの平均値を取得できる汎用awkスクリプトを作成したいと思います。次のように使用します:
bash$ avg.awk 3 input.file
22
bash$ avg.awk 4 input.file
2001
もちろん、事前に平均化するフィールド($ 3など)がわかっていれば、スクリプトを作成できます。これは次のようになります:
//{tot+=$3; count++}
END{
print tot/count;
}
しかし、コマンドラインオプションを使用して、平均化するフィールドを変更できるようにしたいと考えています。それは可能ですか?ありがとう!
解決
これはあなたが望むことをします:
$ 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
他のヒント
{ tot += $field; count++ }
END { print tot/count }
のような呼び出し
awk -v field = 3 -f avg.awk input.file
所属していません StackOverflow