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

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

Re: [shell-script] Transformar um arquivo Sql com Insert Simples em Mult


From: Jonathan Lessa
Subject: Re: [shell-script] Transformar um arquivo Sql com Insert Simples em Multiplos Inserts
Date: Tue, 29 Jan 2013 10:26:30 -0300

A menos que vc separe as inserções das demais instruções, tendo dois
arquivos, um para criação da "estrutura" do seu banco, e outro com a
"alimentação" dele, mas essa história foge um pouco do escopo do grupo.



Em 29 de janeiro de 2013 10:17, Robson Alexandre
<address@hidden>escreveu:

> **
>
>
> Jonathan,
>
> agradeço a dica, mas veja que, apesar de eu não ter colocado o arquivo sql
> completo, não há apenas as linhas com INSERT, tem outras linhas também como
> criação das tabelas, entre outras.
> Daí o sort não ajuda neste caso
>
> Como exemplo deixo um pedaço do arquivo sql que é um dump extraído com o
> Navicat
> http://pastebin.com/UUVBhpsp
>
> A idéia de pegar os "; INSERT INTO....." poderia até ser uma alternativa.
>
> Atenciosamente
> Robson Alexandre
>
> Em 29 de janeiro de 2013 10:44, Jonathan Lessa
> address@hidden>escreveu:
>
>
> > Não sei se é a melhor forma, em termos de performance, mas segue meu
> pitaco
> > de ajuda, obs. serve para arquivos com inserts em diversas tabelas:
> >
> > [jonathan@cedro jonathan]$ cat insert.sql
> > 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_fechado` 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_fechado` VALUES ('00000000004', '00000001124',
> > 'cec2d7e.pdf', 'Mensagem Oficial 3_2010');
> > INSERT INTO `chamado_anexo` VALUES ('00000000004', '00000001124',
> > 'cec2d7e.pdf', 'Mensagem Oficial 3_2010');
> > INSERT INTO `usuarios` VALUES ('00000000005', '00000001145',
> '3d0b44e.jpg',
> > 'Mensagem de vís - CZS');
> >
> > [jonathan@cedro jonathan]$ for tb in $(grep -o "\`.*\`" insert.sql |
> sort
> > |
> > uniq); do echo $(grep $tb insert.sql)| sed -r "s/; ([0-9a-zA-Z_ \`-]+)/,
> > /g"; done;
> > INSERT INTO `chamado_anexo` VALUES ('00000000001', '00000001088',
> > 'd21cca9.doc', 'AS 035'), ('00000000002', '00000001088', '6ba2964.doc',
> 'AS
> > 036'), ('00000000003', '00000001109', '6f079cd.doc', 'AS 037'),
> > ('00000000002', '00000001088', '6ba2964.doc', 'AS 036'), ('00000000003',
> > '00000001109', '6f079cd.doc', 'AS 037'), ('00000000004', '00000001124',
> > 'cec2d7e.pdf', 'Mensagem Oficial 3_2010');
> > INSERT INTO `chamado_fechado` VALUES ('00000000001', '00000001088',
> > 'd21cca9.doc', 'AS 035'), ('00000000004', '00000001124', 'cec2d7e.pdf',
> > 'Mensagem Oficial 3_2010');
> > INSERT INTO `usuarios` VALUES ('00000000005', '00000001145',
> '3d0b44e.jpg',
> > 'Mensagem de vís - CZS');
> >
> >
> >
> >
> >
> >
> > Em 29 de janeiro de 2013 08:55, Robson Alexandre
> > address@hidden>escreveu:
> >
> > > **
>
> > >
> > >
> > > 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]
> > >
> > >
> > >
> >
> >
> >
> > --
> > Att.:
> > Jonathan Lessa
>
> >
> >
> > [As partes desta mensagem que não continham texto foram removidas]
> >
> >
> >
> > ------------------------------------
>
> >
> > ----------------------------------------------------------
> > Esta lista não admite a abordagem de outras liguagens de programação,
> como
> > perl, C etc. Quem insistir em não seguir esta regra será moderado sem
> > prévio aviso.
> > ----------------------------------------------------------
> > Sair da lista: address@hidden
>
> > ----------------------------------------------------------
> > Esta lista é moderada de acordo com o previsto em
> > http://www.listas-discussao.cjb.net
> > ----------------------------------------------------------
> > Servidor Newsgroup da lista: news.gmane.org
> > Grupo: gmane.org.user-groups.programming.shell.brazil
> >
> > Links do Yahoo! Grupos
>
> >
> >
> >
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>  
>



-- 
Att.:
Jonathan Lessa


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



reply via email to

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