Як я можу вивести на поточне значення "d" дату?


15

У мене є дата на кшталт "2014-01-30 05:04:27 GMT", а якщо я запускаю дату -d "30.01.2014 05:04:27 GMT", вихід є у часовому поясі мого сервера ("Чт 30 січня 16:04:27 EST 2014 ").

Використовуючи grep і cut, я витягнув дату в GMT з файлу. Однак я намагаюся потім перетворити це на мій місцевий час.

Наприклад:

[user @ server log] # grep "щось" logfile.txt | grep "Успіх" | вирізати -f1 -d '['

Вихід: 2014-01-30 05:04:27 GMT

Що я можу додати наприкінці, щоб передати цей вихід у "date -d"?

Спроба:

  • [user @ server log] # grep "щось" logfile.txt | grep "Успіх" | вирізати -f1 -d '[' | дата -d
  • [user @ server log] # grep "щось" logfile.txt | grep "Успіх" | вирізати -f1 -d '[' | дата
  • [user @ server log] # grep "щось" logfile.txt | grep "Успіх" | вирізати -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
Дякую, це вирішило проблему! Також вдячний, що ви пояснили причину, чому це не спрацювало.
Шейн

20

Якщо ви використовуєте дату GNU з досить недавніх основних програм, 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 не сама по собі, дата-утиліти є dategrepдля цього конкретного випадку використання.
hroptatyr

Це набагато простіше! Якби тільки я міг прочитати, я міг би знайти це на сторінці man man.
Кен Шарп
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.