
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 -A
no 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'