【问题标题】:Awk script to get time averages获取时间平均值的 awk 脚本
【发布时间】:2009-09-15 05:32:06
【问题描述】:

我有一个带有时间戳的文件,格式为:

HH:MM:SS.MS

例如

00:04:02.08

00:04:01.08

每个时间戳位于不同的行,通常在一个文件中只有两行

我需要编写一个 awk 脚本来计算这些时间的平均值。我对 awk 脚本编写很幼稚,所以如果有人可以请给我一个 code-sn-p,它将有很多帮助。

即使是 shell 脚本 (bash) 解决方案也会有所帮助。

【问题讨论】:

    标签: shell awk


    【解决方案1】:

    /..:..:..\./ {
      ++count
      split($0,a,":");
      seconds = (a[1] * 60.0 + a[2]) * 60.0 + a[3]
      print $0, seconds
      alltime += seconds
    }
    END {
      if (count > 0) {
        avgtime = alltime / count
        print count, alltime, avgtime
        mins = int(avgtime / 60.0) % 60
        hours = int(avgtime / 60.0 / 60.0)
        secs = avgtime % 60.0
        printf("%02d:%02d:%05.2f\n", hours, mins, secs)
      }
    } 
    

    然后运行它...


    $ cat test.data
    other stuff
    
        00:04:02.08
    more stuff
    
        00:04:01.08
    
    more stuff
    $ awk -f q.awk < test.data
        00:04:02.08 242.08
        00:04:01.08 241.08
    2 483.16 241.58
    00:04:01.58
    $ 
    

    【讨论】:

    • 如果你是在rent-a-coder上卖的,请不要告诉我。 :-)
    • +1 但是正则表达式可以改进可能类似于 /[0-9]{1,}:[0-5][0-9]:[0-5][0-9 ]\.{1}[0-9]{0,3}/ 作为“#Time 应指定为 HH:MM:SS.UUU”之类的条目将通过平均关闭
    • 非常感谢,请放心,我不会在 RentACoder 卖这个。 :) 需要它作为我需要在工作中编写的批处理脚本的一部分。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多