Извлечение определенных XML из файла журнала - PullRequest
0 голосов
/ 05 октября 2018

У меня есть большие файлы журналов (около 50 МБ каждый), которые содержат отладочную информацию Java плюс все виды XML-ответов

Вот пример того, что я пытаюсь извлечь из журнала

<envelope>
    <response>
        <ATTR name="uniqueid" value="XYZ_00000-00-00_12345_1"/>
        <ATTR name="status" value="Activated"/>
        <ATTR name="datecreated" value="2018/10/04 09:39:05"/>
    </response>
</envelope>

Мне нужны только те XML-файлы, которые атрибут uniqueid содержит"12345", а атрибут состояния установлен на "Активирован"

С помощью "sed" я могу извлечьвсе конверты, и в настоящее время я использую регулярное выражение, чтобы проверить, существуют ли вышеупомянутые условия внутри него (запустив их все в цикле).

sed -n '/<envelope>/,/<\/envelope>/p' logfile

Что было бы правильным решением для извлечения чегоМне нужно из файла?

Спасибо!

1 Ответ

0 голосов
/ 05 октября 2018

при условии, что ваш xml отформатирован, как показано, это должно работать ...

$ awk '/<envelope>/ {line=$0; p=0; next} 
             line   {line=line ORS $0} 
    /uniqueid/ && $3~/12345/ {p=1}
   /<\/envelope>/ && p {print line}' file

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

с gawk вы можете сделать это вместо этого

$ awk -F'\n' -v RS='</envelope>\n'    \
    '$3~/uniqueid.*12345/ && $4~/status.*Activated/{print $0, RT}' file

будет добавлен дополнительный перевод строки.

...