다음 데이터가 포함된 텍스트 파일 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/grep
text/gnu-grep
-A
-B
/usr/gnu/bin/grep -B1 -A4 error < your-file
(GNU는 grep
겹치지 않는 그룹을 선으로 구분합니다 --
).