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

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

Re: [shell-script] Variaveis com e sem espaço


From: Roberto Alves
Subject: Re: [shell-script] Variaveis com e sem espaço
Date: Tue, 6 Sep 2011 14:58:50 -0300

Vlw, Tiago,
não sei porque eu fui usar o for e não o while que é o que sempre uso.
Voltei ontem de férias e resolvi ser diferente, daí fiquei empacado nele.
Já coloquei os greps, cuts e tudo mais. E vou juntar com um paste, as
saídas de outros arquivos para fazer uma bagunça só.
Consegui, obrigado.

Mas seu tivesse que mudar o IFS em um arquivo como sugeriram, eu iria
me atrapalhar pois algumas linhas têm espaços (ou tabs) e outras não,
o pior seria para fazer a procura no outro arquivo que tem os nomes
que procuro exatamente como nessa lista (com espaços ou tabs).

Agora, quanto ao more ou cat, nunca reparei problemas entre usar um ou o outro.
Mas já que falaste vou tentar lembrar de usar o cat.

Ah, pra acabar, eu tive que usar mesmo o "$i" pois usei um grep e só
consigo a saída correta com as aspas.

while read i ; do  grep "$i" direitos.txt ; done < lista_r3.txt
(resumidamente)

abraço,
Roberto




Em 6 de setembro de 2011 14:32, Tiago Peczenyj
<address@hidden> escreveu:
> Ola
>
> Particularmente eu procuro evitar a construção
>
> for variavel in $( subcomando )
>
> pois o for espera os valores do subcomando separados por caracteres que
> fazem parte do IFS e para fazer isso, ler linha a linha, eu teria que poluir
> um pouco o código.
>
> porem se vc precisa ler linha-a-linha vc tem algumas opções
>
> 1- usar o comando read, que faz justamente isso, le tudo até uma \n
>
> exemplo:
>
> bash$ while read i ; do echo $i ; done < arquivo
>
> 2- usar awk ou sed para processar as linhas caso a logica seja simples (as
> vezes é).
>
> Agora eu procuraria evitar:
>
> a) usar o comando more dentro de um subshell, o more existe para "paginar"
> um resultado, esperando uma interação manual para "ler mais". no minimo vc
> poderia usar o cat
>
> b) evitar usar crase para criar subshells. eu prefiro a construção $( ) que
> possui um caracter a mais porém chama mais atenção e permite colocar outros
> $() no interior (se bem q eu não pensaria em abusar disso).
>
> Anos atras eu li um livro que comparava varias formas de ler arquivos
> linha-a-linha, se encontrar eu dou uma resumida aqui.
>
> 2011/9/6 Roberto Alves <address@hidden>
>
>> **
>>
>>
>> Boa tarde, pessoal,
>> mais uma vez eu bato com arquivos com e sem espaços (ou tabs) e não
>> sei sair de lá.
>>
>> Estou com um arquivo assim:
>>
>> Prata@/home/load64/BID>more list_r3.txt
>> 1AB 0002  AB
>> 1BV 0005  AB
>> 1AJ  0003  AB
>> 1AP  0001  AB
>> 1CBTU 0011  AB
>> 1FVB  0001  AB
>> 1FV 0001  BA
>> 1FSF 0001  BA
>> 2FSS 0001  BA
>> 2LEM  0001  BA
>> 3LEN  0002  BA
>> 3N   0001  AB
>> 3NJ  0001  BA
>> 4-ME-4A-AB
>> 6-ME-5DRIO-AB
>>
>> O que eu preciso é ler estes nomes e procurar em outros arquivos
>> diversos e quando encontrar pegar algumas colunas de informação.
>> Pegar as colunas vai ser mais fácil quando eu conseguir fazer o meu
>> valor da linha (com espaço) ser passado para a variável que pedi.
>>
>> Abaixo, eu fiz um 'echo' só pra simplificar o que eu queria.
>>
>> Prata@/home/load64/BID> for i in `more list_r3.txt` ; do echo "$i" ; done
>> 1AB
>> 0002
>> AB
>> 1BV
>> 0005
>> AB
>> 1AJ
>> 0003
>> AB
>> 1AP
>> 0001
>> AB
>> 1CBTU
>> 0011
>> AB
>> 1FVB
>> 0001
>> AB
>> 1FV
>> 0001
>> BA
>> 1FSF
>> 0001
>> BA
>> 2FSS
>> 0001
>> BA
>> 2LEM
>> 0001
>> BA
>> 3LEN
>> 0002
>> BA
>> 3N
>> 0001
>> AB
>> 3NJ
>> 0001
>> BA
>> 4-ME-4A-AB
>> 6-ME-5DRIO-AB
>>
>> O que acontece é que apenas as duas últimas linhas, que não tinham
>> espaço, aparecem corretas e assim eu consigo pesquisar esses dois
>> valores nos outros arquivos e as linhas com espaços são cortadas, não
>> me deixando fazer minhas procuras e filtros.
>>
>> Será que vou ter que tratar as linhas que têm espaços pra fazer os
>> meus filtros com cut, awk, tr e o que for, pra só depois conseguir
>> trabalhar o valor?
>>
>> abraços,
>> Roberto
>>
>>
>
>
>
> --
> Tiago B. Peczenyj
> Linux User #405772
>
> http://pacman.blog.br
>
>
> [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]