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: eric miranda
Subject: Re: [shell-script] Quebrar arquivo em multiplos
Date: Thu, 17 Nov 2011 19:33:32 -0200

Vlw, Robson.

Eu não pus mais detalhes da dúvida pq estava no trem, lendo no android.
Entendi que estava pegando tudo que ia de "${cmd}" até ";".

Mas, o que eu realmente não entendi foi

{:a;/;/! {N;ba};

O que é ":a", "!", "{N:ba}"? Pq tem ";/;/" ? =)

Se der pra esclarecer esta parte, eu agradeço.

Eric

Em 17 de novembro de 2011 17:11, Robson Alexandre <address@hidden
> escreveu:

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


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



reply via email to

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