Форум русскоязычного сообщества Ubuntu


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

Автор Тема: выбрать записи из лога за определенный период времени  (Прочитано 3550 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн mouserok

  • Автор темы
  • Активист
  • *
  • Сообщений: 326
    • Просмотр профиля
добрый день
такой вопрос
как выбрать записи из лога за определенный период времени

есть лог
127.0.0.1 0.005 [09/Jan/2014:09:29:25 +0200] "POST
127.0.0.1 0.005 [09/Jan/2014:10:54:12 +0200] "POST
127.0.0.1 0.005 [09/Jan/2014:11:21:22 +0200] "POST
127.0.0.1 0.005 [09/Jan/2014:11:32:45 +0200] "POST
127.0.0.1 0.007 [09/Jan/2014:12:21:54 +0200] "POST

как выбрать записи с
09/Jan/2014:10:54:12
по
09/Jan/2014:11:32:45

Оффлайн Scorry

  • Активист
  • *
  • Сообщений: 842
    • Просмотр профиля
Extract data from log file in specified range of time
Ну и по такой текстовой строке поиск. Регэкспы, греп вот это всё.

Оффлайн Freezeman

  • Активист
  • *
  • Сообщений: 637
  • Xubuntu 14.04.2 LTS :: SSD Kingston HyperX Fury
    • Просмотр профиля
Что-то типа такого, но там могут быть проблемы с двоеточием:
cat ./blabla.log | egrep -i "09\/Jan\/2014:(10:5|11:[0123])"

Оффлайн mouserok

  • Автор темы
  • Активист
  • *
  • Сообщений: 326
    • Просмотр профиля
можно пример ??
должен был выбрать с 10:00 до 11:59, а на деле выбрал ВСЁ  :-\
grep "09/Jan/2014:[10-11]"

Оффлайн Freezeman

  • Активист
  • *
  • Сообщений: 637
  • Xubuntu 14.04.2 LTS :: SSD Kingston HyperX Fury
    • Просмотр профиля
Код: (bash) [Выделить]
--> cat ./testlog.log | egrep "09\/Jan\/2014:(10|11)"
127.0.0.1 0.005 [09/Jan/2014:10:54:12 +0200] "POST
127.0.0.1 0.005 [09/Jan/2014:11:21:22 +0200] "POST
127.0.0.1 0.005 [09/Jan/2014:11:32:45 +0200] "POST

Оффлайн mouserok

  • Автор темы
  • Активист
  • *
  • Сообщений: 326
    • Просмотр профиля
в данном случае прийдется перебирать все числа

ситуация бывает не предсказуема и лог может вырасти больших размеров
по этому, есть необходимость в указании периода до 1 секунды

как выбрать записи с
09/Jan/2014:10:54:12
по
09/Jan/2014:11:32:45

Оффлайн Freezeman

  • Активист
  • *
  • Сообщений: 637
  • Xubuntu 14.04.2 LTS :: SSD Kingston HyperX Fury
    • Просмотр профиля
Рег.выражения в Википедии

Если кратко:
1) круглые скобочки определяют группу (как в математике)
2) верт. черта -- или
3) в квадратных скобочках указывается диапазон или тупо перечисление
4) некоторые символы в тексте надо экранировать: круглые, фигурные и квадратные скобки, прямой и обратный слэши, точку, иногда тире
5) в фигурных скобках указывается количество символов
6) grep вроде не понимает спецсимволов \d -- используйте симв.классы POSIX (в статье есть табличка-картинка)
остальное все есть в статье

Пользователь решил продолжить мысль 09 Января 2014, 20:15:27:
Самое важное: регулярные выражения работают с символами, т.е. 12 -- это 1 и 2.

Пользователь решил продолжить мысль 09 Января 2014, 20:18:36:
Код: (bash) [Выделить]
--> cat ./testlog.log | grep "09\/Jan\/2014\:1[01]"
127.0.0.1 0.005 [09/Jan/2014:10:54:12 +0200] "POST"
127.0.0.1 0.005 [09/Jan/2014:11:21:22 +0200] "POST"
127.0.0.1 0.005 [09/Jan/2014:11:32:45 +0200] "POST"

