-----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 - mrbits....@gmail.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-----