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

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

Re: Quebra de campos em registros de um arquivo.


From: eoac
Subject: Re: Quebra de campos em registros de um arquivo.
Date: Wed, 30 Jun 2004 13:10:19 -0000
User-agent: eGroups-EW/0.82

Team,
Esquece o que eu falei dos espaços pois fiz um teste com um registro 
só com meia duzia de espaços e rolou.

Preciso saber como aplicar a solução usando o sed em um arquivo (o 
qual contem "n" registros? 

Obrigado Lista
[]´s

--- Em address@hidden, "eoac" <eoac@y...> escreveu
> Blz Aurelio, funcionou! 
> só que olha só o que esta acontecendo.
> 
> Para poder fazer em todo o arquivo estou atribuindo a varialvel 
var$ 
> um cat do arquivo de registros ( var= `cat a.unl`) para assim poder 
> executar o sed. Mas ao encontrar espacos em branco no registro ele 
> retorna o seguinte erro:
> 
> ksh:01|0011106000|0|26/03/2003|31/12/2999|ASSESSORIA: not found.
> 
> 
> No exemplo de registro que enviei não haviam espaços em branco no 
> registro. Note nos exemplos abaixo no 6º campo do registro haverão 
> espaços em branco.
> 
> Como devo proceder?
> 
> Mas uma vez Obrigado!
> []´s
> eoac
> 
> 
> 01|0011106000|0|26/03/2003|31/12/2999|ASSESSORIA REL DO 
> TRABALHO|4|0|91100|1||S|
> 01|0011106000|0|26/03/2003|31/12/2999|ASSESSORIA REL DO 
> TRABALHO|4|0|91100|1||S|
> 
> --- Em address@hidden, Aurelio Marinho Jargas 
> <aureliojargas@y...> escreveu
> > ae,
> > 
> > --- eoac <eoac@y...> escreveu:
> > ...
> > >
> > 
> 
01|0011101001|0|04/02/2004|31/12/2999|ADMINISTRADOR|5|0|91100|1||S||||
> > >    ----------
> > ...
> > >    Este campo deverá ser quebrado conforme o exemplo abaixo:
> > > 01|001 1 101 001|0|04/02/2004|31/12/2999|ADMINISTRADOR...
> > >     |  |  |   |
> > >     |  |  |   | 
> > > 
> 01|001|1|101|001|0011101001|0|04/02/2004|31/12/2999|ADMINISTRADOR...
> > 
> > 
> > o problema é chato e a solucao dificil, mas funciona :)
> > 
> > 
> > $ echo $VAR
> > 01|0011101001|0|04/02/2004|31/12/2999|ADMINIST...
> > 
> > $ echo $VAR |
> >   sed 's/\([^|]*|\)\(\(...\)\(.\)\(...\)\(...\)\)/\1
> \3|\4|\5|\6|\2/' 
> > 01|001|1|101|001|0011101001|0|04/02/2004|31/12/2999|ADMINIST...
> > 
> > 
> > se teu sed tiver a opção -r, aí não precisa dos escapes com \
> > e fica mais fácil de ler:
> > 
> > $ echo $VAR | 
> >   sed -r 's/([^|]*\|)((...)(.)(...)(...))/\1\3|\4|\5|\6|\2/'
> > 01|001|1|101|001|0011101001|0|04/02/2004|31/12/2999|ADMINIST...
> > 
> > 
> > o conteúdo do primeiro ( ) é o primeiro campo, que nao interessa.
> > depois cada caractere . é marcado nos agrupamentos que você
> > indicou. depois tudo isso é trocado por:
> > 
> >      \1\3|\4|\5|\6|\2
> > 
> > que é a formatação desejada, sendo cada \N uma referência ao
> > conteúdo de cada um dos grupos abertos antes com os parenteses.
> > 
> > no fundo o conceito é simples, mas chato :)
> > 
> > falou!
> > 
> > =====
> > -- 
> > Aurelio Marinho Jargas, Curitiba, Conectiva
> > A odisseia verde no FISL http://aurelio.net/curso/fisl
> > 
> > 
> 
______________________________________________________________________
> > 
> > Participe da pesquisa global sobre o Yahoo! Mail: 
> > http://br.surveys.yahoo.com/global_mail_survey_br


reply via email to

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