[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [shell-script] Re: Minha contribuição de Feliz Ano novo
From: |
Julio C. Neves |
Subject: |
Re: [shell-script] Re: Minha contribuição de Feliz Ano novo |
Date: |
Sat, 16 Jan 2010 20:26:54 -0200 |
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 <address@hidden>
>
>
> 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]
- Re: [shell-script] Minha contribuição de Feliz Ano novo, Julio C. Neves, 2010/01/01
- Re: Minha contribuição de Feliz Ano novo, lordhulk, 2010/01/16
- Re: [shell-script] Re: Minha contribuição de Feliz Ano novo,
Julio C. Neves <=
- Re: [shell-script] Re: Minha contribuição de Feliz Ano novo, Jeferson Santos, 2010/01/16
- Re: [shell-script] Re: Minha contribuição de Feliz Ano novo, Marcelo Salhab Brogliato, 2010/01/17
- Re: [shell-script] Re: Minha contribuição de Feliz Ano novo, Julio C. Neves, 2010/01/17
- Re: [shell-script] Re: Minha contribuição de Feliz Ano novo, Marcelo Salhab Brogliato, 2010/01/17
- Re: [shell-script] Re: Minha contribuição de Feliz Ano novo, Julio C. Neves, 2010/01/17
- Re: [shell-script] Re: Minha contribuição de Feliz Ano novo, Jeferson Santos, 2010/01/17
- Re: [shell-script] Re: Minha contribuição de Feliz Ano novo, Jeferson Santos, 2010/01/17
- Re: [shell-script] Re: Minha contribuição de Feliz Ano novo, Marcelo Salhab Brogliato, 2010/01/17