LINUX.ORG.RU

[perl][awk][grep]Чем быстрее парсить логи


0

1

Необходимо парсить постоянно обновляющийся лог и выбирать из него данные по шаблону.
tail -F /var/log/log | perl -nle 'print $1." ".$2 if /(один).{3}(два)/'

Подскажите, пожалуйста, каким способом данные лучше всего, быстрее передавать на другую машину? Может, и получать их можно быстрее?


imho, замеры по ... может time

tn1 ()

>Чем быстрее парсить логи

Assembler.

anonymous ()

Нормальным скриптом на perl'е, python'е или любом другом полноценном скриптовом языке.

Deleted ()

>> Подскажите, пожалуйста, каким способом данные лучше всего, быстрее передавать на другую машину? Может, и получать их можно быстрее?

Рискну предположить, что rsyslog (или syslog-ng) будет лучшим вариантом.

GotF ★★★★★ ()

Пока актуален такой вариант:
tail -F /var/log/log | perl -nle '@a=qx{a.out $1 $2}; print @a if /(один).{3}(два)/'

a.out - программка на C, которая загоняет данные в базу MySQL на удаленной машине.

Важна скорость, есть ли вырианты побыстрее?

tuxin ()
Ответ на: комментарий от tuxin

> a.out - программка на C, которая загоняет данные в базу MySQL на удаленной машине.
> Важна скорость, есть ли вырианты побыстрее?

DBI.

arsi ★★★★★ ()

Запыли простое поделие на С и щастье придет.

Gunnerua ()

Ну, в перле используются НКА для регулярок, а в awk вроде как смешанный тип, в грепе - ДКА. соотвественно самый быстрый греп, потом авк, потом перл. Ну и возможности у них в обратном порядке идут.

Если сможешь использовать греп, то используй его, если нет, то авк.

Но как я понял из примера тебе надо преобразовывать данные? Вроде греп этого совсем не умеет (только поиск), а авк умеет, но там не так удобно как в перле.

OxiD ★★★ ()
Ответ на: комментарий от OxiD

Вообще проще напистаь все сразу на перл - использовать file::Tail + DBI например.

OxiD ★★★ ()

re2c - мощные RE, компилируемые в программу на С. мускулу вздохнуть будет некогда :-)

anymouse ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.