awk,计算不同时间间隔的平均值
有人能教我如何计算时间差的平均值吗?比如说awk,计算不同时间间隔的平均值,awk,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 这里的挑战 列数是动态的,这意味着并非所有行都具有相同的列数 为了计算平均值,
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
这里的挑战
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)) }'
对于示例数据,这将提供您指定的结果(尽管格式没有您显示的那么好)
这假定时间值按行排序。如果不是,则计算最大值和最小值,并分别替换$NF和$1使用的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