加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 05:49:06 所属栏目:百科 来源:网络整理
导读:我有一个名为bt.B.1.log的文件,如下所示: ...Time in seconds = 260.37...Time in seconds = 260.04... 等等,以秒为单位显示40个时间记录(点代表无用的行). 我应该从文件中提取那些时间,并在不使用中间文件的情况下计算/打印平均值到.dat文件(t1avg.dat).
我有一个名为bt.B.1.log的文件,如下所示:

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

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

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

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

awk '{sum+=/Time in seconds/$5; print sum/NR}' bt.B.1.log

有任何想法吗?

解决方法

awk '/Time in seconds/ {s+=$5;c++} END{print s/c}' bt.B.1.log >t1avg.dat

s是时间的总和,c是计数.因此,s / c是平均值.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读