Pois é, julio, se eu falar de anilhas pro meu pai, a resposta vai ser a mesma...rs
Essa ideia do seq -w é interessante, vou colocar como switch no script. Só pra gente fechar (até que alguem venha com mais uma otimização :-D ): Juntando tudo em apenas 2 linhas: real 0m1.961s user 0m1.712s sys 0m0.044s Pra mim essa é a prova de que loops deveriam ser evitados sempre que possível, pois apesar de simples, impactam bastante sobre o desempenho. Abraços, Jeferson dos Santos www.jeferson.info 2010/1/17 Jeferson Santos <jefersondossan...@gmail.com>: > 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 > -- Abraços, Jeferson Santos