任何人都可以教我如何计算时间差之间的平均值?例如
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,但我卡住了......
答案 0 :(得分:2)
具有三个或更多时间值的行上的中间值是没有意义的 - 只有值的数量很重要。要从您的示例中看到这一点,请注意:
((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)) }'
对于您的示例数据,这会给出您指定的结果(尽管格式不如您提供的那样)。
这假定时间值在行上排序。如果没有,请计算最大值和最小值,并分别替换$NF
和$1
次使用。
答案 1 :(得分:0)
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