altere o formato numérico

2

Eu tenho muitas linhas como abaixo:

123; XXXXXXXXXXXXXXX; ABCDE; AAAAAAA; 08082010; 000000000000000; 03/08/10; 110000; ZZZZZZZZZZZZZZZZZ; 0002

Eu só quero alterar o formato numérico (15 dígitos) XXXXXXXXXXXXXXX para XXXXXXXXX; XXX; XXX

e

AAAAAAAA (9 dígitos) para AAAAA; AAA

com sed.

qualquer outro formato, apenas deixe o padrão

    
por racix 10.08.2010 / 06:15

2 respostas

1

Assumindo que "X" e "Y" representam dígitos e que sua linha de exemplo tem 9 "Y" dígitos (tem oito em sua pergunta, mas a divisão que você quer mostra 9), isso deve funcionar:

sed 's/;\([0-9]\{6\}\)\([0-9]\{3\}\);/;;;/;s/;\([0-9]\{9\}\)\([0-9]\{3\}\)\([0-9]\{3\}\);/;;;;/'

Você pode usar variáveis para torná-lo talvez um pouco mais legível:

dig3="[0-9]\{3\}"
dig6="[0-9]\{6\}"
dig9="[0-9]\{9\}"
sed "s/;\($dig6\)\($dig3\);/;;;/;s/;\($dig9\)\($dig3\)\($dig3\);/;;;;/"
    
por 10.08.2010 / 08:04
1

quando você tem dados estruturados e delimitadores de campo, é mais fácil usar o awk. Nos seus dados, você tem ";" como delimitadores, use-o.

awk -F";" '
{
  $2=substr($2,0,9)";"substr($2,9,3)";"substr($2,12,3)
  $4=substr($4,0,6)";"substr($4,7)
}{print}
' OFS=";" file

A instrução awk diz usar ";" como delimitadores, trabalhe nos campos 2 e 4 ($ 2, $ 4) para a saída desejada. Para alterar o formato, use substringing. Por fim, defina o separador do campo de saída de volta para ";".

isso é mais claro do que usar regex desordenado com sed.

    
por 11.08.2010 / 03:20

Tags