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 14:32:33 -0300

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]



reply via email to

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