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