Inserir delimitador entre os caracteres [RESOLVIDO]

1. Inserir delimitador entre os caracteres [RESOLVIDO]

andre luiz v lozano
alozano

(usa Outra)

Enviado em 01/02/2010 - 19:46h

Esotu com um problema e creio que com AWK ou SED possa ser resolvido facilmente, vamos la:
Tenho um arquivo com aproximadamente 100 mil linhas, preciso inserir em determinadas posições delimitadores em todas as linhas, segue exemplo abaixo:

Registro original:
B100000000123020309887776443333008800000000000000001999999999999999900000000005S

Após inserir delimitador "|"
B1|00000|00012302|0309887776443333|0|0|8800000|00000000000|19999999999999999|0000000|0005|S

Como posso fazer isso?

Obrigado,
André


  


2. Re: Inserir delimitador entre os caracteres [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 01/02/2010 - 19:55h

explica melhor, pois nao entendi nada

soh sei que python eh muito bom para manipular caracteres


3. Re: Inserir delimitador entre os caracteres [RESOLVIDO]

andre luiz v lozano
alozano

(usa Outra)

Enviado em 01/02/2010 - 20:12h

Então preciso formatar os registros do arquivo para realizar inserção no banco de dados, ou seja, tenho uma linha com os campos todos em seguencia sem nenhum separador e preciso quebrar os campos, segue abaixo o camando que estou tentando utilizar

sed -r 's/^(.{2})(.{2})(.{7})(.{6})(.{4})(.{4})(.{4})(.{1})(.{1})(.{6})(.{14})(.{1})(.{18})(.{1})(.{1})(.{2})(.{5})(.{1})(.*)$/"\1";"\2";"\3";"\4";"\5";"\6";"\7";"\8";"\9";"\10";"\11";"\12";"\13";"\14";"\15";"\16";"\17";"\18"/' testeB1.txt

Até o campo 9 esta fazendo certinho, mas a partir do 10 ele esta pegando como se fosse o 1 e enserindo 10.. segue abaixo resultado do camando:

Conteudo do arquivo:
B101001003300063301271920012711000130000000000040006526778035664703600010000003S
B101001005700201201271502012711000130000000000020006518544424765202300010000005S
B101001005700215401271739012711000130000000000060006128019021103015800010000007S
B101001007800212601271304012711000130000000000020006428304023952303400010000009S


Resultado do comando:
"B1";"01";"0010033";"000633";"0127";"1920";"0127";"1";"1";"B10";"B11";"B12";"B13";"B14";"B15";"B16";"B17";"B18"
"B1";"01";"0010057";"002012";"0127";"1502";"0127";"1";"1";"B10";"B11";"B12";"B13";"B14";"B15";"B16";"B17";"B18"
"B1";"01";"0010057";"002154";"0127";"1739";"0127";"1";"1";"B10";"B11";"B12";"B13";"B14";"B15";"B16";"B17";"B18"
"B1";"01";"0010078";"002126";"0127";"1304";"0127";"1";"1";"B10";"B11";"B12";"B13";"B14";"B15";"B16";"B17";"B18"



4. Re: Inserir delimitador entre os caracteres [RESOLVIDO]

Denis Doria
thuck

(usa Debian)

Enviado em 01/02/2010 - 20:41h

Isso deve resolver, embora dê para fazer melhor...

echo 'B100000000123020309887776443333008800000000000000001999999999999999900000000005S'|awk '{print substr($1,1,2)"|" substr($1,3,5)"|"substr($1,8,8)"|"substr($1,16,16)"|"substr($1,32,1)"|"substr($1,33,1)"|"substr($1,34,7)"|"substr($1,41,11)"|"substr($1,52,17)"|"substr($1,69,7)"|"substr($1,76,4)"|"substr($1,80,1)}'
B1|00000|00012302|0309887776443333|0|0|8800000|00000000000|19999999999999999|0000000|0005|S



5. sed

Marcos Paulo Ferreira
Daemonio

(usa Slackware)

Enviado em 01/02/2010 - 23:06h

A expressão do sed deu problema porque o número de retrovisores é 9. Daí quando voce tenta
fazer \10, o sed interpreta como o retrovisor 1 seguido de zero.
Então pensando nisso eu fiz um script sed com sucessivos comandos s///, ficou assim:




#!/bin/sed -rf
s/^.{2}/&|/
s/\|.{5}/&|/
s/.*\|.{8}/&|/
s/.*\|.{16}/&|/
s/.*\|.{1}/&|/
s/.*\|.{1}/&|/
s/.*\|.{7}/&|/
s/.*\|.{11}/&|/
s/.*\|.{17}/&|/
s/.*\|.{7}/&|/
s/.*\|.{4}/&|/

O negócio é pegar o último "|" e contar {x} caracteres depois dele.

Acho que é isso.
t+


6. Re: Inserir delimitador entre os caracteres [RESOLVIDO]

WlayOSan
wesllay

(usa CentOS)

Enviado em 11/02/2010 - 19:33h

Pessoal testei estas dicas de vcx e nenhuma funcionou, mas a questão que eu precisei era a seguinte: a linha que contivesse "C190" deveria ser inserido no final de sua linha o caracter "|" (barra). Será que alguém poderia me ajudar?


7. Re: Inserir delimitador entre os caracteres [RESOLVIDO]

Marcos Paulo Ferreira
Daemonio

(usa Slackware)

Enviado em 11/02/2010 - 21:41h

Creio que você postou no lugar errado porque o próprio dono to tópico marcou como resolvido. =D

Mas nesse seu caso aí, você pode usar o sed:

$ sed '/C190/s,$,|,'

Acho que é isso.
t+






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts