фильтровать файл журнала, определяя регулярные выражения - PullRequest
4 голосов
/ 17 марта 2010

У меня есть ОГРОМНЫЕ файлы журнала (50 МБ; ~ 500 КБ строк), мне нужно начать отфильтровывать некоторые из дерьма. Файлы журналов создаются с использованием log4j и имеют базовый шаблон:

[log-level] date-time class etc, etc  
log-message  

Я ищу способ, с помощью которого я могу определить начало и конец регулярного выражения (или что-то подобное), чтобы отфильтровать совпадающие записи из файла, чтобы мне было легче проходить через эти массивные файлы. Я думаю, что начальное регулярное выражение будет на уровне журнала, а конечное регулярное выражение будет что-то в сообщении журнала. Я уверен, что мог бы написать Java-программу для выполнения этой задачи, но я решил спросить сообщество, прежде чем идти по этому пути. Заранее спасибо.


Позвольте мне расширить мой вопрос. Предположим, у меня есть следующий фрагмент в файле журнала:

[DEBUG] date-time class etc, etc  
log-message-1

[WARN] date-time class etc, etc  
log-message-2

[DEBUG] date-time class etc, etc  
log-message-3

[DEBUG] date-time class etc, etc  
log-message-1

[WARN] date-time class etc, etc  
log-message-2

[DEBUG] date-time class etc, etc  
log-message-6

Я бы хотел отфильтровать logEntry1 и logEntry2, чтобы я получил:

[DEBUG] date-time class etc, etc  
log-message-3

[DEBUG] date-time class etc, etc  
log-message-6

Я бы надеялся добиться этого, определив несколько наборов пар шаблонов регулярных выражений. В моем примере выше я хотел бы определить пару для logEntry1 и другую для logEntry2.

Надеюсь, это поможет прояснить мой вопрос.

Ответы [ 3 ]

4 голосов
/ 18 марта 2010

Предполагая log-message-1 и log-message-2 и уникальные шаблоны.

$ awk -vRS= '!/log-message-[12]/' ORS="\n\n" file
[DEBUG] date-time class etc, etc
log-message-3

[DEBUG] date-time class etc, etc
log-message-6
1 голос
/ 17 марта 2010
(zyx:~) % echo $T
[DEBUG] date-time class etc, etc  
log-message-1

[WARN] date-time class etc, etc  
log-message-2

[DEBUG] date-time class etc, etc  
log-message-3

[DEBUG] date-time class etc, etc  
log-message-1

[WARN] date-time class etc, etc  
log-message-2

[DEBUG] date-time class etc, etc  
log-message-6
(zyx:~) % echo $T | perl -e '$_=join("", <>); s/\[DEBUG\][^\n]*\n(log-message-1|log-message-2).*?(?=\n\[(DEBUG|WARN)\]|$)//sg; s/\[WARN\].*?(?=\n\[(DEBUG|WARN)\]|$)//sg; print;'


[DEBUG] date-time class etc, etc  
log-message-3



[DEBUG] date-time class etc, etc  
log-message-6
0 голосов
/ 17 марта 2010

Используйте awk или однострочные символы perl в стиле awk.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...