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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] Comparando "bash expansion" com "cut" e "awk"


From: Julio C. Neves
Subject: Re: [shell-script] Comparando "bash expansion" com "cut" e "awk"
Date: Wed, 16 Aug 2006 11:14:01 -0300

Valeu Reinaldo,
foi um bom teste. Algumas observações:
O resultado com Bash puro era esperado, pq ele não carrega nenhum módulo
externo. Sua desvantagem é a compatibilidade. O ksh tem expansões muito
restritas e o sh é pior ainda.

O awk (e o sed tb), além de ter o código muito grande, dá uma pré compilada
no script gerando um bitcode. Isso tb tem pró e contras. Ele teve um bom
desempenho em virtude das 10.000 interações. Não gosto do awk qdo usado para
fazer um trabalho elementar como cortar uma cadeia uma única vez.

Faltaram 3 testes:
1 - mudando o IFS:

    IFS=:
    while read usuario resto ...

2 - cut cortando todo o arquivo:
2.1 - Com cut:
    cut -f1 -d: /etc/passwd > /dev/null
2.2 - Com awk:
    awk -F: '{ print $1 }' /etc/passwd > /dev/null

Creio que o primeiro será muito próximo daquele que vc usou expansões e os 2
últimos, que terão tempos bem menores por não usarem while tb terão tempos
próximos entre si. Imagino que o cut seja um pouquinho mais veloz.

Teste ai e nos conte. O teste tem que ser feito na sua máquina para ter
significado.

Abração,
Julio
:wq

2006/8/16, Reinaldo Carvalho <address@hidden>:
>
>  Cada teste foi repetido diversas vezes para não ocorrer distorções
> devido a caches do sistema. Também fiz testes utilizando a saida para
> a tela, mas não houve mudanças nos resultados.
>
> Achei interessante que o awk teve melhor performace que o cut. e mais
> impressionante ainda, a performace da expansão via bash.
>
> Os testes foram realizados com /etc/passwd com 10mil linhas, com
> objetivo de obter o primeiro campo separado por :, no caso, o usuário.
>
> Acho que devemos dar mais importancia para as expansões via
> #,##,%,%%,:,etc..
>
> ==============Bash to null==============
> while read line ; do
>         echo ${line%%:*} > /dev/null
> done < <(cat /etc/passwd)
>
> # time ./tt.sh
> real    0m0.355s
> user    0m0.112s
> sys     0m0.240s
>
> ==============Cut to null==============
> while read line ; do
>         echo $line | cut -f1 -d: > /dev/null
> done < <(cat /etc/passwd)
>
> # time ./tt.sh
> real    0m10.366s
> user    0m1.684s
> sys     0m3.408s
>
> ==============Awk to null==============
> while read line ; do
>          echo $line | awk -F: '{ print $1 }' > /dev/null
> done < <(cat /etc/passwd)
>
> # time ./tt.sh
> real    0m8.398s
> user    0m1.680s
> sys     0m3.440s
>
>
> --
> Reinaldo Carvalho
> Debian Sarge 3.1 - Linux User: #238310
> Prodepa - address@hidden
> 
>



-- 
Abraços,
Julio
http://www.julioneves.com - Um livro sobre Bash completo e on-line
:wq


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



reply via email to

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