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

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

Re: [shell-script] Melhoria de script [base passwd]


From: Thobias Salazar Trevisan
Subject: Re: [shell-script] Melhoria de script [base passwd]
Date: Wed, 26 Mar 2003 21:47:42 -0300 (BRT)

ola de novo galera,

refiz o benchmark em casa na minha super maquina pentium MMX 233 MHz 32 RAM
fiz 2 testes. 1 com um arquivo de 500 linhas e o outro com 50 linhas
os scripts testados foram:

solucao 1 
========================================================
#!/bin/bash

for i in $(cat file | cut -f1 -d ':') ; do
        ID=$(cat file | grep -e "^$i:" | cut -f3 -d ':')
        GID=$(cat file | grep -e "^$i:" | cut -f4 -d ':')
        echo "Login: $i"
        echo "Id: $ID"
        echo "Gid: $GID"
done

solucao 2 (while)
========================================================
IFS=":"
cut -f1,3,4 -d':' file|\
while read NLOGIN NUID NGID
do
   echo "Login: $NLOGIN"
   echo "ID: $NUID"
   echo "GID: $NGID"
done

solucao 3 (for)
========================================================
#!/bin/bash

for i in $(cat file |cut -d':' -f1,3,4); do
        echo "Login: `echo $i|cut -f1 -d':'`"
        echo "Id: `echo $i|cut -f2 -d':'`"
        echo "Gid: `echo $i|cut -f3 -d':'`"
done

solucao 4 (bash)
========================================================
#!/bin/bash

IFS=":"
exec 3<./file
while read user senha uid gid descricao home shell
do
        echo "Login: $user"
        echo "Id   : $uid"
        echo "Gid  : $gid"
done <&3
3<&-

solucao 5 (awk)
========================================================
awk -F: '{print "Login: "$1"\nId: "$3"\nGid:"$4}' file

solucao 6 (sed)
========================================================
sed 's/\(.*\):\(.*\):\([0-9]\+\):\([0-9]\+\):\(.*\)/Login: \1\
Id: \3\
Gid: \4/' file

Primeiro teste realizado com um arquivo de 500 linhas

solucao 1
real    0m48.211s
user    0m14.500s
sys     0m33.530s

solucao 2 while
real    0m2.072s
user    0m0.350s
sys     0m0.110s

solucao 3 for
real    0m24.880s
user    0m7.660s
sys     0m14.840s

solucao 4 bash
real    0m1.758s
user    0m0.400s
sys     0m0.080s

solucao 5 awk
real    0m1.309s
user    0m0.030s
sys     0m0.010s

solucao 6 sed
real    0m1.529s
user    0m0.210s
sys     0m0.030s


Segundo teste com um arquivo de 50 linhas

solucao 1
real    0m3.363s
user    0m1.370s
sys     0m1.590s

solucao 2 while
real    0m0.171s
user    0m0.070s
sys     0m0.000s

solucao 3 for
real    0m2.582s
user    0m0.760s
sys     0m1.570s

solucao 4 bash
real    0m0.079s
user    0m0.060s
sys     0m0.000s

solucao 5 awk
real    0m0.145s
user    0m0.010s
sys     0m0.010s

solucao 6 sed
real    0m0.114s
user    0m0.030s
sys     0m0.020s

Conclusoes:

Solucoes 1 e 3 lenta nao importa o tamanho do arquivo.

Arquivo grande vale a pena carregar programas como awk e sed, pois o custo
de abrir o processo nao influi no tempo de execucao final. E eles sao feitos
pra isto mesmo :)

Arquivo pequeno o melhor e soh bash mesmo. Mas vale a pena usa awk sed e 
while. Resumindo, depende do seu script, pois olha o tamanho da diferenca
entre as solucoes 2 e 3 em termos de tempo e codigo :)

Para arquivo pequeno nao importa muito, mas para arquivos grandes eh melhor
fazer o script com muito cuidado, pois ele pode rodar em 48s ou 1.3s &:)

Comentarios ?!

-- 
thobias
-------
echo 24883721290304465999833114447114149701898P | dc
-------
http://www.lcp.coppe.ufrj.br/~thobias

____________________________
|                          
| Against - HTML Mail      
| Against - MS ATTACHMENTS 
|                          
----------------------------



reply via email to

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