awk, corte caracteres da substring

awk, corte caracteres da substring

Eu tenho o seguinte csv. Estou tentando remover o 20 de 2017 para que fique formatado como 3717 ou 31817. As posições são sempre diferentes devido a algumas datas terem dias de um dígito. Como o ano tem sempre 4 dígitos, como posso remover o 20 da segunda coluna da direita para a esquerda?

12 322017 EODTRANSACÇÃO J 87.75   
12 3232017 EODTRANSACÇÃO J 155  
45 3302017 EODTRANSACÇÃO J 270 

Resultado Esperado

12 3217 EODTRANSACÇÃO J 87.75   
12 32317 EODTRANSACÇÃO J 155  
45 33017 EODTRANSACÇÃO J 270

Responder1

estranhoabordagem:

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 o3terceiro e4o dígito no final

Responder2

Substitua o segundo campo pelo resultado de: substituindo o primeiro "20" no segundo campo pela string vazia e imprima a linha resultante:

awk '{$2=gensub("20", "", 1, $2); print;}' input > output

informação relacionada