
Estou tentando procurar um padrão em um arquivo e, se ele for encontrado, quero ver a linha e mais 10 linhas do resultado.
até agora eu tenho
grep -n pattern file | cut -d: f1
agora não tenho certeza de como usar essa saída para fazer a impressão com a lógica como
sed -n result,(result+10)p file
provavelmente haverá alguns emitidos se o padrão estiver em várias linhas.
Qualquer ajuda é apreciada
Responder1
se grep -A
não estiver funcionando, tente
awk '/pattern/ {for(i=0;i<number_of_lines;i++){print;getline}}' <filename>
senão sed tem outra solução suja
sed -n '/pattern/ {p;n;p;n;p;...}' <filename>
aqui p-> imprimir, n -> ir para a próxima linha. Então o número de p é o seu número de linhas a serem impressas
Atualizar:
para usar como uma função, escreva um test.sh
jobcheck(){
awk "/$1/"' {for(i=0;i<10;i++){print;getline}}' $2
}
então apenas
source test.sh
para correr,
jobcheck "pattern" "file"
Atualização: conforme sugestão de Jonathan Leffler, se alguma das próximas 10 linhas contiver o padrão, a contagem deverá começar a partir dessa linha, então
pattern ->start printing from here to next 10 lines
blah
blah
pattern ->forget about the last 2 lines, start counting from here
blah
blah
Então o comando awk atualizado será como
awk '/pattern/{max_line=NR+2} {if(NR<=max_line) print}' <filename>
Da mesma forma, dentro do jobcheck também será alterado. Saúde:)
Responder2
Usando grep 2.10:
grep -A 10 "pattern" your_file
imprimirá 10 linhas após a partida
-Um número
--after-context=num
Imprime num linhas do contexto final após as linhas correspondentes.
Usando GNU awk 3.1.8:
awk '{if(a-->0) {print; next}} /pattern/{print; a=10}' your_file
Responder3
Eu usaria:
sed -n '/pattern/{N;N;N;N;N;N;N;N;N;N;p;}'
ou
sed '1,/pattern/{/pattern/!d;}' | sed '12,$d'