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

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

Re: Problema com arquivo grande


From: Leogildo
Subject: Re: Problema com arquivo grande
Date: Thu, 13 Oct 2005 23:15:46 -0000
User-agent: eGroups-EW/0.82

Ae Marco,

Se o "registro inteiro" for equivalente a uma ocorrência, vc pode 
utilizar:

sort  nome_do_arquivo  |  uniq  >  nome_novo

ou...

sort -u  nome_do_arquivo  >  nome_novo

...agora, se a ocorrência for identificada apenas por parte do 
registro (estou me baseando no seu "cut -c 13-16"), vc pode utilizar 
(após ordenar o ARQVAL, possivelmente pela chave da ocorrência):

awk -v prev="" 'substr($0, 13, 4) != prev {print; prev = substr($0, 
13, 4) }' ARQVAL  >  ARQVAL.new

Já ouvi comentários que destacam -- dentre outras qualidades -- a boa 
performance do awk para manipulação de grandes volumes de dados, 
embora eu pessoalmente nunca o tenha utilizado para esta finalidade.

Pela linha de código que estou postando, nota-se que não tenho muita 
familiaridade com a sintaxe do awk (não consegui atribuir a uma 
variável o resultado do comando substr, o que simplificaria o 
código), mas posso afirmar que o mesmo é funcional (testei antes de 
postar).

Caso vc já tenha encontrado a solução para o seu problema, ainda 
assim valeu o esforço de todos nós, pois shell-script sempre consegue 
nos surpreender pelas suas múltiplas possibilidades de resolução de 
um mesmo problema.

Só mais uma coisa, se vc testar a solução acima, faça um comparativo 
nos tempos de execução, e poste o resultado para a gente saber.


T+ 



--- Em address@hidden, Marco Sinhoreli 
<msinhore@g...> escreveu
> Olá a todos,
> 
> Tenho um arquivo com, pra ser exato ;-), 6.352.886 linhas.
> Preciso listar as ocorrências considerando que as repetidas não irei
> armazenar novamente:
> 
> 
> #! /bin/bash
> 
> cont=0
> for i in $(cut -c 13-16 ARQVAL)
>     do
>     if [ ! $(echo ${var[@]}| grep $i) ];
>         then
>         var[$cont]=$i
>         let cont++
>     fi
> done
> echo ${var[@]}
> 
> Problema: no ínicio do laço, o i/o fica grande para a leitura do
> arquivo gigante (231M) e o processo não vai adiante.
> 
> Gostaria de ver a possíbilidade de ler linha a linha sem necessidade
> de armazenamento prévio, é possível?
> 
> []s
> 
> 
> --
> Marco Sinhoreli



reply via email to

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