[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
|
----------------------------