使用awk计算并打印通过正则表达式获得的值的平均值

时间:2015-04-27 17:38:21

标签: regex awk

我有一个名为bt.B.1.log的文件,如下所示:

onActivityResult

以及以秒为单位的40个时间记录(点代表无用的行)。 我应该从文件中提取那些时间,并在不使用中间文件的情况下计算/打印平均值到.dat文件(t1avg.dat)。 我已经能够使用中间文件这样做了:

.
.
.
Time in seconds =                   260.37
.
.
.
Time in seconds =                   260.04
.
.
.

因此,方法是以某种方式将第一个awk命令中出现的正则表达式作为第二个命令中的参数传递,告诉awk计算正则表达式结果行的总和,所有这些都是从单个文件中读取的( bt.B.1.log)并写入t1avg.dat(禁止创建t1.dat)。到目前为止,我已经达到了以下代码,它给出了错误的输出:

awk '/Time in seconds/ {print $5}' bt.B.1.log > t1.dat
awk '{sum+=$0} END {print sum/NR}' t1.dat > t1avg.dat

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

                    {% if title == "Home" %}
                    <li class="active">
                    {% else %}
                    <li>
                    {% endif %}

awk '/Time in seconds/ {s+=$5;c++} END{print s/c}' bt.B.1.log >t1avg.dat 是时间的总和,s是计数。因此,c是平均值。

答案 1 :(得分:1)

你也可以分开=

$ echo "$e"
.
.
.
Time in seconds =                   260.37
.
.
.
Time in seconds =                   260.04
.
$ echo "$e" | awk -F= '/Time in seconds/ {s+=$2; c++} END{print s/c}'
260.205