대용량 로그 파일에서 텍스트 검색 및 필터링

대용량 로그 파일에서 텍스트 검색 및 필터링

tail, head, grep 명령을 사용하여 로그 파일을 검색했습니다. 대부분의 경우 파이프를 사용하는 것 외에도 이 세 가지 명령을 조합하면 작업이 완료됩니다. 그러나 많은 장치에서 거의 몇 초마다 보고하는 로그가 있습니다. 따라서 이 로그는 매우 큽니다. 그러나 보고된 패턴은 동일합니다.

Oct 10 11:58:50 Received Packet from [xxx.xx.xxx.xx:xxxx]: 0xD 0xD 0xD 
Oct 10 11:58:50 Unit ID: 1111

위의 예에서는 특정 유닛 ID에 대한 소켓 서버로 UDP 패킷이 전송되었음을 보여줍니다.

이제는 가끔 로그를 쿼리하여 특정 시간 범위 내에서 이 컴퓨터의 패킷 정보를 확인하고 싶을 때가 있습니다.

Oct 10 11:58:50 Received Packet from [xxx.xx.xxx.xx:xxxx]: 0xD 0xD 0xD 
Oct 10 11:58:50 Unit ID: 1111

... // A bunch of other units reporting including unit id 1111

Oct 10 23:58:50 Received Packet from [xxx.xx.xxx.xx:xxxx]: 0x28 0x28 0x28 
Oct 10 23:58:50 Unit ID: 1111

따라서 위 예에서는 11:58과 23:58의 시간 범위에서 Unit ID: 1111에 대한 로그 출력만 표시하려고 합니다. 따라서 가능한 결과는 다음과 같습니다.

Oct 10 11:58:50 Received Packet from [xxx.xx.xxx.xx:xxxx]: 0xD 0xD 0xD 
Oct 10 11:58:50 Unit ID: 1111

Oct 10 12:55:11 Received Packet from [xxx.xx.xxx.xx:xxxx]: 0x28 0xD 0x28 
Oct 10 12:55:11 Unit ID: 1111

Oct 10 15:33:50 Received Packet from [xxx.xx.xxx.xx:xxxx]: 0x33 0xD 0x11 
Oct 10 15:33:50 Unit ID: 1111

Oct 10 23:58:50 Received Packet from [xxx.xx.xxx.xx:xxxx]: 0x28 0x28 0x28 
Oct 10 23:58:50 Unit ID: 1111

결과에는 장치 ID: 1111에 대한 정보만 표시되고 다른 장치에는 표시되지 않습니다.

이제 이와 같은 것을 사용할 때의 문제는 다음과 같습니다.

tail -n 10000 | grep -B20 -A20 "Oct 10 23:58:50 Unit ID: 1111" 

예, 나에게 필요한 것뿐만 아니라 많은 것을 보여줄 것입니다.

답변1

awk '$3 >= "11:58" && $3 <= "23:58" && /Unit ID: 1111/{print l"\n"$0};{l=$0}'

관련 정보