Jestem nowy w skryptowaniu powłoki. Serce mojego skryptu polega na znalezieniu różnicy między dwoma znacznikami czasu do milisekund. Ze mną mam plik z zawartością znaczników czasu tylko jako
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
W ten sposób mam około 30 000 rekordów, w których nie powinienem napotykać żadnych problemów z wydajnością podczas wykonywania skryptu. Wiele czynników, takich jak rok przestępny, miesiące z 31 dniami itp., Pojawia się, gdy próbuję napisać skrypt dla tego.
Czy ktoś może mi pomóc w tej sprawie?
text-processing
date
timestamps
Vamshi G.
źródło
źródło
Odpowiedzi:
Nie musisz wykonywać skomplikowanej analizy, data zrobi dla ciebie całą magię, z pomocą swojego przyjaciela, bash :
WYNIK
Widzieć
man date
UWAGA
date -d
jest bardzo przydatny, konwertuje znaczniki czasu%s
to czas epoki (sekundy od 01-01-1970)%N
to nanosekundy$(( ))
i(( ))
dotyczybash
arytmetyki, patrz http://mywiki.wooledge.org/ArithmeticExpression$( )
oznaczacommand substitution
Czy to również pasuje do twoich potrzeb?
źródło
Język skryptowy, taki jak Perl, Python lub Ruby, będzie szybki i nie będzie wymagał dużego wysiłku. Na przykład z Perl i Date :: Parse :
(Dla każdej linii, zastąpić
,
przez.
, podzielić linię na słowa$_[0]
przez$_[3]
, analizowania daty utworzone przez dwóch pierwszych i kolejnych dwóch wyrazów, a następnie wydrukować różnicę).źródło
Właśnie natrafiłem na ten post, istnieje - przynajmniej dzisiaj - prostsze
date
rozwiązanie. Korzystając z frameworka w odpowiedzi na @Gilles Quenot (napisałby komentarz do swojej odpowiedzi, ale za mało reputacji):Wynik:
Użycie
%3N
zamiast%N
spowoduje skrócenie wyniku do milisekund.źródło