我的文本文件中有两个字段
timestamp number
时间戳的格式为hh:mm:ss.mmm
一些样本记录
18:31:48.345 0.00345
18:31:49.153 0.00123
18.32:23.399 0.33456
我想打印出相差不超过30秒的平均记录。什么是好的和快速的做法
答案 0 :(得分:1)
这是awk的起点。我知道你可以更好地优化代码。
count == 0 { startTime = timeToSeconds($1) }
{ currentTime = timeToSeconds($1)
elapsedTime = currentTime - startTime
if (elapsedTime > 30.0) {
calculateAverage()
startTime = timeToSeconds($1)
}
print
sum += $2
count++
}
END { calculateAverage() }
function timeToSeconds(timeString) {
# Convert a time string to number of seconds
split(timeString, tokens, ":")
seconds = tokens[1]*3600.0 + tokens[2]*60.0 + tokens[3]
return seconds
}
function calculateAverage() {
# Use & modify global vars: count, sum
average = sum / count
printf "Average: %.4g\n\n", average
sum = 0.0; count = 0
}
答案 1 :(得分:0)
我首先要使用一些内置日期/时间'操作'的脚本语言。例如,在Ruby中你可以很容易地做到:
require 'time'
t,n = gets.chomp.split(/\s+/)
ts1 = Time.parse(t)
# ...
t,n = gets.chomp.split(/\s+/)
ts2 = Time.parse(t)
现在允许您执行以下操作:
diff = ts2 - ts1
if diff > 30
# difference is greater than 30 seconds
end
Ruby Time
对象可以在上下文中使用(float,int,String等),因此开始进行计算就好像解析的日期实际上是数值一样。