comando linux para processar parte da linha antes e depois de um padrão de maneira diferente

comando linux para processar parte da linha antes e depois de um padrão de maneira diferente

Meu texto original é

11  2   CDTZ - b00264ab
36  37  CDTB - c2330001

Quero que o texto de saída apareça como

11  2   CDTZ - b0:02:64:ab
36  37  CDTB - c2:33:00:01

Eu tenho que adicionar dois pontos após cada 2 caracteres para a string que segue o hífen.

Existe algum comando comum de processamento de texto para o qual eu possa instruir isso

  1. Todas as strings antes (e incluindo) do hífen devem permanecer intactas.
  2. Insira dois pontos após cada 2 caracteres após o hífen.

Em geral, tenho que processar o texto antes e depois de um padrão (hífen aqui) de maneira diferente.

Meus esforços até agora:

  • Tenho conhecimentos básicos de sede awk.
  • Se houvesse uma maneira de fazer isso seddentro de um awk, eu definiria -(hífen) como separador de campo awke faria sed 's/../&:/g;s/:$//'on $2e imprimiria a linha inteira usando print $0.

Responder1

Tente isso,

awk -v OFS='\t' '{gsub(/../,"&:",$NF); sub(/:$/,"",$NF);}1' file
11  2   CDTZ    -   b0:02:64:ab
36  37  CDTB    -   c2:33:00:01
  • gsub(/../,"&:",$NF)adicionará um final :a cada casal ou personagem.
  • sub(/:$/,"",$NF)irá remover o indesejado :no final do último campo que foi adicionado pelo anteriorgsub

Responder2

Supondo que o número hexadecimal no final tenha sempre oito caracteres:

$ sed 's/\(..\)\(..\)\(..\)\(..\)$/\1:\2:\3:\4/' file
11      2       CDTZ    -       b0:02:64:ab
36      37      CDTB    -       c2:33:00:01

informação relacionada