如何 grep 日志中的特定时间段

如何 grep 日志中的特定时间段

我们使用的日志文件具有以日期/时间格式开头的行条目,如下所示:

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

相关内容