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

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

Programa em AWK para inserir tags em arquivo XML


From: Wilton
Subject: Programa em AWK para inserir tags em arquivo XML
Date: Thu, 28 Mar 2013 04:01:43 -0000
User-agent: eGroups-EW/0.82

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.




reply via email to

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