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

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

Re: [shell-script] Quebrar arquivo em multiplos


From: Julio C. Neves
Subject: Re: [shell-script] Quebrar arquivo em multiplos
Date: Thu, 17 Nov 2011 13:13:19 -0200

Uma solução burra:

# pegando o núm das linhas que têm um desses cmds
Linhas=$(grep -En 'INSERT|SELECT|DELETE|UPDATE' arq.sql | cut -c1 -d:)
Ini=1
for Fim in $Linhas
do
    ((--Fim == 0)) && continue
    sed -n "$Ini,$Fimp" arq.sql > arq$[++x]
    Ini=$Fim
done
Pode ser que precise de alguns ajustes, mas creio ser a menor forma.
Abcs,
Julio
*Quer aprender tudo de Shell em 2 fins de semana?*
*  address@hidden <address@hidden> ou  (21) 8112-9988*
**
*** » **julioneves1      » juliobash*



Em 16 de novembro de 2011 21:00, Robson Alexandre <address@hidden
> escreveu:

> **
>
>
> Marcelo,
>
> tenta isso
>
> for cmd in INSERT SELECT DELETE UPDATE
> do
> sed -n "/${cmd}/{:a;/;/! {N;ba};s/\n/ /g;p}" arq.txt > "${cmd}.txt"
> done
>
> Mas isso não vai resolver a quebra dos nomes dos objetos, pois o sed
> vai pegar tudo entre o comando SELECT, UPDATE, etc e o ; e substituir
> o \n por espaço.
>
> Atenciosamente
>
> Robson Alexandre
>
> Em 16 de novembro de 2011 19:08, Marcelo Loureiro
> <address@hidden> escreveu:
> > Fala Bruno..
> >
> > obrigado pela idéia.
> >
> > Pois é.. o fato de não estar numa única linha era/é um dos meus
> problemas.
> > Pra piorar, as n linhas podem estar quebrando o nome dos objetos do SQL.
> > Por exemplo:
> > INSERT INTO T
> > ABELA VALUES (1)
> > ;
> >
> > Tentei fazer um while simples (sem awk ainda) mas nas linhas em branco, o
> > read me ferrava. (também tem linha em branco no meio do SQL!!)
> > Parti pro awk, while / getline / index.. mas não fui feliz também.
> > Até porque o arquivo de entrada pode não vir (e se pode não vir, com
> > certeza não virá) tão certinho como descrevi.
> > Antes dos comandos pode ter uma numeração (número da linha), pode ter um
> > "." (ponto).. enfim.. não tem bem um padrão.
> >
> > Já estou partindo pra uma outra solução.
> > Vou criar um parser/cleanser numa outra ferramenta.
> > Ele vai cuspir o arquivo no formato que eu preciso pra quebrar os
> arquivos
> > e já sem as n exceções que podem aparecer.
> > Algo como:
> > sql1;linha1;<comando sql>
> > sql1;linha2;<comando sql>
> > sql1;linha3;<comando sql>
> > sql2;linha1;<comando sql>
> > sql3;linha1;<comando sql>
> >
> > Aí sim eu entro com um shell script simples.
> >
> > De qualquer maneira, valeu aí pela ajuda.
> >
> >
> >
> >
> > Em 16 de novembro de 2011 18:52, Bruno Coimbra <address@hidden
> >escreveu:
> >
> >> **
> >>
> >>
> >> 2011/11/16 Marcelo Loureiro <address@hidden>
> >>
> >> > **
> >> >
> >> >
> >> > O arquivo de entrada é um script SQL com multiplos comandos.
> >> >
> >> > Ex:
> >> >
> >> > cat arq.txt
> >> >
> >> > SELECT SYSDATE FROM DUAL;
> >> > CREATE TABLE xxx (campo varchar2(2));
> >> >
> >> > DELETE TAB1 WHERE
> >> > XX=91 ;
> >> >
> >> > INSERT INTO TAB2
> >> > (c1, c2)
> >> > VALUES
> >> > (3,
> >> > 3);
> >> >
> >> > /* comment */
> >> >
> >> > end;
> >> >
> >> > Preciso gerar um arquivo pra cada comando INSERT, DELETE ou UPDATE
> >> > encontrado.
> >> > Alguma sugestão ?
> >> > To tentando usar o getline e index do awk, mas não to conseguindo.
> >> >
> >> com o gawk (GNU awk), tente algo como:
> >>
> >> <code>
> >> BEGIN {
> >> INSERT_FILE="insert.sql";
> >> SELECT_FILE="select.sql";
> >> DELETE_FILE="delete.sql";
> >> }
> >>
> >> $1 == "INSERT" {
> >> print $0 >> INSERT_FILE;
> >> }
> >>
> >> $1 == "SELECT" {
> >> print $0 >> SELECT_FILE;
> >> }
> >>
> >> $1 == "DELETE" {
> >> print $0 >> DELETE_FILE;
> >> }
> >> </code>
> >>
> >> PS.: cada comando SQL precisa estar em uma linha pra que o script acima
> >> funcione.
> >>
> >> Att,
> >> --
> >> Bruno Coimbra
> >> address@hidden
> >>
> >> Existem 11 tipos de pessoas no mundo:
> >> As que entendem binário,
> >> as que acham que entendem
> >> e as que não entendem.
> >>
> >> [As partes desta mensagem que não continham texto foram removidas]
> >>
> >>
> >>
> >
> >
> > [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]