2009-09-15 99 views
1

我的格式为带有时间戳文件:awk脚本获取时间平均

HH:MM:SS.MS

例如

00:04:02.08

00:04:01.08

每个时间戳是在另一条线路,通常只有两行的文件

我需要写一个awk脚本来计算这些时间的平均值。我很天真awk脚本,所以如果有人可以请给我一个代码片段,它会有很多帮助。

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

回答

8

/..:..:..\./ { 
    ++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 
$ 

+1

如果你是卖这个在租来的编码器,请不要告诉我这件事。 :-) – DigitalRoss 2009-09-15 06:31:59

+0

+1但是正则表达式可能会改进,例如/ [0-9] {1,}:[0-5] [0-9]:[0-5] [0-9] \。{ 1} [0-9] {0,3} /作为条目,如“#Time应指定为HH:MM:SS.UUU”将通过平均关闭 – 2009-09-15 07:06:35

+0

非常感谢,请放心,我不会出售此内容在RentACoder。 :)需要它作为我需要在我的工作中编写的批处理脚本的一部分。 – 2009-09-15 08:26:06