Как я могу отфильтровать журнал только для строк в два раза?

Я работаю в Unix.

Я хотел бы получить информацию из журнала в указанном временном диапазоне для текущей даты. Например, я хочу, чтобы данные из файла журнала с сегодняшней даты были с 00:00 до 09:00.

Пример записи в журнале:

13/10/16 14:45:02 <batchspeedchange> <BELLBD.BD77350A.G6987V00> <> FAILED FILE FORMAT VALIDATION - ERROR:-213:rawData cannot contain tokens 

Как получить выход из такого файла журнала?

  • Тестирование, если процесс выполняется через if и -z
  • как позволить bash читать «нажатую клавишу» во время нажатия не после нажатия ENTER
  • добавление пути к файлу в файлы
  • Программа BASH для удаления файлов, ожидаемое выражение Integer
  • Как выйти из su-ed root в определенное время
  • лучший способ получить memfree из / proc и преобразовать в десятичный
  • BASH getopts OPTARG undefined
  • Как автоматизировать отображение курсора под подсказкой на оболочке
  • 2 Solutions collect form web for “Как я могу отфильтровать журнал только для строк в два раза?”

    Предполагая, что даты выглядят как «HH: MM», как вы показывали, и если предположить, что дата отображается во втором поле, вы можете использовать awk:

     awk -v start=00:00 -v stop=09:00 'start <= $2 && $2 < stop' file.log 

    [rant] Я довольно подробно отношусь к форматированию даты, и это ужасно: какая дата «09/10/11»? [/ Напыщенная]

    В любом случае, предполагая, что это «YY / MM / DD»,

     awk -v date="$(date +%y/%m/%d)" \ -v start=00:00:00 \ -v stop=09:00:00 \ -v search="File format not found" \ '$1 == date && start <= $2 && $2 < stop && $0 ~ search' file.log 

    Предполагая, что строки в файле журнала находятся в хронологическом порядке и что в 00:00 и 00:09 есть событие:

    awk '/^13\/10\/16 00:00/,/^13\/10\/16 09:00/ {print}' file.log

    Я считаю, что это легко запомнить и отличное средство при исследовании журналов. Эти предположения слишком широки для использования в производстве.

    Linux и Unix - лучшая ОС в мире.