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

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

Re: Editar um arquivo de uma linha com SED


From: Marcos Gattermeyer
Subject: Re: Editar um arquivo de uma linha com SED
Date: Mon, 12 Mar 2007 17:01:14 -0000
User-agent: eGroups-EW/0.82

Flavio, resolvi o meu problema e estou postando
o aqui

De qq forma Obrigado

#!/bin/bash
# criei um campo no final do arquivo chamado sep e completei com xxx
# separo todo o arquivo dbf em linhas cujo ultimo campo = "xxx"
sed 's/xxx/\n/g' prod.dbf > prod1.dbf
# copio o cabecalho do dbf que tem 3 linhas para outro arquivo
sed -n '1,3p' prod1.dbf > cab.dbf
# deleto as 3 linhas do cabecalho
sed '1,3d' prod1.dbf > corpo.dbf
# faco a troca de 18.00 para 17.00 nas linhas que possuam o produto,
(1 ICMS por linha)
sed '/GIZ/s/18.00/17.00/g' -i corpo.dbf
#junto todasd as linhas em uma so no novo corpo do dbf
sed ':a;$!N;s/\n/xxx/;ta;' corpo.dbf > corpo1.dbf
#junto o cabecalho do dbf com o corpo e resolvido o problema
cat cab.dbf corpo1.dbf > final.dbf
rm -f prod1.dbf
rm -f cab.dbf
rm -f corpo.dbf
rm -f corpo1.dbf




