Insertar espacio después de 5 caracteres al contar hacia atrás

Insertar espacio después de 5 caracteres al contar hacia atrás

Tengo un archivo que tiene muchas entradas como se muestra a continuación:

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)

Quiero usar los comandos cut/sed/awk para insertar espacio después de 5 caracteres al contar en reversa como se muestra a continuación:

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)

Respuesta1

De hecho, hay 6 caracteres: 2 dígitos, 1 barra, 2 dígitos, 1 paréntesis:

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

El $coincide con el final de la línea.

Respuesta2

En expresiones regulares, $coincide con el final de la línea. Por lo tanto, puede usarlo para hacer coincidir los últimos 6 caracteres (su pregunta menciona 5 pero muestra 6, a menos que haya un espacio al final que no nos muestra) y agregar un espacio antes de ellos. Por ejemplo:

  • Sede:

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

    o

    sed 's/.\{6\}$/ &/' file
    
  • Configuración GNU o FreeBSD:

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

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

    awk '{sub(/.{6}$/," &");print}' file
    

información relacionada