Come posso inviare l'output alla data -d "valore"?


14

Ho una data come "2014-01-30 05:04:27 GMT" e se eseguo date -d "2014-01-30 05:04:27 GMT", l'output è nel fuso orario del mio server ("Thu 30 gen 16:04:27 EST 2014 ").

Con l'uso di grep e cut, ho estratto la data in GMT da un file. Tuttavia, faccio fatica a convertirlo nella mia ora locale.

Per esempio:

[user @ server log] # grep "qualcosa" logfile.txt | grep "Riuscito" | cut -f1 -d '['

Uscita: 30/01/2014 05:04:27 GMT

Cosa posso aggiungere alla fine, per passare l'output a "date -d"?

Tentato:

  • [user @ server log] # grep "qualcosa" logfile.txt | grep "Riuscito" | cut -f1 -d '[' | data -d
  • [user @ server log] # grep "qualcosa" logfile.txt | grep "Riuscito" | cut -f1 -d '[' | Data
  • [user @ server log] # grep "qualcosa" logfile.txt | grep "Riuscito" | cut -f1 -d '[' | data -d "$ 1"

Risposte:


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

Oppure, se si preferisce il formato della pipeline:

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

Il problema è che datenon usa stdin. Quindi, dobbiamo catturare lo stdin in una variabile (chiamata gmtqui) e quindi fornirlo sulla riga di comando a date.

Esempio di output del secondo approccio:

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

1
Grazie, questo ha risolto il problema! Apprezzo anche che tu abbia spiegato il motivo per cui non funzionava.
Shane,

19

Se stai usando la data GNU da un coreutils sufficientemente recente, c'è date -f, dalla schermata di aiuto:

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

Quindi il tuo tentativo 4 avrebbe potuto essere:

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

l'ultimo -sta per stdin.


2
Questa dovrebbe essere la risposta accettata.
Petrus K.,

È possibile confrontare l'output del comando sopra con una data particolare. Per esempio. Devo elencare tutte le date più vecchie di "Mer 30 gennaio 21:04:27 PST 2014"
Manu

@Manu non di per sé, dateutils hanno dategrepper quel caso d'uso specifico.
hroptatyr,

Questo è molto più facile! Se solo potessi leggere, avrei potuto trovarlo nella sua pagina man.
Ken Sharp,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.