패턴이 일치하면 위의 줄과 아래의 네 줄을 인쇄하십시오.

패턴이 일치하면 위의 줄과 아래의 네 줄을 인쇄하십시오.

다음 데이터가 포함된 텍스트 파일 input.txt가 있습니다.

$ cat input.txt

text1
error
text2
text3
text4
xyz
asd
asdf
text10
error
text11
text12
text13
text14
def
ghi
jkl
text16
error
text17
text18
text19
text20

입력 파일에서 "오류"를 검색하고 있습니다. 따라서 패턴이 일치하면 이전 줄과 다음 4줄을 인쇄해야 합니다. 또한 패턴이 여러 번 발생할 수 있습니다.

다음 출력이 필요합니다

text1
error
text2
text3
text4
text10
error
text11
text12
text13
text14
text16
error
text17
text18
text19
text20

OS는 솔라리스이므로 grep -A여기서는 작동하지 않습니다

답변1

그리고 awk:

awk '/error/ {n = 6}
           n {print prev; n--}
             {prev = $0}
         END {if (n) print}
    ' < your-file

또는 6개 줄(겹침이 없다고 가정) 사이에 빈 줄을 추가합니다.

awk '/error/ {n = 6; if (x++) print ""}
           n {print prev; n--}
             {prev = $0}
         END {if (n) print}
    ' < your-file

Solaris에서 사용 하십시오 /usr/xpg4/bin/awk. 의 구문은 1970년대의 이전 버전이며 최신 표준 구문을 지원하지 않습니다.nawk/usr/gnu/bin/awk/bin

/usr/gnu/bin/awk( 패키지) 가 있는 경우 (패키지)도 있을 text/gawk가능성이 높으며 해당 / 확장을 사용할 수 있습니다 ./usr/gnu/bin/greptext/gnu-grep-A-B

/usr/gnu/bin/grep -B1 -A4 error < your-file

(GNU는 grep겹치지 않는 그룹을 선으로 구분합니다 --).

관련 정보