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: Robson Alexandre
Subject: Re: [shell-script] Transformar um arquivo Sql com Insert Simples em Multiplos Inserts
Date: Wed, 30 Jan 2013 22:01:24 -0200

      Somente para encerrar esta thread acabei adotando a dica do Jonathan
e fazendo a conversão de INSERT simples em múltiplos somente retirando os
*;\r\nINSERT INTO tb_blablabla VALUES*
e colocando
*,\r\n* .
      Muitas vezes complicamos demais as coisas e não enxergamos as
soluções mais simples.

*sed -i -r ":a;N;$ ! ba;s/;\r\nINSERT INTO [^V]*VALUES/,\r\n/g" $arquivoSql*

Atenciosamente

Robson Alexandre


Em 29 de janeiro de 2013 11:26, Jonathan Lessa
<address@hidden>escreveu:

> 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]
>
>
>
> ------------------------------------
>
> ---------------------------------------------------------------------
> 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]



reply via email to

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