Любой модуль Perl для повторного поиска и извлечения содержимого файла? - PullRequest
1 голос
/ 14 ноября 2011

Мне нужно проанализировать некоторые файлы журналов, в которых данные повторяются по определенному шаблону. Мне нужно найти конкретные «ключевые слова» в данных, а затем извлечь данные из следующих строк. Мне нужно продолжить это для всего файла. Я знаю, что это можно сделать с помощью базовых сценариев Perl. Но есть ли у нас какой-либо модуль perl, который упрощает такую ​​функцию?

Ответы [ 3 ]

1 голос
/ 14 ноября 2011

Вероятно, такого модуля нет, потому что код довольно тривиален, и OTOH детали довольно специфичны для проблемы .

У меня была подобная проблема много раз. Ввод был что-то вроде:

Date: 2011-11-10
<an interesting line>
<another interesting line>
Date: 2011-11-11
<more interesting lines>

И мне нужно было извлечь все "интересные строки", зная дату каждой. Я думаю, что единственные или короткие одноразовые сценарии были очень успешными для этой цели. С oneliners, хорошо быть знакомым с такими полезными вещами, как -l и -a. perl -wlane '...' это то, что я написал тысячу раз.

0 голосов
/ 02 января 2012

Спасибо, что предложили другие варианты.На самом деле я обнаружил, что использование оператора триггера с «если» решает мою проблему очень удачно.И после использования только этого я понял, что просить «модуль» для такой тривиальной задачи, как это, слишком много с моей стороны

0 голосов
/ 14 ноября 2011

Вы можете взглянуть на cgrep, который является примером именно этого типа обработки.Его можно использовать в конвейере, то есть

cat mylog | cgrep -w0:1 'regexp' | grep -v 'regexp' | sed 's/.../.../'

Другими словами, grep для регулярного выражения, выводит 0 строк перед совпадением и одну после, затем удаляет исходные совпадения и форматирует результат.Возможно, вы не захотите использовать sed для последнего шага, это всего лишь пример.

cgrep появляется в самых ранних выпусках книги Программирование на Perl (верблюд). Найти довольно просто .

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