Problemas de desempenho com grep [RESOLVIDO]

1. Problemas de desempenho com grep [RESOLVIDO]

Leandro Moraes de Oliveira
lmoraes

(usa Slackware)

Enviado em 04/12/2008 - 15:58h

Boa tarde a todos,

Tenho o seguinte comando com grep:
grep --file=$filter -v $arq > Nao_numericos.txt

Ele faz o seguinte tenho um arquivo X "$arq" onde rodarei o filtro sobre ele, este filtro é um arquivo Y "$filter", ele ira procurar linha a linha no conteudo de Y no arquivo X caso encontre irá desprezar está linha, estamos utilizando o grep com match inverso, porém rodando isso com um arquivo X de 500.000 linhas e Y com 3.000 linhas tenho um processo de quase 2 horas ocupando a máquina alguém teria uma solução para melhor desempenho, talvez um for, while sei lá.

Obrigado!
Caso não tenha sido claro postem dúvidas


  


2. Re: Problemas de desempenho com grep [RESOLVIDO]

Sandro Marcell
SMarcell

(usa Slackware)

Enviado em 27/12/2008 - 03:28h

Dê uma pesquisada sobre 'file descriptors'! Você encontrará muita coisa interessante a respeito.


3. Talvez seja mais fácil usar programação em C ou Java

Eduardo Pelizzari de Andrade
edupersoft

(usa Manjaro Linux)

Enviado em 27/12/2008 - 10:55h

Se Y puder ser classificado dá para fazer uma busca bem mais rápida, através de um algorítimo de busca binária. Para cada elemento de X que você encontrar você tenta encontrá-lo exatamento no meio de Y. Se a buca não deu certo, você tem que ver se o elemento de X é maior, se sim você descarta a metade inicial de Y, se for menor, você descarta a metade final de Y. A próxima busca você novamente no meio do conjunto que sobrou. Desta forma você fará, no máximo 750 buscas para cada elemento do X.

Se o X também puder ser classificado ai fica mais fácil ainda, Você vem lendo X e conforme você acha seu valor em Y, você não precisa buscar os valores anteriores para o próximo elemento.




4. Re: Problemas de desempenho com grep [RESOLVIDO]

Denis Doria
thuck

(usa Debian)

Enviado em 27/12/2008 - 14:36h

Cara, sinceramente não use o grep para esse tipo de busca. Ele é muito lento para buscas desse tipo, vc consegue o msm efeito usando um sort |uniq e algum conhecimento em teoria dos conjuntos, e fica muito mais rápido garanto.
Mas oq realmente aconselho, e se realmente o tempo for algo muito importante, desencana de usar grep e cria uma árvore binária, vc fará a busca em uns cinco minutos.


5. Re: Problemas de desempenho com grep [RESOLVIDO]

Leandro Moraes de Oliveira
lmoraes

(usa Slackware)

Enviado em 14/01/2009 - 11:47h

Bom resolvi o problema com o script abaixo, bom ainda ficou um pouco lento mas tudo bem, se meu volume aumentar precisarei de outro algoritmo
Obrigado!


#!/bin/bash

rm -rf sem_coleta.txt com_coleta.txt

date

while read LINE
do

fgrep "`echo $LINE | cut -c 12-21`" Lista_Num.txt > /dev/null && var=true || var=false

if $var ;then
echo "$LINE" >> sem_coleta.txt
else
echo "$LINE" >> com_coleta.txt
fi

done < ftlf_0811_bas_v1.rm

echo "fim `date`"

exit






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts