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: Lawrence Waclawiak
Subject: Re: [shell-script] Re: Qual a forma mais eficiente para recuperar campos de um arquivo de texto?
Date: Mon, 03 May 2010 23:58:27 -0300
User-agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.9) Gecko/20100423 Thunderbird/3.0.4

Fala Júlio.
To precisando achar tempo para poder parar e estudar o que eu quero ao invés de fazer o que eu preciso mas tá complicado. Verdade você deu sim com certeza, teu curso foi maravilhoso mas vou levar alguns meses para conseguir rever tudo para fixar, pois eu só armazeno definitivamente uma informação quando exercito ela.
Mas viva o while! Agora garanto que não esqueço mais.

Abraços

Em 03-05-2010 22:12, Julio C. Neves 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]