[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]
- Comparando "bash expansion" com "cut" e "awk", Reinaldo Carvalho, 2006/08/16
- Re: [shell-script] Comparando "bash expansion" com "cut" e "awk",
Julio C. Neves <=
- Re: [shell-script] Comparando "bash expansion" com "cut" e "awk", Reinaldo Carvalho, 2006/08/16
- Re: [shell-script] Como enviar script muito grande, Julio C. Neves, 2006/08/18
- Re: [shell-script] Como enviar script muito grande, Alain M., 2006/08/18
- Re: [shell-script] Como enviar script muito grande, Flavio Junior, 2006/08/18
- Script para enviar EMAIL via SMTP com autenticação, Alain M., 2006/08/18