¿Cómo canalizo la salida a date -d "value"?


12

Tengo una fecha como "2014-01-30 05:04:27 GMT", y si ejecuto date -d "2014-01-30 05:04:27 GMT", la salida está en la zona horaria de mi servidor ("Jue 30 de enero 16:04:27 EST 2014 ").

Con el uso de grep and cut, extraje la fecha en GMT de un archivo. Sin embargo, estoy luchando para luego convertir esto a mi hora local.

Por ejemplo:

[usuario @ registro del servidor] # grep "algo" logfile.txt | grep "tuvo éxito" | cortar -f1 -d '['

Salida: 2014-01-30 05:04:27 GMT

¿Qué puedo agregar al final, para pasar esa salida a "date -d"?

Intentó:

  • [usuario @ registro del servidor] # grep "algo" logfile.txt | grep "tuvo éxito" | corte -f1 -d '[' | con fecha de
  • [usuario @ registro del servidor] # grep "algo" logfile.txt | grep "tuvo éxito" | corte -f1 -d '[' | fecha
  • [usuario @ registro del servidor] # grep "algo" logfile.txt | grep "tuvo éxito" | corte -f1 -d '[' | fecha -d "$ 1"

Respuestas:


12
gmt="$(grep "something" logfile.txt | grep "Succeeded" | cut -f1 -d'[')"
date -d "$gmt"

O, si prefiere el formato de canalización:

grep "something" logfile.txt | grep "Succeeded" | cut -f1 -d'[' | { read gmt ; date -d "$gmt" ; }

El problema es que dateno usa stdin. Por lo tanto, tenemos que capturar el stdin en una variable (llamada gmtaquí) y luego suministrarlo en la línea de comando a date.

Salida de muestra del segundo enfoque:

$ echo  "2014-01-30 05:04:27 GMT" | { read gmt ; date -d "$gmt" ; }
Wed Jan 29 21:04:27 PST 2014

1
¡Gracias, esto resolvió el problema! También agradezco que explique la razón detrás de por qué no estaba funcionando.
— Shane

18

Si está utilizando la fecha GNU de un coreutils suficientemente reciente, hay date -f, desde la pantalla de ayuda:

-f, --file=DATEFILE       like --date once for each line of DATEFILE

Entonces su intento 4 podría haber sido:

$ grep "something" logfile.txt | grep "Succeeded" | cut -f1 -d'[' | date -f -

el último -significa stdin.


2
Esta debería ser la respuesta aceptada.
— Petrus K.

¿Es posible comparar la salida del comando anterior con una fecha en particular? P.ej. Necesito enumerar todas las fechas anteriores al "Mié 30 de enero 21:04:27 PST 2014"
— Manu

@Manu no per se, dateutils tiene dategreppara ese caso de uso específico.
— hroptatyr

¡Esto es mucho más fácil! Si solo pudiera leer, podría haber encontrado esto en la página del manual.
— Ken Sharp
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.