본문 바로가기

OS/LINUX, UNIX

[UNIX/LINUX] grep 시 윗줄, 아랫줄 내용 같이 출력하기

#01. LINUX 환경

CentOS7 로 테스트 하였음
참고 글 : https://eat-hokey.tistory.com/7

test.log 파일 중 test라는 단어가 들어가는 row 포함 아래 5줄을 같이 출력

grep -A 5 "test" test.log



test.log 파일 중 test라는 단어가 들어가는 row 포함 위 5줄을 같이 출력

grep -B 5 "test" test.log



test.log 파일 중 test라는 단어가 들어가는 row 포함 위, 아래 5줄을 같이 출력

grep -A 5 -B 5 "test" test.log



#02. UNIX 환경

AIX7.1 로 테스트 하였음
참고 글 : https://stackoverflow.com/questions/1685678/advanced-grep-unix

아래의 명령어를 실행한다.

grep 명령어 실행 전, 같이 출력할 line 갯수 지정
$ before=2  같이 출력할 윗줄 갯수
$ after=2   같이 출력할 아랫줄 갯수

before 지정
$ grep -n <pattern> <filename> | cut -d':' -f1 |  xargs  -n1 -I % awk "NR>=%-$before" <filename>

after 지정
$ grep -n <pattern> <filename> | cut -d':' -f1 |  xargs  -n1 -I % awk "NR<=%+$after" <filename>

before, after 함께 지정
$ grep -n <pattern> <filename> | cut -d':' -f1 |  xargs  -n1 -I % awk "NR<=%+$after && NR>=%-$before" <filename>



아래와 같이 별도 shell 스크립트에 정리해두면 편할 듯
shell 스크립트 실행 결과를 별도 text 파일에 기록하도록 하였다.

grep 실행 결과를 result.txt 파일에 기록
로그 점검 시에 활용하면 좋을 듯

before=2
after=2
grep -n 'RUNNING' m1.out | cut -d':' -f1 |  xargs  -n1 -I % awk "NR<=%+$after && NR>=%-$before" m1.out >> result.txt_$(date +"%Y-%m-%d")



grep.list 를 활용한 예시

before=2
after=2
grep -n -f grep.list m1.out | cut -d':' -f1 |  xargs  -n1 -I % awk "NR<=%+$after && NR>=%-$before" m1.out >> result.txt_$(date +"%Y-%m-%d")