1

Я пытаюсь найти файл для шаблона и, если он найден, я хочу увидеть строку и еще 10 строк результата.

пока у меня есть

grep -n pattern file | cut -d: f1 

теперь не уверен, как использовать это, чтобы сделать печать с логикой, как

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

вероятно, будет выпущено несколько, если шаблон в несколько строк.

Любая помощь приветствуется

3 ответа3

2

Используя grep 2.10:

grep -A 10 "pattern" your_file

напечатает 10 строк после матча

Со страницы руководства grep:

Число

--after-контекст = Num

Вывести количество строк конечного контекста после сопоставления строк.

Использование GNU awk 3.1.8:

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

если grep -A не работает, попробуйте

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

остальное у седа есть еще одно грязное решение

sed -n '/pattern/ {p;n;p;n;p;...}' <filename> здесь p-> print, n -> перейти к следующей строке. Таким образом, число р - это количество строк, которые будут напечатаны

Обновить:

чтобы использовать в качестве функции, напишите в test.sh

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

тогда просто

source test.sh

бежать,

jobcheck "pattern" "file"

Обновление: согласно предложению Джонатана Леффлера, если какая-либо из следующих 10 строк содержит шаблон, подсчет должен начинаться с этой строки так,

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

Так что обновленная команда awk будет похожа

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

Точно так же внутренняя проверка работы также будет изменена. Ура :)

0

Я бы использовал:

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

или же

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .