2つのタイムスタンプ間の最大ミリ秒差を見つける方法は?

2つのタイムスタンプ間の最大ミリ秒差を見つける方法は?

私はシェルスクリプトに初めて触れました。私のスクリプトの鍵は、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

このように約30,000のレコードがあり、スクリプトを実行するときにパフォーマンスの問題があってはなりません。スクリプトを作成しようとすると、うるう年、31日の月などの多くの要素が考慮されます。

誰でもこの問題を解決するのに役立ちますか?

ベストアンサー1

複雑な分析をする必要なしに、彼の友人の助けを借りて、あなたのためにすべての魔法を行います。:

#!/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~である連帯時間(1970年1月1日以降の秒数)
  • %Nはいナノ秒
  • $(( ))(( ))算術についてはbash参照してください。http://mywiki.wooledge.org/ArithmeticExpression
  • $( )代表するcommand substitution

これはあなたのニーズにも適していますか?

おすすめ記事