查找特定行

时间:2017-04-19 16:56:17

标签: awk average

我有一个包含2列数字的文本文件。

10 2
20 3
30 4
40 5 
50 6
60 7 
70 8 
80 9
90 10
100 11
110 12
120 13
130 14

我想找到第6行第二列数据的平均值。即((7 + 8 + 9 + 10 + 11 + 12 + 13 + 14)/ 8 = 10.5)

我可以找到这篇文章Scripts for computing the average of a list of numbers in a data file 并使用以下内容:

awk'{s+=$2}END{print "ave:",s/NR}' fileName

但我得到了整个第二列数据的平均值。

这里有任何提示。

2 个答案:

答案 0 :(得分:2)

这个单行应该做:

awk -v s=6 'NR<s{next} {c++; t+=$2} END{printf "%.2f (%d samples)\n", t/c, c}' file

这个awk脚本有三个模式/动作对。第一个负责跳过第一个s行。第二行在每一行(从s开始)执行;它递增一个计数器并将第2列添加到运行总计中。第三个在处理完所有数据后运行,并打印出结果。

答案 1 :(得分:0)

脚本下面应该完成工作

awk 'NR>=6{avg+=$2}END{printf "Average of field 2 starting from 6th line %.1f\n",avg/(NR-5)}' file

<强>输出

Average of field 2 starting from 6th line 10.5