shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] Problemas com dados.


From: Felipe Kellermann
Subject: Re: [shell-script] Problemas com dados.
Date: Thu, 26 Feb 2004 14:04:43 -0300 (BRT)

On Thu, 26 Feb 2004 12:01pm  -0300, Fernando Lemes da Silva wrote:

>
>
>     Galera, estou com um problema em um script. Antigamente eu fazia a
> leitura do arquivo procurando um registro com cat e grep, mas é

Depende. Tu procurava *um* registro? Ou quantos registros?
Há casos em que este método pode ser o melhor de todos: Se tu parar a
busca *imediatamente* depois de encontrar o que queria, e ainda tiver
sorte de estarem, em média, próximas do início ("início" sendo o lugar
onde tu começou a buscar).

Tu pode fazer isto com o `q' do sed. Ou então usando a opção específica do
GNU grep, `-m NÚMERO', que vai parar depois de NÚMERO vezes que encontrar
teus padrões. Ou de qualquer outra forma que quiser, pode até ser usando o
read mesmo.

> ineficiente porque ele le o arquivo inteiro. Agora tentei trabalhar com
> este arquivo na memoria, mas ele se mostrou extremamente lento quando o
> numero de linhas começa a crescer.

Fica extremamente lento para montar ou para ler/buscar depois?
São duas coisas difererentes.

>     dados=""
>     for arquivo in $listaenorme; do
>       info_do_arquivo=`blablabla...`
>       dados=$dados`echo -e "$arquivo\t$info_do_arquivo\n"`
>     done
>
>     Será que um array seria recomendado ? Aguentaria 20 mil posições ?
> 50 mil ? Ou devo fazer isto em outra linguagem ?

Sim, eu acho que seria recomendado um array. Se deveria fazer em alguma
outra linguagem, eu também acho que sim. Só algumas outras características
que tu talvez esqueceu de comentar: Como são exatamente os dados? Ou então
se são feitas modificações nos dados de tempos em tempos, etc.

Não há problemas em fazer em shell, também, mesmo com infinitas posições.
Só obviamente não vai ter a eficiência perfeita, mas pode fazer. Como eu
faria, mesmo sem perceber exatamente o *teu* cenário: Montaria a minha
estrutura com os dados de toda a $listaenorme, já ordenando-os, e depois
usaria de buscas binárias.

Se esta $listaenorme fosse modificada às vezes, bolaria uma forma de fazer
as atualizações que ficassem rápidas (mesmo que fosse o caso de fazer uma
estrutura separada de outra). Se eles não vão ser modificados, melhor. Se
for o caso de uso contínuo por vários processos, criaria um apenas para
fazer as entregas das respostas (que manteria os $dados), mesmo que fosse
para separar entre computadores diferentes! Que tal? ;-)

-- 
Felipe Kellermann


reply via email to

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