두 타임 스탬프 사이의 차이를 밀리 초까지 찾는 방법은 무엇입니까? 찾는 것입니다. 나와 함께 타임 스탬프

쉘 스크립팅을 처음 사용합니다. 내 스크립트의 핵심은 두 타임 스탬프 사이의 차이를 밀리 초까지 찾는 것입니다. 나와 함께 타임 스탬프 내용이있는 파일 만

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 일이있는 달 등 많은 요인이 나타납니다.

누구든지 도와주세요.



답변

복잡한 파싱을 할 필요가 없습니다. 는 친구 의 도움으로 모든 마술을 할 것입니다 .

#!/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

노트

이것도 당신의 필요에 맞습니까?


답변

Perl, Python 또는 Ruby와 같은 스크립팅 언어는 빠르며 노력이 거의 필요하지 않습니다. 예를 들어, Perl 및 Date :: Parse :

perl -MDate::Parse -l -ne 's/,/./g; split; print str2time("$_[2] $_[3]") - str2time("$_[0] $_[1]")'

(각 줄에 대해로 바꾸고 ,를 통해 .줄로 나누고 처음 두 단어와 다음 두 단어로 구성된 날짜를 구문 분석 한 다음 차이를 인쇄하십시오.)$_[0]$_[3]


답변

방금이 게시물을 date보았습니다. 적어도 오늘은 더 간단한 기반의 솔루션이 있습니다. @Gilles Quenot의 답변에 프레임 워크를 사용하면 (그의 anwser에게 의견을 쓰지 만 평판이 충분하지는 않습니다) :

while read d1_1 d1_2 d2_1 d2_2
do
    date -d "$d2_1 $d2_2 $(date -d "$d1_1 $d1_2" +%s.%N) seconds ago" +%s.%N
done << END
2012-09-13 15:00:29,290 2012-09-13 15:00:29,297
END

결과:

$ ./time_elapsed.sh
0.007000000

사용 %3N대신하여 %N밀리 초에 출력을 자릅니다.


답변