Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 18, 2013 13:36:44

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

Поиск по шаблону в очень большом файле

Master_Sergius
Что за чит?

C:\>systeminfo
Имя узла:                         2008
Название ОС:                      Microsoft Windows Server 2008 R2 Standard
Версия ОС:                        6.1.7600 Н/Д сборка 7600
Изготовитель ОС:                  Microsoft Corporation



Офлайн

#2 Ноя. 18, 2013 13:39:24

Master_Sergius
Зарегистрирован: 2013-09-12
Сообщения: 271
Репутация: +  7  -
Профиль   Отправить e-mail  

Поиск по шаблону в очень большом файле

Но ведь на винде нету утилит типа cat и grep, это установленный какой-то пакет а-ля набор линуксовых утилит?

Хм… кажется, мне удалось найти то, что нужно, это есмь либа mmap, надо познакомиться поближе…



———————————————————————————
Мой блог о семействе *nix: http://nixtravelling.blogspot.com/

Отредактировано Master_Sergius (Ноя. 18, 2013 13:41:00)

Офлайн

#3 Ноя. 18, 2013 13:45:36

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

Поиск по шаблону в очень большом файле

Master_Sergius
Но ведь на винде нету утилит типа cat и grep, это установленный какой-то пакет а-ля набор линуксовых утилит?

Какая тебе разница нативные они или нет? Главное это показывает, что их достать можно.
А вообще, я ничего не ставил на эту машину, скорее всего изначально есть в этой версии

В инете пишут, что в винде есть findstr - подобие grep



Отредактировано Budulianin (Ноя. 18, 2013 13:47:44)

Офлайн

#4 Ноя. 18, 2013 13:52:26

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9873
Репутация: +  853  -
Профиль   Отправить e-mail  

Поиск по шаблону в очень большом файле

Master_Sergius
Использовать grep хотелось бы
Master_Sergius
Читать построчно - тоже не идёт, ибо регулярки всякие бывают - может быть такой шаблон, что совпадёт кусок, который состоит из 50 строк, а то и более…
Master_Sergius
Иногда, эти куски могут занимать несколько строк.
grep не может в нескольких строках сразу искать
sed может искать, но у него небольшие буферы, гарантируются 8KiB

Master_Sergius
Что за чит? С линукса монтировать виндовый раздел? Это плохой вариант…
не, ставится msys, а туда grep

Master_Sergius
Есть много разных програм, которые постоянно пишут в логи что-то…
они пишут в разные логи, каждый из которых по 100MiB ?



Офлайн

#5 Ноя. 18, 2013 13:57:48

Master_Sergius
Зарегистрирован: 2013-09-12
Сообщения: 271
Репутация: +  7  -
Профиль   Отправить e-mail  

Поиск по шаблону в очень большом файле

py.user.next
grep не может в нескольких строках сразу искать
Я проверял на таких регулярках типа grep -E “some begin mark(\s|\S)*some end mark” - и находило
возможно, я не так выразился

py.user.next
они пишут в разные логи, каждый из которых по 100MiB ?
Нет, бывают разные случаи. Есть логи по пару килобайт, есть логи по гигу…

—-

Поковырялся с mmap - в общем почти то, что нужно. На 32-х битных архитектурах можно обрабатывать файлы до 4 гб - единственный минус. Но, пока что этого достаточно…



———————————————————————————
Мой блог о семействе *nix: http://nixtravelling.blogspot.com/

Отредактировано Master_Sergius (Ноя. 18, 2013 16:12:50)

Офлайн

#6 Ноя. 18, 2013 19:02:59

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9873
Репутация: +  853  -
Профиль   Отправить e-mail  

Поиск по шаблону в очень большом файле

Master_Sergius
регулярках типа
grep -E "some begin mark(\s|\S)*some end mark"
- и находило
оно ищет в одной строке

1. берёт строку
2. ищет в ней совпадение с регулярным выражением
3. если есть, выводит строку
4. переходит к пункту 1

