【问题标题】:awk, calculate the average for different interval of timeawk,计算不同时间间隔的平均值
【发布时间】:2011-06-01 09:20:21
【问题描述】:

谁能教我如何计算时间差之间的平均值?例如

    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

这里的挑战

  1. 列数是动态的,这意味着并非所有行都具有相同的列数
  2. 计算平均值,例如: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,但我卡住了......

【问题讨论】:

    标签: awk


    【解决方案1】:

    具有三个或更多时间值的行上的中间值是没有意义的——只有值的数量很重要。要从您的示例中看到这一点,请注意:

    ((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 使用。

    【讨论】:

      【解决方案2】:

      一个 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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-01
        • 2020-05-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-08
        相关资源
        最近更新 更多