Jak przesłać dane wyjściowe do daty -d „wartość”?

15

Mam datę jak „2014-01-30 05:04:27 GMT”, a jeśli uruchomię date -d „2014-01-30 05:04:27 GMT”, dane wyjściowe znajdują się w strefie czasowej mojego serwera („czw. 30 stycznia 16:04:27 EST 2014 ”).

Za pomocą grep i cut wyodrębniłem datę w GMT z pliku. Jednak staram się przekonwertować to na czas lokalny.

Na przykład:

[użytkownik @ dziennik serwera] # grep „coś” logfile.txt | grep „Udało się” | cut -f1 -d '['

Wyjście: 30.01.2014, 05:04:27 GMT

Co mogę dodać na końcu, aby przekazać ten wynik do „date -d”?

Podjęto próbę:

  • [użytkownik @ dziennik serwera] # grep „coś” logfile.txt | grep „Udało się” | cut -f1 -d '[' | data -d
  • [użytkownik @ dziennik serwera] # grep „coś” logfile.txt | grep „Udało się” | cut -f1 -d '[' | data
  • [użytkownik @ dziennik serwera] # grep „coś” logfile.txt | grep „Udało się” | cut -f1 -d '[' | data -d „1 $”
Shane
źródło

Odpowiedzi:

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

Lub, jeśli wolisz format potoku:

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

Problem polega na tym, dateże nie używa standardowego wejścia. Dlatego musimy przechwycić standardowe wejście do zmiennej (nazywanej gmttutaj), a następnie podać to w wierszu poleceń date.

Przykładowe dane wyjściowe z drugiego podejścia:

$ echo  "2014-01-30 05:04:27 GMT" | { read gmt ; date -d "$gmt" ; }
Wed Jan 29 21:04:27 PST 2014
John1024
źródło
1
Dziękuję, to rozwiązało problem! Dziękujemy również za wyjaśnienie przyczyny niepowodzenia działania.
Shane
20

Jeśli używasz daty GNU z wystarczająco nowego coreutils, date -fna ekranie pomocy jest:

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

Więc twoja próba 4 mogła być:

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

ostatnie -oznacza stdin.

hroptatyr
źródło
2
To powinna być zaakceptowana odpowiedź.
Petrus K.,
Czy można porównać dane wyjściowe powyższego polecenia z określoną datą. Na przykład. Muszę wymienić wszystkie daty starsze niż „śr. 30 stycznia 21:04:27 PST 2014”
Manu
@Manu nie per se, datautils mają dategrepdla tego konkretnego przypadku użycia.
hroptatyr
To o wiele łatwiejsze! Gdybym tylko mógł przeczytać, mógłbym to znaleźć na stronie podręcznika użytkownika.
Ken Sharp