Saltar al contenido

Obtener la última coincidencia en un archivo usando grep

Si encuentras alguna incompatibilidad con tu código o trabajo, recuerda probar siempre en un ambiente de testing antes aplicar el código al proyecto final.

Solución:

Solución 1:

Tu podrías intentar

grep pattern file | tail -1

o

tac file | grep pattern | head -1

o

tac file | grep -m1 pattern

Solución 2:

Siempre estoy usando cat (pero esto lo hace un poco más largo): cat file | grep pattern | tail -1

Culparía a mi profesor del curso de administración de Linux en la universidad que ama a los gatos :))))

— No es necesario catear un archivo antes de grepping. grep pattern file | tail -1 y es más eficiente, también.


Solución 3:

Para alguien que trabaja con archivos de texto enormes en Unix/Linux/Mac/Cygwin. Si usa Windows, consulte esto sobre las herramientas de Linux en Windows: https://stackoverflow.com/questions/3519738/what-is-the-best-way-to-use-linux-utilities-under-windows.

Se puede seguir este flujo de trabajo para tener un buen rendimiento:

  1. comprimir con gzip
  2. use zindex (en github: https://github.com/mattgodbolt/zindex) para indexar el archivo con key
  3. consultar el archivo indexado con zq del paquete

Cita de su archivo Léame de github:

Crear un índice

zindex necesita saber qué parte de cada línea constituye el índice. Esto se puede hacer mediante una expresión regular, por campo o canalizando cada línea a través de un programa externo.

Por defecto, zindex crea un índice de archivo.gz.zindex cuando se le pide que indexe archivo.gz.

Ejemplo:

crear un índice en las líneas que coincidan con una expresión regular numérica. El grupo de captura indica la parte que se va a indexar y las opciones muestran que cada línea tiene un índice numérico único.

$ zindex file.gz --regex 'id:([0-9]+)' --numeric --unique

Ejemplo: cree un índice en el segundo campo de un archivo CSV:

$ zindex file.gz --delimiter , --field 2 

Ejemplo:

cree un índice en un campo JSON orderId.id en cualquiera de los elementos en las acciones de la raíz del documento array (requiere jq). La consulta jq crea un array de todos los orderId.ids, luego los une con un espacio para garantizar que cada línea individual canalizada a jq cree una sola línea de salida, con múltiples coincidencias separadas por espacios (que es el separador predeterminado).

$ zindex file.gz --pipe "jq --raw-output --unbuffered '[.actions[].orderId.id] | join(" ")'" 

Consultando el índice

El programa zq se utiliza para consultar un índice. Se le da el nombre del archivo comprimido y una lista de consultas. Por ejemplo:

$ zq file.gz 1023 4443 554 

También es posible generar por número de línea, por lo que para imprimir las líneas 1 y 1000 de un archivo:

$ zq file.gz --line 1 1000

valoraciones y comentarios

Si eres capaz, puedes dejar una reseña acerca de qué te ha gustado de esta reseña.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : / /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *