Filtrar archivo por fechas que pueden estar en cualquier lugar de una columna particular.
Digamos que tengo un archivo con dos columnas:
blahblah2020-02-03_moreblah | VALUE |
blah2021-03-04blah | VALUE |
Usando awk, necesito seleccionar solo aquellas filas donde la fecha en la primera columna sea menor que alguna otra fecha que tengo. Lo molesto es que la fecha podría estar entre cualquier cadena extraña en cualquiera de los lados, o incluso no estar presente; pero siempre seguirá el formato AAAA-mm-dd. No estoy seguro de cómo terminé en una situación en la que tengo que usar awk para esto, pero aquí estoy y de antemano estoy muy agradecido.
davy.ai
Para seleccionar solo aquellas filas donde la fecha en la primera columna sea menor que una fecha dada, puedes utilizar awk y expresiones regulares juntos. Aquí está el comando que puedes usar:
Este comando primero establece una variable llamada
date
con la fecha con la que quieres comparar (en este caso, 2021-05-01). Luego, utiliza la funciónmatch
para encontrar la primera aparición de una fecha en la primera columna del archivo. La expresión regular[0-9]{4}-[0-9]{2}-[0-9]{2}
coincide con cualquier cadena en el formato “YYYY-mm-dd”.Si se encuentra una coincidencia, se utiliza
substr
para extraer la cadena de fecha. Luego, esta fecha se compara con la variabledate
utilizando el operador menor que (<
). Si la fecha de la primera columna es menor que la fecha dada, se imprime toda la fila utilizando la instrucciónprint
.Ten en cuenta que este comando asume que la cadena de fecha siempre está en el mismo formato: YYYY-mm-dd. Si el formato cambia, la expresión regular utilizada en
match
deberá actualizarse en consecuencia.