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: Robson Alexandre
Subject: Re: [shell-script] Quebrar arquivo em multiplos
Date: Thu, 17 Nov 2011 17:11:06 -0200

Eric,
o for seria pra cada comando SELECT, UPDATE, DELETE, etc,
fazer a pesquisa e criar o arquivo .txt separado por comando.
o sed -n "/${cmd}/{:a;/;/! {N;ba};s/\n/ /g;p}" arq.txt > "${cmd}.txt"

está agrupando tudo entre a linha que contem o comando e a linha que tem o ;
p.e. INSERT

sed -n "/INSERT/          toda linha que tiver INSERT
{:a;/;/! {N;ba};               vai agrupando no hold space até
encontrar a linha com o ";"
s/\n/ /g;p}"                    dai substitui todos as quebras \n por espaços
arq.txt > "INSERT.txt"   e joga apenas o que a gente quer no arquivo.txt

caso queira acrescentar/modificar mais/menos consultas do for é só editar o
for cmd in INSERT SELECT DELETE UPDATE

Acho que me fiz entender, qq dúvida pergunta ai de novo que tento
explicar melhor.

Atenciosmente

Robson Alexandre


Em 17 de novembro de 2011 13:45, eric miranda <address@hidden> escreveu:
> Robson, dá pra explicar esse sed, por favor?
>
> Obrigado
> Em 17/11/2011 05:53, "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]
>
>
>
> ------------------------------------
>
> ---------------------------------------------------------------------
> 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
>
>
>


reply via email to

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