es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Tags:  ,

Answer

  1. Avatar for 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:

    awk -v date=2021-05-01 '{ match($1, /[0-9]{4}-[0-9]{2}-[0-9]{2}/); if (substr($1, RSTART, RLENGTH) < date) print }' <nombre del="" archivo="">
    

    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ón match 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 variable date 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ón print.

    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.

Comments are closed.