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: Marcelo Loureiro
Subject: Re: [shell-script] Quebrar arquivo em multiplos
Date: Wed, 16 Nov 2011 19:08:26 -0200

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]



reply via email to

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