shell-script-pt
[Top][All Lists]
Advanced

[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: Sun, 17 Jan 2010 08:52:16 -0200

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 mais rápido. É muito
raro um cmd externo ser mais veloz que bultins e, eval, echo e expansão de
chaves são intrínsecos do shell.

Alias o seq me surpreende. Há pouco descobri que
for i in $(seq 10000)
era mais veloz que
for ((i=1; i<10001; i++).

Eu não entendo nada de cabeação e achava que anilha era coisa para marcar
passarinho ;) mas se as anilhas de 1 a 10 forem preenchidas com zeros à
esquerda (001 002 003 ... 100) o seq ainda leva a vantagem de se poder fazer
seq -w 100
Experimente.

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/17 Marcelo Salhab Brogliato <address@hidden>

> 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 <address@hidden>
>
> >
> >
> > 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: address@hidden
> ---------------------------------------------------------------------
> 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
>
>
>


[As partes desta mensagem que não continham texto foram removidas]



reply via email to

[Prev in Thread] Current Thread [Next in Thread]