El awk pattern scanning and processing language se usa en muchas ocasiones para procesar líneas que cumplen un cierto criterio. Razonamos aquí distintas formas de realizar el filtro en este criterio.

Para los scripts, asumamos que tenemos el siguiente fichero llamado file.txt y con el siguiente contenido:

(2,3)
text
(4,90)
(hello)
comment
()
finish

Y queremos mostrar las líneas que empiecen por el símbolo "(" precedidas por la palabra: "Parenthesis" de forma que la salida sea:

Parenthesis (2,3)
Parenthesis (4,90)
Parenthesis (hello)
Parenthesis ()

Sabemos que nuestro patrón de filtrado es "^(" pero veamos distintas formas de introducirlo en el proceso:

Filtrado usando grep

grep es seguramente lo primero que nos viene a la mente si tenemos prisa o si nuestro conocimiento de awk es limitado:

grep "^(" file.txt | awk '{print "Parenthesis " $0}'

Filtrado usando condicionales en awk

awk es un lenguaje muy potente al que se le pueden dar múltiples usos (soporte de scripting en programación, automatización de procesos de administración de SO, edición de textos, etc.).

Como la mayoría de lenguajes, awk nos da la posibilidad de usar la construcción if-else:

awk '{ if (index($0,"(")==1) { print "Parenthesis " $0} }' file.txt

La ventaja con respecto al caso anterior es que nos sirve el propio awk para realizar toda la tarea. No necesitamos dos comandos ni redirigir la salida de uno a la entrada del otro.

Como desventaja podríamos argumentar que si dentro del script de awk tuviese que ir más código, esta solución es más compleja.

Filtros awk

Por suerte podemos combinar ambas soluciones con awk.

En el siguiente script aprovechamos la ventaja de la segunda aproximación a la vez que mantenemos un código sencillo y limpio:

awk '/^\(/ {print "Parenthesis " $0}' file.txt
Almacenado en: lenguajes, herramientas

comentarios

No hay ningún comentario.