Shell 获取时间平均值的Awk脚本

Shell 获取时间平均值的Awk脚本,shell,awk,Shell,Awk,我有一个带有时间戳的文件,格式如下: HH:MM:SS.MS e、 g 00:04:02.08 00:04:01.08 每个时间戳位于不同的行上,通常一个文件中只有两行 我需要编写一个awk脚本来计算这些时间的平均值。我对awk脚本编写非常幼稚,所以如果有人能给我一个代码片段,这将有很大的帮助 即使是shell脚本(bash)解决方案也会有所帮助。 /..:..:..\./ { ++count split($0,a,":"); seconds = (a[1] * 60.0 + a[2

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

HH:MM:SS.MS

e、 g

00:04:02.08

00:04:01.08

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

我需要编写一个awk脚本来计算这些时间的平均值。我对awk脚本编写非常幼稚,所以如果有人能给我一个代码片段,这将有很大的帮助

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


/..:..:..\./ {
  ++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
其他东西
00:04:02.08
更多的东西
00:04:01.08
更多的东西
$awk-f q.awk<测试数据
00:04:02.08 242.08
00:04:01.08 241.08
2 483.16 241.58
00:04:01.58
$ 



运行它


$cat test.data
其他东西
00:04:02.08
更多的东西
00:04:01.08
更多的东西
$awk-f q.awk<测试数据
00:04:02.08 242.08
00:04:01.08 241.08
2 483.16 241.58
00:04:01.58
$ 


如果您是通过“租一个编码器”销售此产品,请不要告诉我。:-)+1但是正则表达式可以改进,比如/[0-9]{1,}:[0-5][0-9]:[0-5][0-9]\.{1}[0-9]{0,3}/因为“时间应该指定为HH:MM:SS.UUU”这样的条目会通过平均值来表示感谢,请放心,我不会在RentACoder出售它。:)需要它作为批处理脚本的一部分,我需要在我的工作中编写。如果您在rent-a-coder上销售此产品,请不要告诉我。:-)+1但是正则表达式可以改进,比如/[0-9]{1,}:[0-5][0-9]:[0-5][0-9]\.{1}[0-9]{0,3}/因为“时间应该指定为HH:MM:SS.UUU”这样的条目会通过平均值来表示感谢,请放心,我不会在RentACoder出售它。:)需要它作为我工作时需要编写的批处理脚本的一部分。
$ 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
$