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


Responder a