awk, corta caracteres de la subcadena

awk, corta caracteres de la subcadena

Tengo el siguiente csv. Estoy intentando eliminar el 20 de 2017 para que tenga el formato 3717 o 31817. Las posiciones siempre son diferentes debido a que algunas fechas tienen días de un solo dígito. Dado que el año siempre tiene 4 dígitos, ¿cómo puedo eliminar el 20 de la segunda columna de derecha a izquierda?

12 322017 EODTRANSACCIÓN J 87.75   
12 3232017 EODTRANSACCIÓN J 155  
45 3302017 EODTRANSACCIÓN J 270 

Rendimiento esperado

12 3217 EODTRANSACCIÓN J 87.75   
12 32317 EODTRANSACCIÓN J 155  
45 33017 EODTRANSACCIÓN J 270

Respuesta1

awkacercarse:

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

La salida:

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 los dígitos del segundo campo excepto el3rd y4º dígito al final

Respuesta2

Reemplace el segundo campo con el resultado de: sustituir el primer "20" en el segundo campo con la cadena vacía, luego imprima la línea resultante:

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

información relacionada