[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: while em arquivo texto
From: |
pinguimrmbr |
Subject: |
Re: while em arquivo texto |
Date: |
Mon, 01 Nov 2004 22:32:41 -0000 |
User-agent: |
eGroups-EW/0.82 |
> Oi gente,
> sou novo por aqui, estou comecando com shell-script, sera que alguem
> poderia me ajudar?
>
> Tenho a seguinte situação:
>
> Diretorio ABC,teste,1000
> item1,jonas,500
> item2,junior,9
> Diretorio DEF,teste2,5000
> item10,marcia,23
> item52,brenda,35
> item1,jeffe,12
> Diretorio ZXVF,novo,1525 ....e assim por diante
>
> Queria fazer um script que pegasse a primeira linha (onde o caracter
> encontra-se na posicao 1 sempre) e atribuisse as linhas abaixo a ele
> ate encontrar novamente algo na posicao 1 e soma-se isto, depois
> novamente e assim ate terminar o arquivo.
>
> PS. As colunas sao separadas por ","
Ola, William
Tambem cheguei hoje por aqui, embora nao seja tao novo :)
Vamos la: voce soluciona o seu problema com duas linhas muito
simples. Imaginando-se que o arquivo chame-se cadastro.txt, voce
poder fazer:
egrep "^(\w)" cadastro.txt
para selecionar as linhas que iniciam-se com algum caracter "valido"
para a sua estrutura de dados, e
egrep "(^(\W)"
para selecionar as linhas que iniciam-se com caracteres "invalidos",
como o espaco, por exemplo.
Até ai, temos a maneira que vamos ler as linhas. Agora, precisamos
criar uma estrutura de controle para ler o arquivo. Comecando nosso
script
#!/bin/bash
for LINHA in `cat cadastro.txt` ; do
if [ `echo $LINHA | egrep -c "^(\w)"` -eq "1" ]; then
# achou um caracter
echo "Achei um registro Primario"
echo $LINHA
else
# nao achou um caracter
echo "Achei um registro secundario"
echo $LINHA
fi
done
Opa ! Ja estamos separando os registros "Primarios"
dos "Secundarios" ou "Filhos" do "Primario".
Para separar os campos de cada registro ( como vc mesmo disse,
separados por , ) usamos uma estrutura assim:
CAMPO1=`echo $LINHA | cut -d "," -f 1`
CAMPO2=`echo $LINHA | cut -d "," -f 2`
CAMPO3=`echo $LINHA | cut -d "," -f 3`
O final do seu e-mail esta meio confuso. Qual o resultado final que
vc espera ? Seria algo como:
Diretorio ABC,teste,1000:item1,jonas,500;item2,junior,9 ?
Veja que uma estrutura de dados rígida é mais simples de se
trabalhar, entao peguei seus 3 registros ( o principal e seus
filhos ) e formatei separando os filhos do principal por : e os
filhos por ;
Acho que por ai vc ja tem como começar. Daqui pra frente, é só
escrever codigo para gerar o resultado que vc quer. Além de shell
scripts, voce pode tentar resolver o problema com um script perl, que
ficaria menor e, por exemplo, evitaria construcoes como as do cut,
visto que vc pode fazer:
@campos = split(\,/, $linha );
e ter $campos[1], $campos[2] e assim por diante.
Va postando a evolucao do seu trabalho aqui
Um abraco
MrBiTs
- Re: while em arquivo texto,
pinguimrmbr <=