Как получить диапазон часов с помощью awk?

Я хочу извлекать данные с интервалом в 1 час в свой файл журнала. Вот мои переменные:

date_file=date +"%Y-%m-%d %H" date_minus_one=date -d "-1 hour" +"%Y-%m-%d %H" date_minus_two=date -d "-2 hour" +"%Y-%m-%d %H"

Вот мой синтаксис в awk, но он всегда печатает все данные.

awk '$date_file >= $date_minus_one && $date_file <= $date_minus_two' <filename>

Я также использовал grep для получения интервала в 1 час, но это не сработало.

Вот пример данных, которые я хочу извлечь за час:

2016-03-30|00:54:46,060|[WARNING]
2016-03-30|00:55:46,318|[OK]
2016-03-30|00:55:46,318|[OK]
2016-03-30|02:42:13,691|[UNKNOWN]
2016-03-30|07:53:16,356|[CRITICAL]
2016-03-30|08:56:41,410|[WARNING]

person Robert John Martin    schedule 21.03.2016    source источник


Ответы (1)


Вывод из даты представляет собой строку и имеет пробел в ней - т.е.

$ date -d "-2 hour" +"%Y-%m-%d %H"
2016-03-20 18

Поэтому его нужно закавычить, чтобы иметь возможность сравнить его с чем-то в файле.

awk '"$date_file" >= "$date_minus_one" && "$date_file" <= "$date_minus_two"'

Это решило бы часть проблемы, НО в соответствии с вашим описанием $date_file, $date_minus_one и т. д. являются константами, поэтому ничего не изменится во время выполнения, и выражение либо всегда будет истинно или всегда ложно.

person Soren    schedule 21.03.2016
comment
Что я могу сделать, чтобы это всегда было правдой? Чтобы я мог получать данные за час с моим файлом. - person Robert John Martin; 21.03.2016
comment
@RobertJohnMartin кронтаб? - person Kent; 21.03.2016
comment
@RobertJohnMartin - мы не знаем, как выглядят ваши файлы, поэтому ответить невозможно - обновите свой вопрос, добавив примеры имен файлов и примеры содержимого файлов. - person Soren; 21.03.2016