shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] Programa em AWK para inserir tags em arquivo XML


From: Tiago Peczenyj
Subject: Re: [shell-script] Programa em AWK para inserir tags em arquivo XML
Date: Thu, 28 Mar 2013 07:09:36 -0300

Ola. Use algo que trate xml como xml, ou seja, uma estrutura de dados.

Se o schema for fixo, trate o xml como texto formatado: use um xmllint
--format antes de editar com awk ou sed.
Em 28/03/2013 07:05, "Wilton" <address@hidden> escreveu:

> **
>
>
> Ola, pessoal, boa noite.
> Estou com um problema para resolver, que acredito ser bem desafiador.
> Gostaria de um auxílio. Eu tenho que editar um extenso arquivo em XML
> incluindo tags em alguns registros, que vou chamar de arquivo principal.Um
> exemplo deste arquivo eu postei no pastebin (http://pastebin.com/KnY2rj1E)
> para melhor visualização.
> O que devo fazer é inserir algumas operações(tag Op) abaixo de alguns
> clientes(tag Cli). São muitas operações e muitos clientes.
> Eu já tenho, em formato xml, as tags de clientes e operações que devo
> incluir no arquivo principal.
> A primeira ideia que tive foi criar um programa em awk que vai percorrendo
> cada linha do arquivo principal imprimindo em outro arquivo, que chamarei
> de arquivo final. Quando passasse por uma tag de cliente em que deve ser
> inserida alguma operação, o programa imprimia a tag Cli e após imprimia o
> conteúdo do outro arquivo que contém as operações que devem ser incluídas
> para esse cliente. Nesse caso haveria um arquivo para cada cliente. Depois
> de incluídas essas operações, o programa continuaria a imprimir as demais
> linhas até encontrar outro cliente na mesma situação e realizar o
> procedimento novamente até o final do arquivo principal.
> O problema é que não sei como, ou se é possível, comandar no awk para
> inserir o conteúdo de outro arquivo (que não seja o que ele está
> percorrendo, no caso, o arquivo principal) para o arquivo final. Como se
> fosse possível fazer um "cat ArquivoComOperacaoParaIncluir.xml >>
> ArquivoFinal.xml".
> Até consegui implantar a ideia em Shel-Script, mas ficou muito lento:
> # AdicionaTagOp.sh
> # Programa para adicionar tags Operação abaixo de tags Clientes
>
> ArquivoPrincipal=$1
>
> cat $ArquivoPrincipal | while read LINHA #Para ir passando por cada linha
> do arquivo principal, inserindo o conteúdo da linha na variável LINHA.
> do
> if echo $LINHA | grep '<Cli' > /dev/null
> then
> #A tag Cli já é adicionada no arquivo final
> echo $LINHA >> arqFinal.xml;
>
> #Cada arquivo com as operações adicionais teriam o nome igual à tag Cd do
> cliente. O comando "egrep -o" faria o papel de extrair o conteudo da tag.
> arqComOpAdic=`echo $LINHA | egrep -o 'Cd="[0-9]+"' | egrep -o '[0-9]+'`;
>
> #Caso o arquivo com as operações a serem adicionadas exista, o conteúdo do
> arquivo será adicionado no arquivo final. Caso não, o comado cat vai dar
> erro que será direcionado para a pasta /dev/null. Essa parte que não sei
> como fazer usando o AWK.
> cat $arqComOpAdic 2> /dev/null >> arqFinal.xml;
> else
> #As outras tags vão sendo adicionadas no arquivo final.
> echo $LINHA >> arqFinal.xml;
> fi
> done
>
> (Fica melhor de visualizar no pastebin: http://pastebin.com/dirQ4JV7).
>
> É isso, pessoal. Agradeço por qualquer sugestão. Acredito que se for
> possível implementar no AWK seria muito mais rápido.
>
>  
>


[As partes desta mensagem que não continham texto foram removidas]



reply via email to

[Prev in Thread] Current Thread [Next in Thread]