如何解决awk,计算不同时间间隔的平均值
| 有人可以教我如何计算时间差之间的平均值吗?例如 412.00 560.00
0 0
361.00 455.00 561.00
0 0
0 0
0 0
237.00 581.00
425.00 464.00
426.00 520.00
0 0
通常情况下,他们将所有这些数字的总和除以总数字
sum/NR
这里的挑战
列数是动态的,这意味着并非所有行都具有相同的列数
计算平均值,例如:361.00 455.00 561.00
so the calculation :
((455-361) + (561 - 455))/2
因此,我期望的输出是这样的:
total_time divided_by average
148 1 148
0 1 0
200 2 100
0 1 0
0 1 0
0 1 0
344 1 344
: : :
: : :
: : :
即时通讯试图使用awk,但我坚持...
解决方法
具有三个或更多时间值的行上的中间值没有意义-仅值的数量很重要。要从您的示例中看到这一点,请注意:
((455-361) + (561 - 455))/2 = (561 - 361) / 2
因此,您实际上只需要执行以下操作
cat time_data |
awk \'{ printf(\"%f\\t%d\\t%f\\n\",($NF - $1),(NF - 1),($NF - $1) / (NF - 1)) }\'
对于您的样本数据,这将提供您指定的结果(尽管格式不如您提供的那么好)。
假定时间值按行排序。如果不是,请计算最大值和最小值并分别替换ѭ6和ѭ7。
, 一个bash脚本:
#!/bin/bash
(echo \"total_time divided_by average\"
while read line
do
arr=($line)
count=$((${#arr[@]}-1))
total=$(bc<<<${arr[$count]}-${arr[0]})
echo \"$total $count $(bc<<<$total/$count)\"
done < f.txt ) | column -t
输出量
total_time divided_by average
148.00 1 148
0 1 0
200.00 2 100
0 1 0
0 1 0
0 1 0
344.00 1 344
39.00 1 39
94.00 1 94
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。