Soy nuevo en los scripts de shell. El corazón de mi script es encontrar la diferencia entre dos marcas de tiempo hasta milisegundos. Conmigo tengo un archivo con contenido de marcas de tiempo solo como
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
De esta manera, tengo alrededor de 30k registros, donde no debería enfrentar ningún problema de rendimiento cuando ejecuto el script. Muchos factores, como el año bisiesto, los meses con 31 días, etc., aparecen cuando intento escribir un guión para esto.
¿Alguien puede ayudarme en esto por favor?
text-processing
date
timestamps
Vamshi G
fuente
fuente
Respuestas:
No es necesario realizar un análisis complejo, la fecha hará toda la magia por ti, con la ayuda de su amigo, bash :
SALIDA
Ver
man date
NOTA
date -d
es muy útil, convierte marcas de tiempo%s
es el tiempo de la época (segundos desde 01-01-1970)%N
son nanosegundos$(( ))
y(( ))
es parabash
aritmética, ver http://mywiki.wooledge.org/ArithmeticExpression$( )
representacommand substitution
¿Esto también se ajusta a tus necesidades?
fuente
Un lenguaje de script como Perl, Python o Ruby será rápido y requerirá poco esfuerzo. Por ejemplo, con Perl y Date :: Parse :
(Para cada línea, sustituir
,
por.
, dividir la línea en palabras$_[0]
a través$_[3]
, analizar las fechas formadas por los dos primeros y dos palabras siguientes, e imprimir la diferencia).fuente
Acabo de encontrar esta publicación, hay, al menos hoy, una
date
solución más simple . Usando el marco en la respuesta de @Gilles Quenot (habría escrito un comentario a su respuesta, pero no suficiente reputación):El resultado:
Usar en
%3N
lugar de%N
truncará la salida a milisegundos.fuente