Master_Sergius
возможно, я не так выразился
не, скорее всего, ты не понимаешь, как работает grep
ей всё равно в каком порядке строки

[guest@localhost ~]$ echo -e "a b c\nb c d"
a b c
b c d
[guest@localhost ~]$ echo -e "a b c\nb c d" | grep -E 'a.+d'
[guest@localhost ~]$



Офлайн

#7 Ноя. 19, 2013 13:37:39

Master_Sergius
Зарегистрирован: 2013-09-12
Сообщения: 271
Репутация: +  7  -
Профиль   Отправить e-mail  

Поиск по шаблону в очень большом файле

Да, действительно. Я нашел ошибку у себя… Фокус был в том, что там превращали файлы в одну строку, а Я повелся )
Что ж… Получается, что то, что мне нужно и есть mmap, пока что тестил на одном продукте - всё работает.
Но если знаете ещё решения, буду рад увидеть их здесь…

Всё-таки нужны подсказки… И это решение не есмь универсальное. Попробовали тестить на разных продуктах, оказалось на freebsd вылазиет еррор:

match = pattern.search(data)
RuntimeError: maximum work per expression/data limit exceeded

На винде и на линухе всё ок. А вот на фришке появляется еррор - но это только когда очень большие файлы, over 1 gb…
Эх, что же делать…



———————————————————————————
Мой блог о семействе *nix: http://nixtravelling.blogspot.com/

Отредактировано Master_Sergius (Ноя. 19, 2013 17:15:51)

Офлайн

#8 Ноя. 19, 2013 18:27:13

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9873
Репутация: +  853  -
Профиль   Отправить e-mail  

Поиск по шаблону в очень большом файле

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



Офлайн

#9 Ноя. 20, 2013 12:34:51

Master_Sergius
Зарегистрирован: 2013-09-12
Сообщения: 271
Репутация: +  7  -
Профиль   Отправить e-mail  

Поиск по шаблону в очень большом файле

Да всё понятно - грубо говоря - есть файлы, и надо убедиться, что там есть совпадения по регулярках.

Но, на всяк случай, вот пожалуйста, пусть будет пример

2013-11-06 08:24:09      1.1.0.14-015               290
2013-11-06 08:24:07 1.1.0.14-014 290
2013-11-06 08:24:06 1.1.0.14-013 290
2013-11-06 08:24:04 1.1.0.14-012 290
2013-11-06 08:24:03 1.1.0.14-011 290
2013-11-06 08:24:01 1.1.0.14-010 290
2013-11-06 08:24:00 1.1.0.14-009 290
2013-11-06 08:23:58 1.1.0.14-008 290
2013-11-06 08:23:57 1.1.0.14-007 290
2013-11-06 08:23:55 1.1.0.14-006 290

И в данном случае, надо убедиться, что в первой колонке - формат даты соответсвует нуждам, тобишь, без регулярки никак. Естественно, этот пример подходит под одну строку.
Но вот, другой кусок (нечто вынужден заменить ХХХ - типа секретная инфа ):

INFO: Run script with options:
XXX
INFO: OK
DEBUG: XXX
INFO: Run script with options:
XXX
INFO: ERROR

Вот здесь надо убедиться, что скрипт с такими-то опциями прошел успешно. А здесь, как видно, оно разбито по строкам. Естественно напрашивается соответсвуюшая регулярка…



———————————————————————————
Мой блог о семействе *nix: http://nixtravelling.blogspot.com/

Офлайн

#10 Ноя. 20, 2013 14:01:46

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

Поиск по шаблону в очень большом файле

Master_Sergius
А здесь, как видно, оно разбито по строкам

А найти закономерность и обрабатывать построчно не можешь что ли ?

Например, если попалась строка INFO: Run script with options:, то следующую обрабатываем, т.к. там дата
Ну или что-то подобное, не знаю, что у тебя там конкретно



Отредактировано Budulianin (Ноя. 20, 2013 14:04:02)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version