Fala Marcelo,
o que vc explicou é perfeitamente compreensível e concordo totalmente
contigo, porém a diferença de tempo entre a expansão de chaves e a execução
do seq, para números não muito grandes (tipo 2000) é pequena. Para números
pequenos, as chaves ganham e para números grandes o seq ganha (p
Hehehehehe! Grande Julio!
Aprendi shell lá no seu bar, hehehe.. ;)
Acho que a diferença vem do seguinte:
No eval com echo, estamos executando um: echo {1..10}, que é o mesmo que
echo 1 2 3 4 5 ... 10.
Desta maneira, a expansão em chaves irá ter que gerar a string com esses
números todos (q
Olá Jeferson,
só um comentário sobre sua afirmação de que loops devem ser evitados.
Por exemplo:
seq 1 1000
for i in $(seq 1 1000); do echo $i; done
o segundo é mais lento que o primeiro (fica mais notável se aumentarmos o
1000).
Mas, até onde sei, o segundo irá executar 1000 vezes o programa ech
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:
real0m1.961s
user0m1.712s
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 à 10:
real0m2.938s
user0m2.49
Falou Marcelo,
logo após enviar para a lista o script, me ocorreu a mesma ideia, porém
juntando as 2 linhas, e o prg ficaria assim:
Tudo=$(seq $1 $2 | sed 's/ //g;s/\(.\)/\1\n/g')
sort -n <(echo "$Tudo") | uniq -c | awk '{print $2" = "$1}'
Mas o que me deixa idiotizado é o fato do seq ter sido ma
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,
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 de
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
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
10 matches
Mail list logo