Как я могу передать вывод на дату -d «значение»?


14

У меня есть дата типа «2014-01-30 05:04:27 GMT», и если я запускаю date -d «2014-01-30 05:04:27 GMT», выходные данные будут в часовом поясе моего сервера («Чт 30 января 16:04:27 EST 2014 ").

С использованием grep и cut я извлек дату в GMT из файла. Однако я изо всех сил пытаюсь затем преобразовать это в мое местное время.

Например:

[user @ server log] # grep "что-то" logfile.txt | grep "Успешно" | cut -f1 -d '['

Выходной: 2014-01-30 05:04:27 GMT

Что я могу добавить в конце, чтобы передать этот вывод в «date -d»?

Покушение:

  • [user @ server log] # grep "что-то" logfile.txt | grep "Успешно" | cut -f1 -d '[' | дата -d
  • [user @ server log] # grep "что-то" logfile.txt | grep "Успешно" | cut -f1 -d '[' | Дата
  • [user @ server log] # grep "что-то" logfile.txt | grep "Успешно" | cut -f1 -d '[' | дата -d "$ 1"

Ответы:


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

Или, если вы предпочитаете формат конвейера:

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

Проблема в том, что dateне использует stdin. Таким образом, мы должны записать stdin в переменную (называемую gmtздесь) и затем передать ее в командной строке date.

Пример вывода из второго подхода:

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

1
Спасибо, это решило проблему! Также спасибо, что объясняете причину, почему это не работает.
Шейн

19

Если вы используете GNU date из достаточно недавнего coreutils, date -fна экране справки есть:

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

Итак, ваша попытка 4 могла бы быть:

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

последний -обозначает stdin.


2
Это должен быть принятый ответ.
Петрус К.

Можно ли сравнить вывод вышеуказанной команды с определенной датой. Например. Мне нужно перечислить все даты старше «Ср 30 Янв 21:04:27 PST 2014»
Ману

@Manu не сами по себе dateutils есть dategrepдля этого использования конкретного случая.
Гроптатыр

Это намного проще! Если бы я только мог читать, я бы нашел это на странице руководства.
Кен Шарп
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.