로그에서 특정 기간을 파악하는 방법

로그에서 특정 기간을 파악하는 방법

우리가 사용하는 로그 파일에는 다음과 같은 날짜/시간 형식으로 시작하는 줄 항목이 있습니다.

20150408 13:29:28 <rest of text>

grep기간을 결정 하려면 어떻게 해야 합니까?

20150408 13:29:28로 시작하고 끝나는 모든 줄과 마찬가지로 20150408 17:55:02?

grep업무를 위한 도구가 될까요, 아니면 더 나은 도구가 될까요 sed?

답변1

물론 과제는 통과될 수 있다sed

sed '/20150408 13:29:28/,/20150408 17:55:02/! d' log_files

그러나 줄이 정확하지 않으면 20150408 13:29:28스크립트는 아무것도 인쇄하지 않고, 정확하지 않으면 20150408 17:55:02파일은 끝까지 모든 줄을 인쇄합니다. 따라서 스크립트를 통해 날짜 비교를 사용하는 것이 더 좋습니다.

limit1=$(date -d "20150408 13:29:28" +"%s")
limit2=$(date -d "20150408 17:55:02" +"%s")
while read -r logdate logtime logline
do
    logsec=$(date -d "$logdate $logtime" +"%s")
    if [ $limit1 -le $logsec -a $limit2 -ge $logsec ]
    then
        echo $logdate $logtime $logline
    fi
done < log_files

답변2

나는 awk그것이 도움이 될 수 있다고 생각합니다:

awk 'BEGIN { sd = "20150408T13:29:28"; ed = "20150408T17:55:02"; } $1 "T" $2 >= sd && $1 "T" $2 <= ed' log

관련 정보