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

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

Re: Tratamento linha a linha


From: Leonardo Ayres
Subject: Re: Tratamento linha a linha
Date: Wed, 15 Dec 2004 20:21:21 -0000
User-agent: eGroups-EW/0.82

Olá Gentil,

O problema é mais ou menos este sim.
É necessário incluir mesmo este trecho de código:
 for linha in `cat Teste.txt`; do
      let i++
      l[${i}]=${linha}
 done

Na verdade, eu teria um arquivo de entrada assim:

A
nome1|endereco1|telefone1
B
nome2|endereco2|telefone2
D
nome3|endereco3|telefone3
D
nome4|endereco4|telefone4
A
nome5|endereco5|telefone5
B
nome6|endereco6|telefone6

E teria que resultar um arquivo do tipo:
nome1|endereco1|telefone1|7
nome2|endereco2|telefone2|3
nome3|endereco3|telefone3|2
nome4|endereco4|telefone4|2
nome5|endereco5|telefone5|7
nome6|endereco6|telefone6|3

Onde, dependendo do que veio antes, eu coloco um código depois, que 
eu vou buscar na base de dados.

Acrescente a este problema, que eu tenho uma linha em branco a cada 
duas linhas:
A
nome1|endereco1|telefone1

B
nome2|endereco2|telefone2

D
nome3|endereco3|telefone3

D
nome4|endereco4|telefone4

A
nome5|endereco5|telefone5

B
nome6|endereco6|telefone6


--- Em address@hidden, Gentil de Bortoli Júnior 
<listas@b...> escreveu
> Leonardo, dei uma pirada aqui. Não sei se é o que vc quer mas, de 
qq 
> forma, pode servir como exemplo.
> 
> Veja.
> 
> $cat Teste.txt
> AAA
> BBB+
> CCC
> DDD
> EEE
> FFF+
> GGG+
> HHH
> III
> JJJ+
> KKK
> 
> Aí fiz um script assim:
> 
> ----------------------------8<----------------------------
> 
> #!/bin/bash
> clear
> echo "Arquivo Original"
> echo "-----------------------------------------"
> cat Teste.txt
> echo "-----------------------------------------"
> echo
> 
> codigo="+"
> 
> for linha in `cat Teste.txt`; do
>      let i++
>      l[${i}]=${linha}
> done
> 
> echo "Arquivo Tratado"
> echo "-----------------------------------------"
> for linha in `seq ${i}`; do
>      if [ `echo ${l[${linha}]} | grep "${codigo}"` ]; then
>          echo "${l[${linha}]}"
>          echo "####${l[$((${linha}+1))]}####"
>      else
>          echo "${l[${linha}]}"
>      fi
> done
> echo "-----------------------------------------"
> 
> ---------------------------->8----------------------------
> 
> E o resultado desse script é esse:
> 
> Arquivo Original
> -----------------------------------------
> AAA
> BBB+
> CCC
> DDD
> EEE
> FFF+
> GGG+
> HHH
> III
> JJJ+
> KKK
> -----------------------------------------
> 
> Arquivo Tratado
> -----------------------------------------
> AAA
> BBB+
> ####CCC####
> CCC
> DDD
> EEE
> FFF+
> ####GGG+####
> GGG+
> ####HHH####
> HHH
> III
> JJJ+
> ####KKK####
> KKK
> -----------------------------------------
> 
> Ou seja, as linhas abaixo daquelas que possuem um sinal de "+"
> são mostradas entre "####".
> 
> Bom, eu não dou as melhores soluções por aqui. De repente surge 
algo 
> bem simples, em uma linha. :)
> 
> Se precisar de alguma explicação, peça.
> 
> []s
> Gentil.
> 
> Leonardo Ayres wrote:
> > 
> > Pessoal,
> > 
> > Eu preciso tratar um arquivo linha por linha. Como eu faço isso 
num 
> > shell?
> > 
> > O arquivo tem numa linha, um codigo e dependendo do codigo de uma 
> > linha, eu dou um tratamento diferente à linha seguinte.




reply via email to

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