ignorar por completo las líneas que comienzan con un patrón específico

Tengo un script que analiza el resultado de un software de computación. a veces la salida viene con algunos datos adicionales que son irrelevantes para mi script. Esta información puede ser enorme y hace que ejecutar mi script simple sea muy lento.

Mi script está en awk / bash.

Me preguntaba si es posible decirle a awk que ignore por completo las líneas después de un patrón específico.

por ejemplo:

GOOD STUFF ---------------- IRRELEVENT DATA ---------------- IGNORE ALL THESE ---------------- END OF IT ---------------- GOOD STUFF 

También me preguntaba si le digo a awk que busque líneas que comiencen con un patrón específico, ¿ignoraría lo que venga después y acelerará el guión?

Para ignorar algunas líneas línea por línea, agregue /unwanted pattern/ {next} o ! /wanted pattern/ {next} ! /wanted pattern/ {next} al comienzo del script.

Alternativamente, filtre con grep: grep -v 'unwanted pattern' | awk … grep -v 'unwanted pattern' | awk … o grep 'wanted pattern' | awk … grep 'wanted pattern' | awk … Esto puede ser más rápido si grep elimina muchas líneas, porque grep es típicamente más rápido que awk para la misma tarea (grep es más especializado, por lo que puede optimizarse para su tarea; awk es un lenguaje de progtwigción completo, puede hacer mucho más pero es less eficiente).

Si desea ignorar un bloque de líneas consecutivas, awk tiene una facilidad conveniente para eso: agregue /^IRRELEVENT DATA/../^END/ {next} en la parte superior del script para ignorar todas las líneas que comiencen con IRRELEVENT DATA ( sic) ) y las siguientes líneas hasta la primera línea que comienza con END . No puedes hacer eso con grep; puedes hacerlo con sed ( sed '/^IRRELEVENT DATA/,/^END/' | awk … ) pero es less probable que sea una ganancia de performance que grep.