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

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

Re: [shell-script] Re: Tratamento linha a linha


From: Felipe Bender
Subject: Re: [shell-script] Re: Tratamento linha a linha
Date: Thu, 16 Dec 2004 13:27:08 -0200
User-agent: Mozilla Thunderbird 0.9 (X11/20041103)

Não sei se entendi direito, mas retornou assim pra mim:

[felipe@punisher felipe]$ cat lixo.txt
A
FElipe|programador|0001

B
Caroline|estagiaria|0002

C
flavio|analista de testes|0003

D
andreia|secretaria|0004


[felipe@punisher felipe]$ cat lixo.txt | grep '|' -B 1
A
FElipe|programador|0001
B
Caroline|estagiaria|0002
C
flavio|analista de testes|0003
D
andreia|secretaria|0004

[]'s

Felipe Bender

Felipe Bender escreveu:
Não sei se ajuda, mas o proprio grep tem as opções -A e -B

        -A NUM, --after-context=NUM
Print NUM lines of trailing context after matching lines. Places a line containing -- between contiguous groups of
               matches.

        -B NUM, --before-context=NUM
Print NUM lines of leading context before matching lines. Places a line containing -- between contiguous groups of
               matches.


ou seja:

cat arquivo | grep -B 2 [busca]

vai te retornar 2 linhas apos a ocorrencia de [busca]

e o -A 2 voltaria 2 linhas antes da ocorrencia

[]'s
Felipe Benmder


Leonardo Ayres escreveu:

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.






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

Links do Yahoo! Grupos













---------------------------------------------------------------------
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
---------------------------------------------------------------------
Links do Yahoo! Grupos










reply via email to

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