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
    

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...