2012-11-15 2 views
1

에 수백만 개의 라인이 있고 다른 파일에 라인의 범위 (시작 및 종료 타임 스탬프 기준)를 쉽게 덤프하는 방법을 알아 내려고합니다. 다음은 로그에서 발췌 한 내용입니다.로그의 라인 일치 범위

00:04:59.703: <abcxyz,v1 from YYY::Process at 14 Nov 2012 07:04:59> 
00:04:59.703: 20121114070459 - XXX - 7028429950500220900257201211131000000003536 
00:04:59.703: </abcxyz,v1> 
00:04:59.711: <abcxyz,v1 from YYY::Process at 14 Nov 2012 07:04:59> 
00:04:59.711: 20121114070459 - XXX - 7028690080500220900257201211131000000003538 
00:04:59.711: </abcxyz,v1> 
00:04:59.723: <abcxyz,v1 from YYY::Process at 14 Nov 2012 07:04:59> 
00:04:59.723: 20121114070459 - XXX - 7028395150500220900257201211131000000003540 
00:04:59.723: </abcxyz,v1> 
00:04:59.744: <abcxyz,v1 from YYY::Process at 14 Nov 2012 07:04:59> 

여기서 알 수 있듯이 밀리 초당 여러 줄이 있습니다. 내가 무엇을하고 싶은가 do는 begin=11:00:end=11:45:과 같은 시작과 끝 타임 스탬프를 입력으로 받아서 그 범위의 모든 라인을 덤프 할 수 있습니다.

저는이 두뇌를 알아 내려고 노력하고 있습니다. 그러나 지금까지는 이 만족스런 결과를 얻지 못했습니다.

업데이트 : 물론 질문을 올린 후 시도한 첫 번째 것은 일로 보입니다. 여기에 내가 무엇을 가지고 있습니다 :

더 좋은 방법이 있다면 제안을 기쁘게 생각합니다.

+0

언어는 무엇입니까? – inhan

+1

'sed'는 나의 첫번째 해결책이었을 것이다. 나는 당신이 더 쉬운 것을 더 빨리 발견 할 것이라고 생각하지 않습니다. – MattH

답변

0

가되지 않습니다 그 일은 잘 했어. 외에도 외에도 원하는 블록을 인쇄 할 때 sed 스크립트를 빠져 나와 (파일에 수백만 줄이 있다는 것을 고려하면) 속도를 최적화 할 수 있습니다 (파일에 반복되는 시간 블록이 없다고 가정).

sed -n '/^06:25/,/^08:25/{p;/^08:25/q}' logFile > newLogFile 

이것은 블록의 마지막 줄을 찾았을 때 종료하도록 명령합니다.

+0

명령을 추가해 주셔서 감사합니다. – ssbsts

+0

@ user1804896 매우 환영합니다. 건배. –

0

당신은 oneliner를 사용할 수 있습니다 :

awk -v start='00:04:59.000' -v end='00:04:59.900' \ 
    '{if(start <= $1 && end >= $1) print $0}' <your.log> reduced.log 

공지 사항 startend 범위의 전체 형식을 - 간단하게 유지하기 위해 그리고 난 당신 나오지 oneliner이 생각 많은 문제를 IMO