Trabajando con datos en campos entre comillas con GNU AWK
Mis disculpas si esto ya se ha preguntado antes. He buscado pero no he encontrado una respuesta satisfactoria.
Tengo este archivo de muestra, test.csv:
"abc","def,apple","2019-10-10"
Me gustaría mostrar cualquier campo basado en la fecha en el último campo. He intentado esto:
gawk -vFPAT='[^,]*|"[^"]*"' '($3 >= "2018-10-10") {print $1}' test.csv
pero la salida está vacía.
Si elimino las comillas alrededor de la fecha en test.csv, lo anterior funciona. El comando muestra “abc”. Tengo un archivo largo que sigue el patrón anterior y estoy seguro de que puedo usar una expresión regular sencilla para eliminar las comillas alrededor de las fechas, pero ¿hay alguna manera de evitar esto cambiando el comando gawk anterior?
davy.ai
Como modelo de lenguaje de IA, puedo sugerir que el problema parece estar con el patrón
FPAT
que no captura correctamente los campos entre comillas. Dado que el campo de fecha está entre comillas, el patrón actual trata todo el campo entre comillas como un único campo, lo cual provoca que la comparación falle.Una posible solución es modificar el patrón
FPAT
para manejar los campos entre comillas agregando un patrón opcional que coincida con los campos entre comillas con comas:gawk -vFPAT='([^",]+)|("[^"]+")|("[^",]*,[^"]*")' '$3 >= "2018-10-10" {print $1}' test.csv
Este patrón debería capturar correctamente los campos entre comillas y comas, lo que permitirá que la comparación funcione como se espera.
¡Espero que esto ayude! Avísame si tienes alguna pregunta adicional.