Sendo que o cat teste em todos os testes que vc fez era desnecessário. Em nenhum caso precisava/deveria ter sido usado. Experimente p. ex. fazer:
$ time sort -u teste | wc -l Abraços, Julio Cursos de Shell e Zenity em 2 fins de semana? - Em SP ligue (11) 2125-4747 Curso de 07 a 11/12; - Em DF ligue (61) 3223-3000; - No RJ ligue (21) 2561-0867. Curso nos dias 5,6,12,13/12; - Turmas fechadas em outras cidades ligue (21) 8112-9988. 2009/11/12 Marcio Gil <[email protected]> > > > Bem interessante essas funções zz... dá para tirar muitas idéias. > > De qualquer forma eu testei as várias idéias para ver qual é a mais > eficiente. Eu juntei parte do meus códigos fonte em um único arquivo > de quase 100000 linhas e testei várias alternativas: > > $ time cat teste | uniq | wc -l > 93601 > real 0m0.869s > > $ time cat teste | sort -u | wc -l > 36070 > real 0m0.540s > > (estes dois só para comparar) > > $ time cat teste | cat -n | sort -k2 -u | sort -n | cut -f2- | wc -l > 36070 > real 0m1.638s > > (excelente! funciona muito bem) > > $ time cat teste | awk '{ if (!visto[$0]) print; visto[$0] = 1; }' | > wc -l > 36070 > real 0m0.652s > > (esta dica enviada pelo colega Rafael Almeida) > > $ time cat teste | first | wc -l > 36067 > real 0m54.531s > > (como eu faço busca sequencial, já era de se esperar. Talvez melhore > se eu utilizar árvore ou hash) > > $ time cat teste | sed "G ; /^\([^\n]*\)\n\([^\n]*\n\)*\1\n/d ; h ; > s/\n.*//" | wc -l > ^C > real 4m52.727s > > (não tive paciência e dei CTRL+C) > > Pena que não funcionou com a idéia do Fabiano. > > Muito obrigado a todos. > > > -----Original Message----- > > From: Tiago Peczenyj > > > > 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] <marciomgil%40bol.com.br>> > > > > > > > > > > > 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. > > > > > > > > > > > > > > [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
