알아두면 좋은 IT 지식/Technical Support

[리눅스] 로그 파일에서 특정 시간대에 발생한 로그만 추출하는 방법

uutopia 2022. 5. 25. 14:13

<상황>

1. 로그 파일 용량이 너무 커서 파일 자체에서는 분석이 힘듦

2. 특정 시간대에 발생한 로그만 따로 추출하여 분석이 필요

 

 

<예제>

1. grep -n "^\[#|2022-05-24 09:5[5-7]:[0-5][0-9]" test.log | cut -d':' -f1 > grep_number.log
2. sed -n '3190,3824p' test.log > sed_number.log or head -3824 test.log | tail -635 > head_tail_number.log

 

 

<설명>

grep명령어를 통해서 log파일에서 특정시간대가 포함된 행을 출력하고 행 번호만 알아낸다.

이 때 바로 해당 행만 출력할 경우 줄바꿈이 된 행들이 누락되므로 행의 시작과 끝번호를 알아낸 뒤 sed, head, tail 등의 명령어를 통해서 행의 시작부터 끝까지 출력한다.

명령어에 대한 상세 설명은 아래와 같다.

 

1. grep -n "^\[#|2022-05-24 09:5[5-7]:[0-9][0-9]" test.log

test.log파일에서 [#2022-05-24 09:55:00로 시작하는 행부터 [#2022-05-24 09:57:59로 시작하는 행까지 줄번호를 포함하여 출력

1. | cut -d':' -f1 > grep_number.log

위에서 출력된 결과 중 ':'를 구분자로 첫번째 부분(줄번호)만 출력한 결과를 grep_number.log 파일에 저장

 

#grep_number.log파일을 열어서 줄번호의 시작과 끝을 확인 (ex. 3190, 3824)

 

2. sed -n '3190,3824p' test.log > sed_number.log

test.log파일에서 3190줄부터 3824줄까지 출력한 결과를 sed_number.log파일에 저장

 

2. head -3824 test.log 

test.log파일에서 처음부터 3824줄까지 출력

2. | tail -635 > head_tail_number.log

위에서 출력된 결과 중 끝에서 635줄(3824-3190+1)까지 출력한 결과를 head_tail_number.log파일에 저장