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.