Unix 基于时间戳获取平均值的脚本
我的文本文件中有两个字段Unix 基于时间戳获取平均值的脚本,unix,file,scripting,Unix,File,Scripting,我的文本文件中有两个字段 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秒的记录的平均值。什么是一种快速有效的方法?这里是awk的一个起点。我知道你可以更好地优化代码 count == 0 { startTime = timeToSeconds($1) } { currentTime = time
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秒的记录的平均值。什么是一种快速有效的方法?这里是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
}
我将首先使用一些具有内置日期/时间“操作”的脚本语言。例如,在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等)中使用,因此开始计算时,就好像解析的日期实际上是数值一样,这很简单。它必须是bash脚本吗?一个Python脚本会很容易。它也可以是一个Python脚本