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: Wed, 16 Nov 2011 21:00:45 -0200

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


reply via email to

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