--> cat ./testlog.log | grep -E "09\/Jan\/2014:11:[1-9]{2}"
127.0.0.1 0.005 [09/Jan/2014:11:21:22 +0200] "POST"
127.0.0.1 0.005 [09/Jan/2014:11:32:45 +0200] "POST"

--> cat ./testlog.log | grep -E "^[^A-Za-z]+\s\[09\/[A-Za-z]+\/2014:[0-9]{2}:[0-9]{2}"
127.0.0.1 0.005 [09/Jan/2014:09:29:25 +0200] "POST"
127.0.0.1 0.005 [09/Jan/2014:10:54:12 +0200] "POST"
127.0.0.1 0.005 [09/Jan/2014:11:21:22 +0200] "POST"
127.0.0.1 0.005 [09/Jan/2014:11:32:45 +0200] "POST"
127.0.0.1 0.007 [09/Jan/2014:12:21:54 +0200] "POST"

« Последнее редактирование: 09 Января 2014, 20:22:03 от Freezeman »

Оффлайн mouserok

  • Автор темы
  • Активист
  • *
  • Сообщений: 326
    • Просмотр профиля
спасибо за столь емкий ответ
НО

cat 1.txt | grep -E "^[^A-Za-z]+\s\[09\/[A-Za-z]+\/2014:[01]{2}:[0-9]{2}"
выберет не только за 10 часов, но и за 01 и 11

1.txt
127.0.0.1 0.005 [09/Jan/2014:01:21:22 +0200] "POST"
127.0.0.1 0.005 [09/Jan/2014:09:29:25 +0200] "POST"
127.0.0.1 0.005 [09/Jan/2014:10:54:12 +0200] "POST"
127.0.0.1 0.005 [09/Jan/2014:11:21:22 +0200] "POST"
127.0.0.1 0.005 [09/Jan/2014:11:32:45 +0200] "POST"
127.0.0.1 0.007 [09/Jan/2014:12:21:54 +0200] "POST"


вот что получим  :-\
127.0.0.1 0.005 [09/Jan/2014:01:21:22 +0200] "POST"
127.0.0.1 0.005 [09/Jan/2014:10:54:12 +0200] "POST"
127.0.0.1 0.005 [09/Jan/2014:11:21:22 +0200] "POST"
127.0.0.1 0.005 [09/Jan/2014:11:32:45 +0200] "POST"

Оффлайн Freezeman

  • Активист
  • *
  • Сообщений: 637
  • Xubuntu 14.04.2 LTS :: SSD Kingston HyperX Fury
    • Просмотр профиля
mouserok,
Ну так оставьте только десятку:
Код: (bash) [Выделить]
--> cat ./testlog.log | grep "09\/Jan\/2014\:10"Помните, я писал про то, что регулярки работают с символами? У вас в логе, где 10 часов, после первого двоеточия идет единица, а затем ноль (этого достаточно).

Оффлайн mouserok

  • Автор темы
  • Активист
  • *
  • Сообщений: 326
    • Просмотр профиля
эмм ... формирование даты выходит сложным чтоб учесть все погрешности :(

тут бы sh файл c параметрами(начало и конец дат) запустить чтоб получить нужный резалт

Пользователь решил продолжить мысль 11 Января 2014, 12:45:29:
вот ответ на мой вопрос

sed -n '/2014:10:01:/ , /2014:10:11:/p' file.log
Пользователь решил продолжить мысль 11 Января 2014, 13:13:12:
а вот awk


awk '/11\/Jan\/2014:10:01:/, /11\/Jan\/2014:10:11:/' file.log
« Последнее редактирование: 11 Января 2014, 13:13:12 от mouserok »

Оффлайн Freezeman

  • Активист
  • *
  • Сообщений: 637
  • Xubuntu 14.04.2 LTS :: SSD Kingston HyperX Fury
    • Просмотр профиля
mouserok,
Ну так всё равно регулярки, но для поиска по дате возможно и удобней.

 

Страница сгенерирована за 0.02 секунд. Запросов: 21.