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

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

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


From: Julio C. Neves
Subject: Re: [shell-script] Re: Qual a forma mais eficiente para recuperar campos de um arquivo de texto?
Date: Mon, 3 May 2010 22:12:38 -0300

Fala Law, MrBiTs, Cristiano1 e Cristiano2,
Quero falar 2 coisas:
- Sobre o while:
Poxa Law, assim vc me derruba, disse que fez o curso comigo e não sabia nada
sobre o while na leitura... Quequeisso! Cara, fizemos um monte de exercício
*sempre usando* o while com read. Qdo ensino while, passo rapidamente por
ele e afirmo que seu maior uso é junto com o cmd read. Digo ainda
normalmente que, nas outras linguagens, o while é executado enquanto *uma
condição* for verdadeira. No shell, ele será executado enquanto *uma
instrução* for bem executada e o read (em se tratando de arquivos) só volta
um código falso ($? != 0) qdo encontra o EOF.

Isso sempre é fartamente falado na aula, como tb está escrito naseção
"Afinal como se lê?" do livro que vc ganhou no curso.

- Sobre as variáveis:
Para falar sobre isso vou dividir a msg do Cristiano em 2 partes:
"Já pensou em usar nome de variáveis em caixa alta? IHMO, nomes de variáveis
capitalizados são muito ruins de se escrever (perde-se muito tempo
combinando shift+tecla), além de ruins de se ler no meio do código e pode
causar muitos bug por erro de digitação."

Concordo plenamente, já que capitalizado (termo que não gosto) vem de
Capital Letter que em inglês é letra maiúscula e são ruins de escrever pq
tem-se que fazer a combinação de shift+letra que pode... (aquilo tudo que
ele escreveu). Só que o início do seu parágrafo ele mesmo discorda disso
quando pergunta: "Já pensou em usar nome de variáveis em caixa alta?". Juro
que não entendi, pois para mim caixa alta e capitalizado são sinônimos (a
não ser que ele esteja querendo chamar de capitalizada a variável cuja
primeira letra seja maiúscula, que é como eu costumo usar).

Depois o Cristiano fala outra coisa que eu tb não concordo: "Mas esta é
minha opinião. Quer um argumento técnico? Os nomes de variáveis no código
fonte do kernel são escritos, por padrão, em caixa baixa. Então, se você
resolver usar caixa baixa também, coisas muito ruins podem acontecer...".
As variáveis do kernel normalmente são em minúsculas e muitas são precedidas
por um ou dois sublinha, mas e daí o que o kernel tem a ver com o teu
ambiente shell?. Defendo o uso de variáveis em caixa baixa (exceto a
primeira letra de cada palavra) pq *todas* as variáveis de ambiente são em
caixa alta, e tem um monte delas (todas exportadas) que muitos não conhecem.
A quiza de exemplo, vou mostrar uma coisa que pode facilmente ocorrer:

$ echo $USER   # Isso é uma variável do sistema
julio
$ read -p "Nome do usuário: " USER
Nome do usuário: ddd
$ echo $USER
ddd

Como vc viu a variável do sistema foi pro saco.
PELAMORDIDEUS, NÃO FAÇA ISSO!!! <- isso não é um grito, é uma variável de
ambiente. ;)

Essa variável eu chamaria de $User ou $NomeDoUsuario, dependendo do saco do
dia. Gosto da 1a letra de cada palavra em maiúsculo, pq evita o sublinha e
distingue de instrução qdo se lê um programa. Me diga, como é mais fácil de
escrever e melhor de ler: $NomeDoUsuario ou $nome_do_usuario?

Abraços,
Julio
Cursos de Shell e Zenity em 2 fins de semana?
- Aracaju turma de Shell em 12/05 - address@hidden;
- DF turma de Shell em 12/06 - ligue (61)3223-3000;
- RJ turma de Shell em 14/06 - ligue (21)2210-6061;
- Floripa turma de Shell e Zenity 12/07 – address@hidden;
- Turmas fechadas em outras cidades ligue (21)8112-9988.


Em 3 de maio de 2010 21:10, Lawrence Waclawiak
<address@hidden>escreveu:

