Как да получа диапазон от часове с помощта на 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 е низ и има интервал в него -- т.е.

$ 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 crontab? - person Kent; 21.03.2016
comment
@RobertJohnMartin -- не знаем как изглеждат вашите файлове, така че е невъзможно да се отговори -- актуализирайте въпроса си, като добавите примери за имената на файловете и примери за съдържанието на файла - person Soren; 21.03.2016