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