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 $”

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

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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.