corresponde e adiciona com base na posição do personagem

1

Eu tenho um arquivo em que preciso corresponder e atualizar com base em qual número / caractere está em uma posição fixa em um arquivo.

se caractere na posição 586 = 5, insira zero "0" no espaço 614 .. se caractere na posição 586 = 1, insira zero "0" no espaço 615

Eu usei sed para adicionar outros caracteres ausentes e excluir / adicionar espaços em várias posições, mas eles foram corrigidos em todo o arquivo.

    
por JMichael 15.03.2017 / 03:12

3 respostas

2

Pode ser uma opção com o awk (não testado):

$ awk 'BEGIN{FS=OFS=""}$586==5{$614="0" $614}$586==1{$615="0" $615}1' inputfile >newfile
$ mv newfile inputfile

Ao definir FS="", o delimitador awk é caractere.

    
por 15.03.2017 / 03:19
1

Supondo que você queira fazer isso em cada linha da entrada e que o deslocamento seja baseado em 1 e expresso em número de caracteres em oposição ao número de bytes, POSIXly:

sed '
  s/^.\{585\}5.\{27\}/&0/;t
  s/^.\{585\}1.\{28\}/&0/'

Ou:

awk 'length >= 613 && substr($0, 586, 1) == "5" {
       $0 = substr($0, 1, 613) "0" substr($0, 614)
       next
     }
     length >= 614 && substr($0, 586, 1) == "1" {
       $0 = substr($0, 1, 614) "0" substr($0, 615)
     }
     {print}'
    
por 15.03.2017 / 16:42
0
perl -i -pe '
   m/^.{585}\K5/ && s/.{613}\K/0/;
   m/^.{585}\K1/ && s/.{614}\K/0/;
' inoutfile
    
por 15.03.2017 / 13:36