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

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

Re: [shell-script] Quebra de campos em registros de um arquivo.


From: Aurelio Marinho Jargas
Subject: Re: [shell-script] Quebra de campos em registros de um arquivo.
Date: Tue, 29 Jun 2004 17:53:55 -0300 (ART)

ae,

--- eoac <address@hidden> 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]