--- Em address@hidden, "Flavio Junior" <billpp@...>
escreveu
>
> Possivel é, viavel eu jah nao sei dizer..
> Com awk voce poderia fazer o que ta dizendo, mas ao meu ver nao vale
a pena.
> 
> Qual o problema de ter varios produtos? no caso ali o que mudaria
seria de
> giz pra outra coisa?
> Imaginamos um arquivo com uma lista dos produtos:
> giz verde
> giz amarelo
> giz
> lapis
> lapis preto
> borracha
> papel
> papel timbrado
> 
> OIFS=$IFS
> IFS='
> '
> while read produto; do
>     sed -i "s/\($produto\ *\)18.00pc/\117.00pc/g" arquivo.dbf
> done < lista.txt
> IFS=$OIFS
> 
> Eu usei o -i do sed ai, isso vai alterar o arquivo diretamente sem
gerar um
> backup. Seria interessante fazer testes antes.
> 
> É bunita solucao? Eh nada.. vai passar o arquivo `wc -l lista.txt`
vezes,
> mas acho melhor do que o que vc tava pensando.
> Como conseguir a lista de produtos? passa um pedaço do arquivo que
voce tem
> ai q nos tentamos ajudar.
> 
> 
> Flavio do Carmo Junior
> 
> On 3/12/07, Marcos Gattermeyer <mgatter@...> wrote:
> >
> >   Flavio,
> >
> > Tambem nao daria certo porque posso ter uma gama enorme de cores e
> > protudos para fazer a substituicao.
> >
> > Havia pensado em ponteiramento na string por exemplo, faço uma
> > primeira pesquisa procurando por "giz" ponteirando ai, e a partir dai
> > faço uma segunda pesquisa com troca de 18.00 para 17.00 ponteirando
> > novamente, faço nova pesquisa ..... assim por diante.
> >
> > Sera que e possivel ?
> >
> > Senao vou ter que criar um programinha so para isso em outra
> > plataforma (arrepio)
> >
> > Obrigado
> >
> > Marcos
> >
> > --- Em address@hidden
<shell-script%40yahoogrupos.com.br>,
> > "Flavio Junior" <billpp@>
> > escreveu
> > >
> > > Com certeza..
> > > Porem, se tratando de um arquivo .dbf (se nao me engano, ele eh
> > reconhecido
> > > como uma unica linha ne?)
> > > um coringa poderia ser um problemao.
> > >
> > > Na verdade, acho que a opcao de teste poderia ser
> > >
> > > junior@babalu:~$ cat teste
> > > 100 teste 18.00pc 20.00 101 giz amarelo 18.00pc 1.00 102 lapis
18.00pc
> > > 102.00 100 teste 18.00pc 20.00 101 giz verde 18.00pc 1.00 102 lapis
> > 18.00pc
> > > 102.00 100 teste 18.00pc 20.00 101 giz azul 18.00pc 1.00 102 lapis
> > 18.00pc
> > > 102.00 100 teste 18.00pc 20.00 101 giz 18.00pc 1.00 102 lapis
> > 18.00pc 102.00
> > >
> > > junior@babalu:~$ sed 's/giz\ \(\(verde\|azul\|amarelo\|cores\)\
\)\?\ *
> > > 18.00pc/giz \117.00pc/g' teste
> > > 100 teste 18.00pc 20.00 101 giz amarelo 17.00pc 1.00 102 lapis
18.00pc
> > > 102.00 100 teste 18.00pc 20.00 101 giz verde 17.00pc 1.00 102 lapis
> > 18.00pc
> > > 102.00 100 teste 18.00pc 20.00 101 giz azul 17.00pc 1.00 102 lapis
> > 18.00pc
> > > 102.00 100 teste 18.00pc 20.00 101 giz 17.00pc 1.00 102 lapis
> > 18.00pc 102.00
> > >
> > > junior@babalu:~$
> > >
> > > Presta atenção no sed que eu optei por usar todas as cores
possiveis na
> > > string do grupo... voce pode usar algo como [a-z]+ ... mas pensando
> > em um
> > > arquivo .dbf, cuidado com a estrutura. Tem mto lixo nessas coisas.
> > >
> > > Tenta entender a regex tambem, tentei manter o numero de espaços
> > identicos
> > > pra evitar problemas.
> > >
> > >
> > > Flavio do Carmo Junior
> > >
> > >
> > >
> > > On 3/12/07, Marcos Gattermeyer <mgatter@> wrote:
> > > >
> > > > Bom dia Flavio,
> > > >
> > > > Nao daria certo porque posso ter "giz verde pc" ou giz azul pc",
> > > > realmente preciso pesquisar a string "giz" e a partir dai
pesquisar o
> > > > ICMS "18.00" e substituir, depois continuar a pesquisa pois
posso ter
> > > > mais de um "giz" na tabela para substituir o ICMS.
> > > >
> > > > Pensei na sua solucao em usar um coringa entre o "giz" e o
ICMS, daria
> > > > para fazer isso?
> > > >
> > > > Obrigado
> > > >
> > > > Marcos
> > > >
> > > > --- Em
address@hidden<shell-script%40yahoogrupos.com.br>
> > <shell-script%40yahoogrupos.com.br>,
> > > > "Flavio Junior" <billpp@>
> > > > escreveu
> > > > >
> > > > > Um simples:
> > > > >
> > > > > $ sed 's/giz 18.00pc/giz 17.00pc/g' arquivo.dbf
> > > > >
> > > > > nao resolve ?
> > > > >
> > > > >
> > > > > Flavio do Carmo Junior
> > > > >
> > > > > On 3/12/07, Marcos Gattermeyer <mgatter@> wrote:
> > > > > >
> > > > > > Entao Bruno,
> > > > > >
> > > > > > Dessa forma altero todos os ICMS de 18.00 para 17.00,
Gostaria de
> > > > > > alterara somente o ICMS que estiver entre a palavra "giz" e a
> > proxima
> > > > > > palavra "pc".
> > > > > >
> > > > > > De qualquer forma obrigado,
> > > > > >
> > > > > > se alguem tiver mais alguma dica agradeco ?
> > > > > >
> > > > > > --- Em
> > address@hidden <shell-script%40yahoogrupos.com.br>
> > <shell-script%40yahoogrupos.com.br>
> > > > <shell-script%40yahoogrupos.com.br>,
> > > > > > "Bruno Gunter Fricke"
> > > > > > <gunter@> escreveu
> > > > > > >
> > > > > > >
> > > > > > > Marcos, seria algo como:
> > > > > > >
> > > > > > > $ sed -e "s/$18.oo/$17.oo/g" dbf
> > > > > > >
> > > > > > >
> > > > > > > ----- Original Message -----
> > > > > > > From: Marcos Gattermeyer
> > > > > > > To:
> > address@hidden <shell-script%40yahoogrupos.com.br>
> > <shell-script%40yahoogrupos.com.br>
> > > > <shell-script%40yahoogrupos.com.br>
> > > > > > > Sent: Friday, March 09, 2007 2:17 PM
> > > > > > > Subject: [shell-script] Editar um arquivo de uma linha
com SED
> > > > > > >
> > > > > > >
> > > > > > > Boa Tarde,
> > > > > > > A sequencia abaixo se trata de um arquivo DBF, com 5 campos
> > > > > > > COD
> > > > > > > PRODUTO
> > > > > > > ICMS
> > > > > > > TIPO
> > > > > > > VALOR
> > > > > > >
> > > > > > > k Â&CODC
> > > > > > > PRODUTOC
> > > > > > > ICMSNTIPOCVALORN
> > > > > > > 100 teste 18.00pc 20.00 101 giz 18.00pc
> > > > > > > 1.00 102 lapis 18.00pc 102.00
> > > > > > >
> > > > > > > Todo o DBF e considerado como uma unica linha, sendo assim
> > > > gostaria de
> > > > > > > pesquisar e trocar somente a sequencia ICMS de "18.00" para
> > "17.00"
> > > > > > > que vem apos a palavra "giz", e mantenha o resto intacto.
> > > > > > >
> > > > > > > tentei:
> > > > > > >
> > > > > > > sed ':a;s/^\([^giz]*,[^pc]\+\)18.00/\117.00/;ta' -i
arquivo.dbf
> > > > > > >
> > > > > > > (peguei este exemplo na internet)
> > > > > > >
> > > > > > > Mas nao funcionou.
> > > > > > >
> > > > > > > Se alguem puder me ajudar, agradeço
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > > > [As partes desta mensagem que não continham texto foram
> > removidas]
> > > > > > >
> > > > > >
> > > > > >
> > > > > >
> > > > >
> > > > >
> > > > > [As partes desta mensagem que não continham texto foram
removidas]
> > > > >
> > > >
> > > >
> > > >
> > >
> > >
> > > [As partes desta mensagem que não continham texto foram removidas]
> > >
> >
> >  
> >
> 
> 
> [As partes desta mensagem que não continham texto foram removidas]
>




reply via email to

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