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

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

Re: [shell-script] Comando para eliminar duplicatas não sequenciais


From: Tiago Peczenyj
Subject: Re: [shell-script] Comando para eliminar duplicatas não sequenciais
Date: Thu, 12 Nov 2009 10:15:30 -0200

Muito pertinente essa duvida: existem varias formas de conseguir o que vc
quer sem apelar para algoritmos iterativos, loops, etc, apenas com bash
'puro' e pipes - e alguma criatividade.

O que vc quer ja existe no funçõesZZ [ http://funcoeszz.net/ ] do Aurelio &
Thobias sob o nome de zzuniq e vou disponibilizar o codigo tal qual vc
encontra no site

    # As linhas do arquivo são numeradas para guardar a ordem original
    cat -n "${1:--}" |     # Numera as linhas do arquivo
        sort -k2 -u |  # Ordena e remove duplos, ignorando a numeração
        sort -n |      # Restaura a ordem original
        cut -f2-       # Remove a numeração


o ${1:--} é para ler tanto da stdin quanto de um arquivo.

No mesmo fonte vc encontra este comentario:

    # Versão SED, mais lenta para arquivos grandes, mas só precisa do SED
    # PATT: LINHA ATUAL \n LINHA-1 \n LINHA-2 \n ... \n LINHA #1 \n
    # sed "G ; /^\([^\n]*\)\n\([^\n]*\n\)*\1\n/d ; h ; s/\n.*//" $1

Boa sorte com o debug :)

2009/11/11 Marcio Gil <address@hidden>

>
>
> Pessoal, quero saber se existe algum comando equivalente ao 'uniq'
> mas que possa eliminar duplicatas não sequenciais. Exemplo:
>
> ddeeff
> aabbcc
> aabbcc
> gghhii
> gghhii
> aabbcc
>
> com 'cat ... | uniq' fica:
>
> ddeeff
> aabbcc
> gghhii
> aabbcc
>
> com 'cat ... | sort -u' fica:
>
> aabbcc
> ddeeff
> gghhii
>
> Mas quero obter somente a primeira ocorrência de cada linha, na
> ordem em que elas ocorrem:
>
> ddeeff
> aabbcc
> gghhii
>
> Há muito tempo eu escrevi um código pra fazer isso ( que chamei de
> 'first': http://c.pastebin.com/f69cecb13 ), mas gostaria de saber se
> existe alguma maneira de resolver com shel-script padrão.
>
> Obrigado.
>
> Marcio Gil.
>
>  
>



-- 
Tiago B. Peczenyj
Linux User #405772

http://pacman.blog.br


[As partes desta mensagem que não continham texto foram removidas]



reply via email to

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