Como eu canalizo a saída para a data -d “value”?

9

Eu tenho uma data como "2014-01-30 05:04:27 GMT", e se eu executar data -d "2014-01-30 05:04:27 GMT", a saída estará no fuso horário do meu servidor ("Thu Jan 30 16:04:27 EST 2014").

Com o uso de grep e cut, extraí a data em GMT de um arquivo. No entanto, estou lutando para converter isso em meu horário local.

Por exemplo:

[log do usuário @ servidor] # grep "alguma coisa" logfile.txt | grep "sucedeu" | corte -f1 -d '['

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

O que posso adicionar no final para passar essa saída para "date -d"?

Tentativa:

  • [log do usuário @ servidor] # grep "alguma coisa" logfile.txt | grep "sucedeu" | corte -f1 -d '[' | data -d
  • [log do usuário @ servidor] # grep "alguma coisa" logfile.txt | grep "sucedeu" | corte -f1 -d '[' | data
  • [log do usuário @ servidor] # grep "alguma coisa" logfile.txt | grep "sucedeu" | corte -f1 -d '[' | date -d "$ 1"
por Shane Smith 04.02.2014 / 02:23

2 respostas

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

Ou, se você preferir o formato de pipeline:

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

O problema é que date não usa stdin. Assim, temos que capturar o stdin em uma variável (chamada gmt here) e então fornecer isso na linha de comando para date .

Exemplo de saída da segunda abordagem:

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

Se você está usando a data GNU de um coreutils suficientemente recente, há date -f , na tela de ajuda:

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

Então, sua tentativa 4 poderia ter sido:

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

o último - significa stdin.

    
por 13.05.2014 / 08:03