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: Cristiano Amaral
Subject: Re: [shell-script] Re: Qual a forma mais eficiente para recuperar campos de um arquivo de texto?
Date: Mon, 3 May 2010 22:19:37 -0300

Aqui fala o Cristiano2, Julio, só para testemunho, o cmd while + read
foi quase uma tarde toda...

Em 3 de maio de 2010 22:12, Julio C. Neves <address@hidden> escreveu:
> 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]
>
>
>
> ------------------------------------
>
> ---------------------------------------------------------------------
> 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
>
>
>


reply via email to

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