Opa! Deu diferença mesmo! Engraçado que apesar de não estarmos lidando com um scrip que necessariamente dependa da velocidade, as técnicas de otimização utilizadas aqui irão trazer ganhos em diversos outros scripts.
O último script tinha esses tempos, de 1 à 100000: real 0m2.938s user 0m2.496s sys 0m0.064s Testando . no lugar de [0-9], de 1 à 100000: real 0m2.246s user 0m1.740s sys 0m0.108s Com isso, temos um ganho real de 0.692, no teste realizado, que eu posso considerar um realmente razoavel, julgando a simplicidade da tarefa. 2010/1/17 Marcelo Salhab Brogliato <msbro...@gmail.com>: > Olá Jeferson e Julio, > > neste linha: Tudo=$(sed 's/ //g;s/\([0-9]\)/\1\n/g' <<< $Tudo) > sabemos que tudo o que sobra são números e, pelos meus testes, substituir > [0-9] por . melhora 40% a performance (deste comando, não do todo). > > A explicação seria não ter que verificar se o digito está entre 0 e 9, > evitando milhares de comparações. > > abraços, > Salhab > > > > 2010/1/17 Jeferson Santos <jefersondossan...@gmail.com> > >> >> >> Olá Julio, >> >> Que bom que gostou da observação, pois é fruto de muito chope virtual >> no botequim do shell...rs >> >> Voltando ao assunto, refiz os testes. >> O seu script foi um pouco mais rapido que o meu, de 1 a 1000, sendo >> assim, resolvi deixar as coisas mais interessantes e aumentei pra >> 100.000, só pra deixar a coisa ferver. >> Obviamente não daria pra te vencer num duelo de script mais de 1x...rs >> sendo assim, veja os resultados da surra q levei contra seu script >> novo: >> >> Meu script, de 1 a 100000 >> real 0m58.144s >> user 0m56.128s >> sys 0m2.144s >> >> Seu script, de 1 a 100000 >> real 0m3.202s >> user 0m2.740s >> sys 0m0.084s >> >> Tendo como base estes dados, resolvi mesclar os 2 scripts, linha por >> linha, pra ver o melhor de cada um. A única coisa que testei e deu >> diferença foi usar o seq no lugar do eval echo. Também adicionei uma >> linha em awk (que incrivelmente nao causou impacto no desempenho, até >> pelo fato de ter sido usado apenas uma vez) pra deixar a saída >> exatamente como estava no meu script original. >> Eis o resultado: >> >> real 0m2.938s >> user 0m2.496s >> sys 0m0.064s >> >> Aqui está o script modificado: >> ----------------------------------- >> #!/bin/bash >> Tudo=$(seq $1 $2) >> >> Tudo=$(sed 's/ //g;s/\([0-9]\)/\1\n/g' <<< $Tudo) >> sort -n <(echo "$Tudo") | uniq -c | awk '{print $2" = "$1}' >> ----------------------------------- >> >> Abraços à todos, >> Jeferson dos Santos >> >> >> > > > [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: shell-script-unsubscr...@yahoogrupos.com.br > --------------------------------------------------------------------- > 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 > > > -- Abraços, Jeferson Santos