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 <[email protected]>

>
>
> 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]



------------------------------------

---------------------------------------------------------------------
Esta lista não admite a abordagem de outras liguagens de programação, como 
perl, C etc. Quem insistir em não seguir esta regra será moderado sem prévio 
aviso.
---------------------------------------------------------------------
Sair da lista: [email protected]
---------------------------------------------------------------------
Esta lista é moderada de acordo com o previsto em 
http://www.listas-discussao.cjb.net
---------------------------------------------------------------------
Servidor Newsgroup da lista: news.gmane.org
Grupo: gmane.org.user-groups.programming.shell.brazil

Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/shell-script/

<*> Para sair deste grupo, envie um e-mail para:
    [email protected]

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html


Responder a