我们使用的日志文件具有以日期/时间格式开头的行条目,如下所示:
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