通用awk脚本,通过命令行参数计算任何字段的平均值

时间:2009-09-16 16:17:51

标签: command-line scripting awk average

我想编写一个通用的awk脚本,它可以将文件和字段编号(在该文件中)作为输入,并给出该文件中该字段的平均值。我会用这样的东西:

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

当然,如果我知道我要预先平均的哪个字段(例如3美元),我可以编写脚本。这将是这样的:

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

但我希望能够通过命令行选项更改我想要平均的字段。那可能吗?谢谢!

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:5)

{ tot += $field; count++ }
END { print tot/count }
像打电话一样 awk -v field=3 -f avg.awk input.file