10

У меня есть дата типа «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 | Греп "Успешно" | cut -f1 -d '['

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

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

Покушение:

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

2 ответа2

15

Если вы используете 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.

8
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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .