0


0

テキストファイルには2つのフィールドがあります。

タイムスタンプ番号

タイムスタンプの形式はhh:mm:ss.mmmです。

いくつかのサンプルレコードは

18:31:48.345 0.00345

18:31:49.153 0.00123

18.32:23.399 0.33456

30秒以内のレコードの平均を印刷したい。 それをするための良い、そして速い方法は何ですか

2 Answer


1


これがawkの出発点です。 私はあなたがより良いコードを最適化できることを知っています。

count == 0 {startTime = timeToSeconds($ 1)} {currentTime = timeToSeconds($ 1)経過時間= currentTime  - 開始時間(経過時間> 30.0){calculateAverage()開始時間= timeToSeconds($ 1)} timeToSeconds(timeString){#時間文字列を秒数に変換しますsplit(timeString、tokens、 ":")seconds = tokens [1] * 3600.0 tokens [2] * 60.0 tokens [3] return seconds}関数calculateAverage(){#使用


0


私は内蔵された日付/時間の '操作’を持つスクリプト言語を使うことから始めます。 たとえば、Rubyでは簡単に次のことができます。

「時間」が必要

t、n = gets.chomp.split(/ \ s /)ts1 = Time.parse(t)

#...

t、n = gets.chomp.split(/ \ s /)ts2 = Time.parse(t)

これにより、次のようなことができるようになりました。

diff = ts2  -  ts> 30#diffが30秒より大きい場合はts1

Rubyの `Time`オブジェクトはコンテキスト(float、int、Stringなど)で使うことができるので、解析された日付が実際には数値であるかのように計算を始めるのは簡単です。