A blog about data, information and IT, by Mario Alberich

Feb 20
2014

grep: contexto de resultado y cantidad de ítems

Conjuntamente con diff, grep es la otra gran utilidad de referencia. En el momento de buscar textos simples o expresiones regulares, la familia de utilidades grep están en mi navaja suiza de utilidades. échale un vistazo al manual de esta utilidad.

Grep mostrando N filas antes y después de la coincidencia


En algunas ocasiones es necesario reconocer el contexto de una coincidencia. Para el caso del código fuente, el archivo donde se ha localizado la coincidencia puede no ser un indicador lo suficientemente detallado. Es por eso que greo proporciona las opcines -An y -Bn para mostrar las líneas posteries y anteriores a la coincidencia, respectivamente.

Así, el comando siguiente:

grep -B2 -A3 hola file.txt

Mostraría las líneas de file.txt que contienen el texto "hola", junto con las dos líneas anteriores y las tres posteriores. Vale la pena no abusar de las líneas de contexto, porque tienden a añadir ruido al resultado.  Encontrando la cantidad de líneas mínimas para ayudarnos a identificar el contexto, ganaremos tiempo. Más allá de ese mínimo, lo estaremos perdiendo.

Grep sólo hasta la enésima coincidencia


En ocasiones no es necesario buscar hasta los confines del mundo. Grep funciona muy bien pero en ciertos casos puede generar una cantidad de resultados que nos desbordan.  En otros casos simplemente necesitamos detectar una cantidad concreta de resultados, o incluso localizar exactamente la coincidencia que está en una posición determinada. Con grep, puedes conseguir ese resultado con la opción -m:

grep -m 3 hola file.txt

Esta llamada va a mostrar las tres primeras líneas que tienen coincidencias del texto hola dentro del archivo file.txt, lo que en el fondo vendría a ser el equivalente (pero mucho más óptimo porque nos evita procesar todo el archivo) que un grep + head:

grep hola file.txt | head -n 3

Sin embargo quizá en alguna ocasión sólo querremos localizar la coincidencia que se encuentra exactamente en la tercera posición. ¿Qué podemos hacer? Una primera solución es: combinar grep y tail de la siguiente manera:

grep -m 3 hola file.txt | tail -n 1

La primera instrucción devuelve los tres primeros resultados, y la segunda devuelve sólo la última fila del resultado anterior (por lo tanto el tercero).

Tags

gestión documental 10     Recuperación información 11     Linux 7     Usabilidad 5     open source 3     Tagging 12     lógica borrosa 2     fuentes de información 12     Google 6     off-topic 6     spam 2     grafos 6     Web social 11     modelización 12     Productividad 11     buscadores 2     utilidades 17     Profesionales 9     SEO 5     estándares 3     veracidad 3     relevancia 2     lingüística 2     PLN 2     lenguajes documentales 2     apis-mashups 3     reseñas 7     Flash 7     Gráficos estadísticos 13     Publicidad 3     Innovación 5     muestreo estadístico 9     PHP 14     internet 2     testeo 12     desarrollo 3     visualizacion 36     javascript 16     datos abiertos 9     elecciones 2     simulación 5     html5 7     phing 9     ssh 2     seguridad 3     indicadores 2     demografía 3     media 2     algoritmos 7     shell 4     mysql 2     backup 2     big data 6     twitter 2     d3js 11     revealjs 2     metodología 6     data-journalism 6     smartcities 2     NYT 2     privacidad 3     benchmarking 4     recopilaciones 21     magento 5     formacion 2     github 2     HHVM 3     psicología 2     angularjs 3     grep 2     nodejs 5     promises 2     mapreduce 3     crossfilter 2     exploración de datos 2     machine learning 2    

© 2007 and beyond Mario Alberich, licensed under CC-BY-SA unless stated otherwise.