シェルスクリプトは初めてです。私のスクリプトの中心は、ミリ秒までの2つのタイムスタンプの違いを見つけることです。私の場合、タイムスタンプの内容が
2012-09-13 15:00:29,290 2012-09-13 15:00:29,297
2012-09-13 15:00:29,428 2012-09-13 15:00:29,447
このように、約30kのレコードがあり、スクリプトを実行するときにパフォーマンスの問題に直面すべきではありません。うるう年、31日のある月などの多くの要素が、このためのスクリプトを記述しようとすると思い浮かびます。
誰かがこれで私を助けてくれますか?
複雑な構文解析を行う必要はありません。 date は、友人の助けを借りてすべての魔法を実行します bash :
_#!/bin/bash
while read d1_1 d1_2 d2_1 d2_2; do
secdiff=$((
$(date -d "$d2_1 $d2_2" +%s) - $(date -d "$d1_1 $d1_2" +%s)
))
nanosecdiff=$((
$(date -d "$d2_1 $d2_2" +%N) - $(date -d "$d1_1 $d1_2" +%N)
))
printf "%s %s - %s %s = %d milliseconds\n" $d2_1 $d2_2 $d1_1 $d1_2 $((
(secdiff * 1000) + (nanosecdiff / 1000000)
))
done < YOUR_FILE.txt
_
[〜#〜]出力[〜#〜]
_2012-09-13 15:00:29,297 - 2012-09-13 15:00:29,290 = 7 milliseconds
2012-09-13 15:00:29,447 - 2012-09-13 15:00:29,428 = 19 milliseconds
_
_man date
_を参照
[〜#〜]ノート[〜#〜]
date -d
_は非常に便利で、タイムスタンプを変換します%s
_はEpoch時間(1970年1月1日からの秒数)%N
_はナノ秒$(( ))
および_(( ))
_はbash
算術用です http://mywiki.wooledge.org/ArithmeticExpression を参照してください$( )
は_command substitution
_の略ですこれはあなたのニーズにも合っていますか?
Perlなどのスクリプト言語、PythonまたはRubyは高速でほとんど労力を必要としません。たとえば、Perlと Date :: Parse :
Perl -MDate::Parse -l -ne 's/,/./g; split; print str2time("$_[2] $_[3]") - str2time("$_[0] $_[1]")'
(各行について、,
沿って .
、行を単語に分割$_[0]
使って $_[3]
、最初の2語と次の2語によって形成された日付を解析し、違いを出力します。)