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: Tue, 29 Jan 2013 11:17:49 -0200

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]



reply via email to

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