
파일에서 패턴을 검색하려고 하는데 패턴이 발견되면 해당 줄과 결과의 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'