Tunning de script egrep com awk

1. Tunning de script egrep com awk

Mario Oshiro
mario oshiro

(usa Suse)

Enviado em 26/08/2008 - 12:21h

Pessoal, tenho um arquivo gigante no formato abaixo:
(Arquivo)
AAA1234;CORSA;AZUL;2008
BBB1234;GOL;PRETO;1999
CCC1234;FIT;CINZA;2006

Tres arquivos para filtar o 1o.

(Filtro1)
AAA1234
CCC1234
www1234

(Filtro2)
AAA1234
HHH1234
III234

(Filtro3)
AAA1234
CCC1234
www1234
HHH1234

Meu script ficou assim, tres egreps consecutivos :

egrep -f Filtro1 Arquivo > Lista1
egrep -f Filtro2 Arquivo > Lista2
egrep -f Filtro3 Arquivo > Lista3

Meu desejo era diminuir para um unico passo a geracao dos tres arquivos ( Lista 1, 2 e 3 ).
Estou estudando o awk para isto,

Alguem tem alguma dica para me enviar ?

Obrigado



  


2. Explique melhor...

Rodrigo Ferreira Valentim
engos

(usa openSUSE)

Enviado em 26/08/2008 - 12:50h

Não entendi absolutamente nada!


Para você entender o que "consegui entender", vou descrever abaixo:

1o - Você tem um arquivo contendo informações do tipo:
AAA1234;CORSA;AZUL;2008
BBB1234;GOL;PRETO;1999
CCC1234;FIT;CINZA;2006


2o - Esse arquivo é muito grande e por isso você o divide em 3 outros, sendo assim, todas as informações do arquivo vão estar divididas entre esses três novos arquivos, sem repetir nada, nem faltar nada.


3o - Você montou 3 filtros e os usou para dividir esse arquivo gigantesco em 3, mas seus filtros duplicam as informações e deixam outras sem serem pegas...


4o - Você quer usar awk para fazer issod e forma menos trabalhosa, ou eficiente.


Bem, se for isso mesmo, perceba que o 2o item e o 3o item entram em conflito.

Acredito que seja melhor você colocar um exemplo prático e mais detalhado, pois dessa forma ao menos eu não consegui entender nada...


[]s
PS. Se for só para dividir, que tal usar o split?


3. Tentando ser mais claro.

Mario Oshiro
mario oshiro

(usa Suse)

Enviado em 26/08/2008 - 14:34h

Desculpe-me, tentarei ser mais claro.

Meu processo eh o seguinte :

1o. Tenho um arquivo gigante, cerda de 1,5 milhao de registros. As linhas estao no formato abaixo :
para exemplificar, dei o nome do arquivo de veiculos :

AAA1234;CORSA;AZUL;2008
BBB1234;GOL;PRETO;1999
CCC1234;FIT;CINZA;2006


2o. Possuo mais tres arquivos ( filtro1, filtro2 e filtro3), cada arquivo contem apenas a placa do veículo que tambem pode ser muito grande, 300.000 placas por arquivo.

(filtro1 - Lista para enviar email de aviso )
AAA1234
CCC1234
www1234

(Filtro2 - Lista para enviar cartao por correio )
AAA1234
HHH1234
III234

(Filtro3 - Lista para fazer contato telefonico )
AAA1234
CCC1234
www1234
HHH1234


3o. Hoje meu script faz tres egrep consecutivos, gerando tres arquivos de saída diferentes, cada comando leva cerca de 5 minutos para ser processado :

egrep -f filtro1 veiculos > Lista1
egrep -f filtro2 veiculos > Lista2
egrep -f filtro3 veiculos > Lista3


Quero deixar este processo mais eficiente, fazendo este processo em um unico passo,
e em relacao ao 1o post avancei um pouco :

awk -f robo.awk ./veiculos

#robo.awk
BEGIN {
FS=";"
}

/AAA1234/{
print $0
}



Com o script acima, consigo filtrar os registro um veiculo, de placa 'AAA1234', porem minha lista esta em um arquivo separado do script awk.

Perguntas :

* Cosigo fazer algo parecido com o egrep, passar o arquivo de filtro na chamada do filto de bloco do awk ?
* Vcs acham que estou no caminho certo ?

Obrigado

Mario Oshiro


4. Re: Tunning de script egrep com awk

Rodrigo Ferreira Valentim
engos

(usa openSUSE)

Enviado em 28/08/2008 - 12:07h

Se for para fazer dessa forma acho melhor montar um shell script, ou simplesmente chame os três comandos "juntos", ex.:

egrep -f filtro1 veiculos > Lista1; egrep -f filtro2 veiculos > Lista2; egrep -f filtro3 veiculos > Lista3


Agora se for para usar awk para tentar agilizar o processo, seria algo do tipo:

awk '/<expressao regular>/ { print $0 }' > arquivo1



5. Re: Tunning de script egrep com awk

Vítor De Araújo
ux386

(usa Debian)

Enviado em 03/09/2008 - 00:16h

> Se for para fazer dessa forma acho melhor montar um shell script, ou
> simplesmente chame os três comandos "juntos", ex.:
> egrep -f filtro1 veiculos > Lista1; egrep -f filtro2 veiculos > Lista2;
> egrep -f filtro3 veiculos > Lista3

Dava para rodar os três em paralelo...
#!/bin/bash
egrep -f filtro1 veiculos > Lista1 &
egrep -f filtro2 veiculos > Lista2 &
egrep -f filtro3 veiculos > Lista3 &
wait

Agora com awk eu não sei fazer... :-(







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts