Inserindo espaço após 5 caracteres ao contar reverso

1

Eu tenho um arquivo com várias entradas, conforme abaixo:

US6DWMD01#DW01DDATAPURGE(060009/28)
US6DWMD01#DW01DDATAPURGE(060009/29)
US6DWMD01#DW01DDATAPURGE(060009/30)
US6DWMD01#DW01DDATAPURGE(060011/01)
US6DWMD01#DW11WPURESUN(060011/01)
US6TPA01#PPAORD__LDBASE(000009/26)
US6TPA01#PPAORD__LGBOX(000009/26)
US6TPA01#PPATDD__DEDMGT(060009/25)
US6TPA01#PPATDD__FLNET(060009/25)
US6TPA01#PPATDD__LORTBLS(060009/25)
US6TPA01#PPATDD__PPATTBLS(060009/25)
US6TPA01#PPATDD__P8020RP(060011/01)

Eu quero usar os comandos cut / sed / awk para inserir espaço depois de 5 caracteres quando contar reverso como abaixo:

US6TPA01#PPATDD__DEDMGT(0600 09/25)
US6TPA01#PPATDD__FLNET(0600 09/25)
US6TPA01#PPATDD__LORTBLS(0600 09/25)
US6TPA01#PPATDD__PPATTBLS(0600 09/25)
US6TPA01#PPATDD__P8020RP(0600 11/01)
    
por sriram2207 02.11.2015 / 16:29

2 respostas

3

Existem 6 caracteres, na verdade: 2 dígitos, 1 barra, 2 dígitos, 1 parênteses:

sed 's/.\{6\}$/ &/' < input > output

O $ corresponde ao fim da linha.

    
por 02.11.2015 / 16:35
2

Nas expressões regulares, $ corresponde ao final da linha. Você pode, portanto, usá-lo para coincidir com os últimos 6 caracteres (sua pergunta menciona 5, mas você mostra 6, a menos que haja um espaço à direita que você não está nos mostrando) e adicionar um espaço antes deles. Por exemplo:

  • Sed:

    sed 's/......$/ &/' file
    

    ou

    sed 's/.\{6\}$/ &/' file
    
  • GNU ou FreeBSD sed:

    sed -E 's/.{6}$/ &/' file
    
  • Perl

    perl -pe 's/.{6}$/ $&/' file
    
  • awk

    awk '{sub(/.{6}$/," &");print}' file
    
por 02.11.2015 / 16:48