Поиск журналов в UNIX между датами "До" и "ОТ" в сценарии
У меня есть скрипт, который ищет каталог журналов с помощью команды grep, ниже приведена команда.
export CMD="grep -ie '.*${RUN_DATE}.*${MESSAGE_TO_SEARCH}' ${LOG_FILE_PATH}/${LOG_FILE} | awk -F 'addInfo' '{print \$2;}' | sed '/^$/d'"
Теперь RUN_DATE - это любая дата запуска скрипта.
MESSAGE_TO_SEARCH - это любое сообщение, которое мы ищем в файле журнала.
Он объявляется перед запуском скрипта.
Я хочу изменить скрипт, который он ищет между TO и FROM, например:
FROM_TIME = 2016-08-28 13:30:00 и
TO_TIME=2016-08-29 17:00:00
Так что скрипт должен выдавать логи, которые лежат только за это время.
Я попробовал следующее, используя проходные даты в качестве регулярного выражения, но это не сработало.
export CMD="grep -ie '.*[${FROM_DATE}-${TO_DATE}].*${MESSAGE_TO_SEARCH}' ${LOG_FILE_PATH}/${LOG_FILE} | awk -F 'addInfo' '{print \$2;}' | sed '/^$/d'"
Пожалуйста, предложите правильный метод. Спасибо
EDIT1: Пожалуйста, скажите мне, как я могу это сделать, если регулярное выражение не подходит для этого.
1 ответ
Если вы просто хотите выбрать строки из файла журнала, есть другой способ с некоторыми простыми командами, но более читаемый.
1. Получите номера строк первой и последней строки.
# SN for start line number, EN for end line number.
export SN=`cat -n LOG_FILE | grep START_TIME | head -1 | awk '{print $1}'`
export EN=`cat -n LOG_FILE | grep END_TIME | tail -1 | awk '{print $1}'`
2. Получите строки, которые вы хотите.
head -$EN LOG_FILE | tail -$(($EN-$SN+1))
Как только мы узнаем номер нужной нам линии, мы можем использовать голову и хвост, чтобы отрезать часть, которая нам не нужна. ^_^