특정 줄을 인쇄한 다음 더 많은 줄을 인쇄하십시오.

특정 줄을 인쇄한 다음 더 많은 줄을 인쇄하십시오.

파일에서 패턴을 검색하려고 하는데 패턴이 발견되면 해당 줄과 결과의 10줄을 더 보고 싶습니다.

지금까지 나는

grep -n pattern file | cut -d: f1 

이제 이 출력을 사용하여 다음과 같은 논리로 인쇄를 수행하는 방법을 잘 모르겠습니다.

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

패턴이 여러 줄에 있으면 아마도 몇 개가 발행될 것입니다.

도움을 주시면 감사하겠습니다.

답변1

grep -A작동하지 않으면 시도해 보세요 .

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

그렇지 않으면 sed에 또 다른 더러운 해결책이 있습니다

sed -n '/pattern/ {p;n;p;n;p;...}' <filename>여기서 p-> 인쇄, n -> 다음 줄로 이동합니다. 따라서 p의 수는 인쇄할 줄 수입니다.

업데이트:

함수로 사용하려면 test.sh를 작성하세요.

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

그럼 그냥

source test.sh

달리다,

jobcheck "pattern" "file"

업데이트: Jonathan Leffler의 제안에 따라 다음 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>

마찬가지로 내부 jobcheck도 변경됩니다. 건배:)

답변2

grep 2.10 사용:

grep -A 10 "pattern" your_file

일치 후 10줄을 인쇄합니다.

로부터grep 매뉴얼 페이지:

-숫자

--After-컨텍스트=번호

줄을 일치시킨 후 후행 컨텍스트의 수 줄을 인쇄합니다.

GNU awk 3.1.8 사용:

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

답변3

나는 다음을 사용할 것이다:

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

또는

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

관련 정보