[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [shell-script] Melhoria de script [base passwd]
From: |
Jose NIEVIADONSKI |
Subject: |
Re: [shell-script] Melhoria de script [base passwd] |
Date: |
Wed, 26 Mar 2003 17:53:48 -0300 |
Pessoal
Se vocês querem rapidez, tentem isso.
Nesse exemplo (infelizmente somente testado em ksh) não é criado NENHUM
processo UNIX, sendo TOTALMENTE rodado dentro do ksh
IFSANT=$IFS # Salvando o Internal Field Separator
IFS=":" # Assinalando o ":" como separador de campo para o comando
read
exec 3</etc/passwd # Abrindo o descritor 3 como sendo leitura do arquivo
/etc/passwd
while read -u3 user senha uid gid descricao home shell # Mágica. Lê do
descritor 3 e
# ainda separa os
campos usando
# o IFS, tudo
automaticamente
do
echo "Login: $user" #Agora é so mostrar o valor das variáveis
echo "Id : $uid"
echo "Gid : $gid"
done
3<&- # Fechando o descritor
IFS=$IFSANT # Restaurando o Internal Field Separator
Para verificar a rapidez dessa solução, coloque o script dentro de um
arquivo e veja os tempos com time.
Estou dando curso agora e não pude fazer os benchmark de todas as soluções
propostas. Sugiro que alguém com um pouco mais de tempo verifique a retorne
para a lista os tempos de todas as soluções propostas que apareceram na
lista.
Resultado da Solução acima
real 0m0.14s
user 0m0.05s
sys 0m0.10s
Resultado da Solução abaixo
real 0m7.82s
user 0m0.95s
sys 0m3.81s
Meu arquivo /etc/passwd possui atualmente 49 usuários cadastrados
Acho que vale a pena continuar a discussão sobre performance sempre que
surgir a oportunidade.
P.S. Se alguém com bash puder testar a minha solução. Também não sei se a
mesma roda em bash. Mas mesmo que a mesma sirva somente para ksh, acho
válido para aqueles que possuem ou usam o ksh
Abraços a todos da lista
José Augusto Martins Nieviadonski
Analista de Sistemas Consultor
HSBC Bank Brasil S.A. - Banco Múltiplo
Treinamento de informática
Fone : 41 340-5378 - Fax : 41 340-5011
Para: address@hidden
cc:
cco: Jose NIEVIADONSKI/HBBR/HSBC
Assunto: Re: [shell-script] Melhoria de script [base passwd]
Ulysses Almeida <address@hidden>
26/03/2003 05:34 PM
Favor responder a shell-script <font size=-1></font>
Um split eu nao conheço, mas o script a baixo fica bem mais rapido,
para fazer a mesma coisa!
#!/bin/bash
for i in $(cat /etc/passwd |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
pois o script acima gera menos processos, e o que eh melhor, menos
leitura em HD (apenas um cat).
[]s
On Wed, Mar 26, 2003 at 05:04:43PM -0300, Reinaldo Carvalho wrote:
>
> Qual a melhor maneira de fazer isso, existe algum SPLIT por ':'?:
>
> for i in $(cat /etc/passwd | cut -f1 -d ':') ; do
>
> ID=$(cat /etc/passwd | grep -e "^$i:" | cut -f3 -d ':')
> GID=$(cat /etc/passwd | grep -e "^$i:" | cut -f4 -d ':')
>
> echo "Login: $i"
> echo "Id: $ID"
> echo "Gid: $GID"
>
> done
--
.~. Ulysses Almeida
/ V \ address@hidden
/ ( ) \ Seja livre, use GNU/Linux!
^^-^^
This E-mail confidential. It may also be legally privileged. If you are not the
addressee you may not copy, forward, disclose or use any part of it. If you
have received this message in error, please delete it and all copies from your
system and notify the sender immediately by return E-mail.
Internet communications cannot be guaranteed to be timely, secure, error or
virus-free. The sender does not accept liability for any errors or omissions.
Esta mensagem pode conter informação confidencial e/ou privilegiada. Se você
não for o destinatário ou a pessoa autorizada a receber esta mensagem, não pode
usar, copiar ou divulgar as informações nela contidas ou tomar qualquer ação
baseada nessas informações. Se você recebeu esta mensagem por engano, por favor
avise imediatamente o remetente, respondendo o e-mail e em seguida apague-o.
Comunicações pela Internet não podem ser garantidas quanto à segurança ou
inexistência de erros, ou contendo vírus. O remetente por esta razão não aceita
responsabilidade por qualquer erro ou omissão no contexto da mensagem
decorrente da transmissão via Internet.
- Re: [shell-script] Melhoria de script [base passwd],
Jose NIEVIADONSKI <=