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

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

Transformar um arquivo Sql com Insert Simples em Multiplos Inserts


From: Robson Alexandre
Subject: Transformar um arquivo Sql com Insert Simples em Multiplos Inserts
Date: Tue, 29 Jan 2013 09:55:33 -0200

Bom Dia prezados colegas,

Criei um script para realizar a rotina de converter um arquivo sql com
Inserts simples,
p.e.
INSERT INTO `chamado_anexo` VALUES ('00000000001', '00000001088',
'd21cca9.doc', 'AS 035');
INSERT INTO `chamado_anexo` VALUES ('00000000002', '00000001088',
'6ba2964.doc', 'AS 036');
INSERT INTO `chamado_anexo` VALUES ('00000000003', '00000001109',
'6f079cd.doc', 'AS 037');
INSERT INTO `chamado_anexo` VALUES ('00000000004', '00000001124',
'cec2d7e.pdf', 'Mensagem Oficial 3_2010');
INSERT INTO `chamado_anexo` VALUES ('00000000005', '00000001145',
'3d0b44e.jpg', 'Mensagem de vírus - CZS');

em um arquivo sql com multiplos inserts
p.e.
INSERT INTO `chamado_anexo` VALUES ('00000000001', '00000001088',
'd21cca9.doc', 'AS 035'),
('00000000002', '00000001088', '6ba2964.doc', 'AS 036'),
('00000000003', '00000001109', '6f079cd.doc', 'AS 037'),
('00000000004', '00000001124', 'cec2d7e.pdf', 'Mensagem Oficial 3_2010'),
('00000000005', '00000001145', '3d0b44e.jpg', 'Mensagem de vírus - CZS');

Então fiz o seguinte script

#!/bin/bash
arqSql=$HOME/Projetos/scripts/sql/simples.sql
tmpSql=$(mktemp)
sed 's/`//g' $arqSql > $tmpSql
while read num insert
do
if [ "$num" -gt 1 ]
then
sed -i ":a;N;$ ! ba;s/$insert/###STRING###/1" $tmpSql
sed -i ":a;N;$ ! ba;s/;\r\n$insert/,\r\n/g" $tmpSql
sed -i "s/###STRING###/$insert/" $tmpSql
fi
done < <(awk '{print $1,$2,$3,$4}' $tmpSql | uniq -c)

Só que está demasiadamente lento, visto que o arquivo possui mais de 600K
linhas.
Os senhores conhecem alguma ferramenta que faça essa função ou uma maneira
de melhorar o desempenho do script?

O algoritmo que estou utilizando é pegar as linhas com mais de 1
INSERT INTO tb_blablabla VALUES
substituir a primeira por uma string padrão
substituir todas as outras por " , "
e substituir a string padrao novamente pelo INSERT INTO tb_blabla VALUES.

Pensei em sei lá, montar um arquivo .sed com todas as substituições e rodar
o sed uma única vez..
Alguém tem alguma dica?



Atenciosamente

Robson Alexandre


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



reply via email to

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