[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.
- Programa em AWK para inserir tags em arquivo XML,
Wilton <=