¿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"
Shane
fuente

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
John1024
fuente
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.

hroptatyr
fuente
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