imprimir una línea específica y luego algo más

imprimir una línea específica y luego algo más

Estoy intentando buscar un patrón en un archivo y, si lo encuentro, quiero ver la línea y 10 líneas más del resultado.

hasta ahora tengo

grep -n pattern file | cut -d: f1 

Ahora no estoy seguro de cómo usar esta salida para hacer la impresión con la lógica como

sed -n result,(result+10)p file

Probablemente se emitirán algunos si el patrón tiene varias líneas.

Cualquier ayuda es apreciada

Respuesta1

si grep -Ano funciona prueba

awk '/pattern/ {for(i=0;i<number_of_lines;i++){print;getline}}' <filename>

De lo contrario, Sed tiene otra solución sucia.

sed -n '/pattern/ {p;n;p;n;p;...}' <filename>aquí p-> imprimir, n -> pasar a la siguiente línea. Entonces el número de p es el número de líneas que se imprimirán

Actualizar:

para usar como función, escriba en un test.sh

jobcheck(){
  awk "/$1/"' {for(i=0;i<10;i++){print;getline}}' $2
}

entonces solo

source test.sh

correr,

jobcheck "pattern" "file"

Actualización: según la sugerencia de Jonathan Leffler, si alguna de las siguientes 10 líneas contiene el patrón, el conteo debe comenzar desde esa línea para que

pattern  ->start printing from here to next 10 lines
blah
blah
pattern  ->forget about the last 2 lines, start counting from here
blah 
blah

Entonces el comando awk actualizado será como

awk '/pattern/{max_line=NR+2} {if(NR<=max_line) print}' <filename>

De manera similar, también se cambiará la verificación de trabajo interna. Salud:)

Respuesta2

Usando grep 2.10:

grep -A 10 "pattern" your_file

imprimirá 10 líneas después del partido

Desde elpágina de manual grep:

-Un número

--después del contexto = número

Imprima el número de líneas del contexto final después de las líneas coincidentes.

Usando GNU awk 3.1.8:

awk '{if(a-->0) {print; next}} /pattern/{print; a=10}' your_file

Respuesta3

Yo usaría:

sed -n '/pattern/{N;N;N;N;N;N;N;N;N;N;p;}'

o

sed '1,/pattern/{/pattern/!d;}' | sed '12,$d'

información relacionada