> Boa noite Cristiano.
>
> Pensar em usar eu havia pensado, porém a forma que conhecia para usar o
> while para ler um arquivo linha a linha era algo lusitano.
> Não sabia que o while tinha a facilidade de por si só ler o arquivo
> linha a linha, para isso eu criava um contador(COUNT) e com o comando
> "LINE=$(awk NR==$COUNT arquivo)" capturava cada linha para depois com o
> cut recuperar os campos.
>
> A solução do MrBits foi praticamente igual a sua mas o que realmente fez
> o ganho astronômico de desempenho foi a sacada dele de escrever tudo de
> uma só vês no arquivo de saída.
>
> O grep eu sabia dessa facilidade, mas acabei escrevendo usando o cat |
> por costume de quando eu ainda não sabia, vou cuidar para não faze-lo mais.
>
> Sobre as variáveis agora eu fiquei na dúvida pois eu sempre as usava em
> caixa alta, até que fiz o Curso de Shell com o Júlio e ele indicou que
> deveríamos usar capitalizadas pois as variáveis de ambiente são por
> default em caixa alta.
>
> Fiz alguns testes e constatei que não existe perigo de eu alterar uma
> variável de ambiente de dentro de um script apenas atribuindo valores a
> ela, ela só realmente muda o valor da variável de ambiente se eu usar o
> export $VAR, porém se eu tentar ler uma variável que ainda não tenha
> algum valor atribuído e que possua o mesmo nome da uma variável de
> ambiante, eu receberei o valor dessa variável de ambiente, também,
> depois de atribuir um valor a uma variável com o mesmo nome de uma
> variável de ambiente eu não posso mais recuperar o valor da variável de
> ambiente.
> Que confusão...
> Bom, concordo 100% que é muito melhor para visualizar no código as
> variáveis em caixa alta, então será que uma melhor opção não seria usar
> as variáveis em caixa alta mas com um _ no início? tipo $_USER $_NAME
> $_STATUS ?
>
> Acho que assim uniria o útil ao agradável.
>
> Muito obrigado pela sua atenção.
>
> Abraços,
> Lawrence Waclawiak
>
>
> Cristiano escreveu:
> >
> > --- Em address@hidden
> > <mailto:shell-script%40yahoogrupos.com.br<shell-script%2540yahoogrupos.com.br>>,
> Lawrence Waclawiak
> > <lawrencebbw@...> escreveu
> > >
> > > Tudo funciona corretamente porém a maquina demora um pouco para
> > > processar toda a lista e montar o dhcpd.conf, gostaria de saber se
> > > alguém conhece uma forma mais eficiente de recuperar o valor desses
> > > campos que não seja o que eu utilizei nem o awk -F';' '{print $x}' pois
> > > esse é mais pesado ainda.
> >
> > Já pensou em usar o while?
> >
> > http://pastebin.com/8Xdf5j9F <http://pastebin.com/8Xdf5j9F>
> >
> > 2 Dicas que você não pediu, se me permite:
> >
> > a) O grep tem capacidade de ler o conteúdo dos arquivos. Portanto,
> > você não precisa de um pipe para pesquisar regex dentro de arquivos
> > textos, como fez em na linha 43 do script (vide "cat $Database|egrep
> > -v '^#'"). Basta indicar o nome do arquivo após o padrão da regex,
> > como fiz na sugestão.
> >
> > b) Já pensou em usar nome de variáveis em caixa alta? IHMO, nomes de
> > variáveis capitalizados são muito ruins de se escrever (perde-se muito
> > tempo combinando shift+tecla), além de ruins de se ler no meio do
> > código e pode causar muitos bug por erro de digitação. Mas esta é
> > minha opinião. Quer um argumento técnico? Os nomes de variáveis no
> > código fonte do kernel são escritos, por padrão, em caixa baixa.
> > Então, se você resolver usar caixa baixa também, coisas muito ruins
> > podem acontecer.... ;-)
> >
> >
>
>
>
>
> ------------------------------------
>
> ---------------------------------------------------------------------
> Esta lista não admite a abordagem de outras liguagens de programação, como
> perl, C etc. Quem insistir em não seguir esta regra será moderado sem prévio
> aviso.
> ---------------------------------------------------------------------
> Sair da lista: address@hidden
> ---------------------------------------------------------------------
> Esta lista é moderada de acordo com o previsto em
> http://www.listas-discussao.cjb.net
> ---------------------------------------------------------------------
> Servidor Newsgroup da lista: news.gmane.org
> Grupo: gmane.org.user-groups.programming.shell.brazil
>
> Links do Yahoo! Grupos
>
>
>


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



reply via email to

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