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: Tiago Peczenyj
Subject: Re: [shell-script] Variaveis com e sem espaço
Date: Tue, 6 Sep 2011 15:21:38 -0300

humm

acho que o que vc quer fazer é

grep -f lista_r3.txt direito.txt

from grep man:

       -f FILE, --file=FILE
              Obtain patterns from FILE, one per line.  The empty file
contains  zero  patterns,  and  therefore matches nothing.

a menos que vc precise fazer algo entre uma linha e outra OU o grep que vc
utiliza não suporta esta opção.

serve?

2011/9/6 Roberto Alves <address@hidden>

> **
>
>
> 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
> >
> >
> >
>
>  
>



-- 
Tiago B. Peczenyj
Linux User #405772

http://pacman.blog.br


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



reply via email to

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