awk, corte caracteres fora da substring

1

Eu tenho o seguinte csv. Eu estou tentando remover o 20 de 2017 por isso é formatado como 3717 ou 31817. As posições são sempre diferentes devido a algumas datas com dias de dígito único. Como o ano tem sempre 4 dígitos, como posso remover os 20 da segunda coluna da direita para a esquerda?

12  322017   EODTRANSACTION J    87.75   
12  3232017  EODTRANSACTION J    155  
45  3302017  EODTRANSACTION J    270 

Saída esperada

12  3217    EODTRANSACTION J    87.75   
12  32317   EODTRANSACTION J    155  
45  33017   EODTRANSACTION J    270
    
por Joseph Sortino 11.04.2017 / 18:01

2 respostas

1

awk abordagem:

awk '{match($2, /^([0-9]+)[0-9]{2}([0-9]{2})$/, a); $2=a[1]a[2]}1' file

A saída:

12 3217 EODTRANSACTION J 87.75
12 32317 EODTRANSACTION J 155
45 33017 EODTRANSACTION J 270

match($2, /^([0-9]+)[0-9]{2}([0-9]{2})$/, a) - capturará todos os dígitos do segundo campo, exceto o dígito 3 rd e 4 th no final

    
por 11.04.2017 / 19:25
0

Substitua o segundo campo pelo resultado de: substituir o primeiro "20" no segundo campo pela string vazia e depois imprimir a linha resultante:

awk '{$2=gensub("20", "", 1, $2); print;}' input > output
    
por 11.04.2017 / 19:04

Tags