[Cascavel-pm] Outro probleminha....

Flavio S. Glock fglock em pucrs.br
Sexta Outubro 3 16:41:06 CDT 2003


Adriano Vivan Borro wrote:
> 
> Oi, lista.
> 
> Esse continua sendo basico, mas enfim...  Nao sei c estou certo, mas pelo que verifiquei na
> documentacao, a funcao sort() do Perl ordena apenas arrays.  Eu preciso ordenar uma lista. O que
> posso usar para isso?
> 
> Explicando melhor o meu problema... Digamos que tenho uma lista de nomes. E a cada execucao da
> minha rotina, leio apenas 1 nome. Ae, apos o script ler todo meu arquivo de entrada, me retorne
> os nomes ordenados e qtos vezes apareceu o mesmo nome.
> 
> Bem.. Nao sei c me expressei muito bem. Vejamos entao um exemplo pratico:
> 
> Arquivo de Entrada:
> 
> Joseh
> Claudia
> Joseh
> Lucia
> Adriano
> Maneh
> Claudia
> Lucia
> Joseh
> Joseh
> Maneh
> 
> Arquivo de Saida:
> 
> Adriano        1
> Claudia        2
> Lucia        2
> Joseh            4
> Maneh        2
> 
> Gostaria d nao usar sort com arrays, justamente pq minha lista eh muito grande e pode tornar o
> procedimento ineficiente.

- em uma linha:

perl -e ' while(<>){ chomp; $h{$_}++ }; print map { "$_ $h{$_}\n" } sort
keys %h ' lista
Adriano 1
Claudia 2
Joseh 4
Lucia 2
Maneh 2

  - 'lista' é o nome do arquivo, com um nome por linha;
  - a variável %h é um índice de nomes, e guarda o número de
ocorrências, utilizando ++.
  - o espaço em memória é ocupado somente uma vez por cada nome;
  - depois que acaba o arquivo (while), o índice é ordenado (sort),
formatado (map) e impresso (print).

- Flavio S. Glock



Mais detalhes sobre a lista de discussão Cascavel-pm