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

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

Re: [shell-script] Qual a forma mais eficiente para recuperar campos de


From: Cristiano Amaral
Subject: Re: [shell-script] Qual a forma mais eficiente para recuperar campos de um arquivo de texto?
Date: Mon, 3 May 2010 21:35:38 -0300

Sem querer extender a *thread... Mais desde quando *"Os nomes de variáveis
no código fonte do kernel são escritos, por padrão, em caixa baixa"
export....

Em 3 de maio de 2010 21:18, MrBiTs <address@hidden> escreveu:

>
>
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA256
>
> > MrBits,
> > Modifiquei sua sugestão de acordo com meu script e quer saber?
> > Nem melhorou tanto assim...... passou de 600ms para 17ms.... um ganho de
> > APENAS 3500%
>
> Acredite. Também já passei por isso. Essas armadilhas de usar cat | grep |
> cut são clássicas e pegam 11 entre 10 novatos (e outro
> tanto de experientes também). As pessoas podem falar que 600ms não é tanto
> assim, mas extrapole isso para um arquivo com algumas
> dezenas de gigabytes de dados e você terá idéia do que estamos falando.
>
>
> > corpo(){
> > OLDIFS=${IFS}
> > IFS=";"
> > while read PC MAC LOCAL SO GW IP STATUS COMENT ; do
> > [[ $PC =~ ^srv-.*$ ]] && break
> > echo " "
> > [[ "$COMENT" =~ ^$ ]] || echo " # "$COMENT""
> > echo " # $PC ($LOCAL) ($SO) ($STATUS)"
> > echo " host $PC {"
> > echo " hardware ethernet $MAC;"
> > [[ "$IP" =~ ^$ ]] || echo "
> > fixed-address $IP;"
> > [[ "$GW" =~ ^$ ]] || echo " option
> > routers $GW;"
> > [[ "$SO" == "Win_2000" ]] && win_2000
> > echo " }"
> > echo ""
> > done < <(grep -v '^#' $Database) >> $DHCPD
> > IFS=${OLDIFS}
> > }
> Que código bonito :P Saiu até formatadinho aqui, com o e-mail recebido em
> texto, sem nenhum HTML para encher o saco :P (não
> resisti). Ele ia ficar mais bonito ainda se você tivesse colocado todas as
> variáveis protegidas pelos {}, mas foi falha minha.
> Estavam me torrando o saco no engenho e eu queria responder logo.
>
>
> > Bom, eu gostaria de entender melhor essa mágica, então vou falar o que
> > entendi, usei o "for" pois não sabia que o "while" tinha a facilidade de
> > ler o arquivo linha a linha sem usar o IFS para detectar o fim
> > dela.(Ainda não tenho total certeza se é exatamente isso, mas pelos
> > testes que fiz foi a conclusão que cheguei)
> > Dessa forma o while pega cada linha completa e manda para o "read"
> > fatiar usando o IFS=";" e já atribuindo cada campo a cada variável na
> > lista dele.
> > Dentro do while rolam as comparações e são criadas as linhas que farão
> > parte do dhcpd.conf.
> > Outra coisa que não sabia era da facilidade de poder mandar a saída
> > inteira desse while para dentro de um arquivo de uma só vês, da forma
> > que vc fez eu imaginava que ele iria imprimir tudo no tty linha a linha,
> > percebi também que até funções podem ter sua saída redirecionadas para
> > arquivos pois na linha que verifico o S.O se esse for Win_2000 eu chamo
> > uma função win_2000 que cria as exceções para esse S.O
> > Da minha forma para cada linha da base eu escrevia 8x no arquivo de
> > saída e agora escrevo apenas 1x para toda a base, é isso mesmo?
>
> Zero de mágica. Isso é sistema operacional de verdade. E, sim, você está
> certo. Antes você escrevia 8x para cada registro, agora
> escreve uma vez para a base. Redirecionamento de entrada e saída padrões é
> muito poderoso.
>
> - --
>
> Um abraço
>
> .0. MrBiTs - address@hidden <mrbits.dcf%40gmail.com>
> ..0 GnuPG -
> http://pgp.mit.edu:11371/pks/lookup?op=get&search=0x6EC818FC2B3CA5AB
> 000 http://www.mrbits.com.br
>
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.4.9 (GNU/Linux)
>
> iQEcBAEBCAAGBQJL32e6AAoJEG7IGPwrPKWrJh8H/3N8mHura6s6iI9UmBqJjUyN
> MA8IfJvA7hvPlZxn3e5Yg3zGV9hYbnK7stMFDR7h4dYlY6L0XE7SH3QdzXNC2Ow4
> //HUQklX0YvlaaLpnHk9+SOffjRFRGKLbXNF0lx81qqfUr+Z9HNrhEmo8ORbwo+j
> Uy6daAuabUqGqsljyD4y1Gu0Y0RKAB+7QfnkFh1Wtns9P/wtNSk4aeYXdXLfTDlY
> XkUds9LmaAySXffmzUOQGP89oIWEXd0jPE7qwrHpMn6mswxrOTA57ZxUj2ZaVW1x
> Uke4geFYEw/66SvhJ/Uwwm4AFgMKmjz+6iYTOuIcb75PcdW23JuBWFyq2OFs398=
> =RzWQ
> -----END PGP SIGNATURE-----
>  
>


[As partes desta mensagem que não continham texto foram removidas]



reply via email to

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