сложная труба с grep - PullRequest
       9

сложная труба с grep

0 голосов
/ 26 апреля 2020

Я уверен, что есть много способов сделать это в сценариях. Но у меня есть очень конкретный c сценарий использования, в котором мне нужно сделать это так, как я делаю.

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

grep '<opening-tag>' -n ~/.dir/27-6-2019.xml | grep -Eo '^[^:]+'

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

И затем я запускаю эту команду, чтобы получить содержимое xml в файле ( в контексте сценария):

awk 'NR >= $startingIndex && NR <= ($closingIndex - 1) path-to-file

Еще раз, это прекрасно работает.

Но то, чего я хочу достичь, это что-то вроде следующего:

grep '<open-tag>' -n ~/.dir/27-6-2019.xml | $STAT_INDEX=$(grep -Eo '^[^:]+') | if [$LAST_LINE]; awk 'NR >= $STAT_INDEX && NR <= ($LAST_LINE - 1) path-to-file > "dir/$STAT_INDEX.xml" | LAST_LINE=$STAT_INDEX

Таким образом, в основном, когда я выполняю команду grep и pipe, проверим, создал ли я var $ last_line var, а затем извлекла xml obj и сохранила его в другом файле. Причина, по которой мне нужна последняя строка, заключается в том, что при первом запуске я не знаю следующий начальный индекс нового объекта и т. Д. c.

Я не уверен, что это даже возможно. Но я стараюсь изо всех сил, чтобы сделать это в один слой.

Спасибо

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

---------- grep logi c - - - - - - - - - - - -

Получаются все открытые метки

grep '<open-tag>' -n ~/.dir/27-6-2019.xml

Труба

Пример клапана: 12343:

$STAT_INDEX=$(grep -Eo '^[^:]+') 

Установите переменную для доступа к остальной части процесса pipe

Pipe

Затем проверьте, установлена ​​ли переменная, называемая последней строкой, и если да, выполните эту команду для получения xml obj из файла thr и сохраните его в своем собственном файле

if [$LAST_LINE]; awk 'NR >= $STAT_INDEX && NR <= ($LAST_LINE - 1) path-to-file > "dir/$STAT_INDEX.xml"

Pipe Сохранить последнюю строку для следующего процесса grep для обработки

LAST_LINE=$STAT_INDEX

1 Ответ

1 голос
/ 26 апреля 2020

Не используйте grep, sed, awk для обработки файла XML. Используйте XML парсер. Опубликуйте сокращенную версию файла XML, чтобы получить более разумные ответы.

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