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