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 18:53:56 -0300 (EST)

ola lista.

fiz um benchmark rapido aqui para este problema.
boot da maquina em modo texto  para limpar memoria...
e peguei a execucao da primeira execucao, pois apos a primeira os
programas, arquivos... ficam tudo no buffer do kernel, ai a
proxima execucao e muuuiiitooo mais rapida.

$ wc -l file
57

=====================================================
1 solucao
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

real    0m1.784s
user    0m1.140s
sys     0m0.510s

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

real    0m0.060s
user    0m0.000s
sys     0m0.000s

=====================================================
3 solucao
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

real    0m0.839s
user    0m0.280s
sys     0m0.320s

=====================================================
4 solucao
#!/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<&-

real    0m0.016s
user    0m0.020s
sys     0m0.000s

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

real    0m0.095s
user    0m0.000s
sys     0m0.000s

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

real    0m0.035s
user    0m0.010s
sys     0m0.000s

Melhores solucoes: 4 (somente bash), 6 (sed), 2 (IFS;cut;while)
e 5 (awk)

para uma avaliacao melhor deste 'benchmark' seria melhor boot em
single user para tirar alguns daemons....

Mas me lembrei disto soh agora e tenho que ir pra
casa... se alguem quiser refazer, ai estao todas as solucoes
propostas. Se alguem tiver mais alguma ideia. :)

Abraco!

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]