Fala Jeferson, - Não me pergunte se dá para fazer em Shell, pq d. A pergunta é: "qual a melhor maneira de fazer em shell?"
Essa frase eu sempre digo, e na nossa lista tem pelo menos uns 200 ex-alunos meus que podem comprovar isso. Por isso, adorei a sua observação. Veio a confirmar o que sempre digo... Vc propôs uma solução e eu duas. Qdo vc falou que estava lenta fui analisá-la pq estava usando bash puro. Aí fui dar uma olhada no que escrevi e notei que estava com um cmd test no escopo de um for, que fazia quase 3000 laços (de um a mil com 3 algarismos cada) e o substituí, gerando o seguinte script: Tudo=$(eval echo {$1..$2}) # Recebe os num. entre $1 e $2 Tudo=${Tudo// /} # Tira os brancos gerados pelo cmd anterior for ((i=0; i<${#Tudo}; i++)) { let Algarismo[${Tudo:i:1}]++ # Incrementa vetor do algarismo } for ((i=0; i<=9; i++)) { printf "Algarismo %d = %2d\n" \ $i ${Algarismo[$i]:-0} # Se o elemento for vazio, lista zero } Agora está Bash puro, mas continua lento pra chuchu. Pesquisei e descobri que Tudo=${Tudo// /} é muuuuito lento, apesar de ser bash (realmente não entendi pq). Aí, resolvi deixar os pudores de lado e fazer o menor prg possível, e fiz o seguinte: Tudo=$(eval echo {$1..$2}) Tudo=$(sed 's/ //g;s/\([0-9]\)/\1\n/g' <<< $Tudo) sort -n <(echo "$Tudo") | uniq -c Se fosse possível, gostaria que vc medisse os tempos de todas as soluções propostas (inclusive a sua) e postasse na lista. Abraços, Julio Cursos de Shell e Zenity em 2 fins de semana? - Em SP ligue (11)2125-4747; - Em DF ligue (61) 3223-3000; - Turmas fechadas em outras cidades ligue (21) 8112-9988. 2010/1/16 lordhulk <jefersondossan...@gmail.com> > > > Olá Julio, > Poxa, infelizmente só achei essa sua resposta entrando direto no forum. Por > algum motivo nao recebi por e-mail... > > A sua idéia funcionou perfeitamente. > Poderia dar uma destrinchada pra eu aprender esse conceito, pq ficou mt > interessante. > A única coisa que notei foi que o desempenho da sua idéia não foi mt legal > quando feito com grandes valores. > Fiz um benchmark entre os 2 meios: > > No que eu fiz, testando de 1 a 1000, o resultado foi: > real 0m0.369s > user 0m0.328s > sys 0m0.028s > > No seu primeiro, testando de 1 a 1000, o resutado foi: > real 0m0.818s > user 0m0.660s > sys 0m0.152s > > No seu segundo, testando de 1 a 1000, o resutado foi: > real 0m12.227s > user 0m12.041s > sys 0m0.184s > > qual o motivo de tanta diferença, se eu usei sed, tr e seq e vc usou > printf, echo e sed e o resto todo apenas de builtins do bash? > > Abraços > > > [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 <*> 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: shell-script-unsubscr...@yahoogrupos.com.br <*> O uso que você faz do Yahoo! Grupos está sujeito aos: http://br.yahoo.com/info/utos.html