Как я могу передать вывод на дату -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
John1024
источник
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.

hroptatyr
источник
2
Это должен быть принятый ответ.
Петрус К.
Можно ли сравнить вывод вышеуказанной команды с определенной датой. Например. Мне нужно перечислить все даты старше «Ср 30 Янв 21:04:27 PST 2014»
Ману
@Manu не сами по себе dateutils есть dategrepдля этого использования конкретного случая.
Гроптатыр
Это намного проще! Если бы я только мог читать, я бы нашел это на странице руководства.
Кен Шарп