Shell 在日志文件中搜索并打印特定日期

Shell 在日志文件中搜索并打印特定日期,shell,date,logfile,Shell,Date,Logfile,我正在处理一个日志文件,我想从特定的一天打印到它的结束。例如,具体日期为($sd=27/Dec/2002)。现在我想搜索这一天,并从它打印到日志文件的结尾!但如果27/Dec不在日志文件中,该怎么办?它应该搜索>=$sd(27/Dec)的项目,我该怎么做 这段代码只搜索$Sd,即2002年12月27日,我想搜索>=$Sd的项目 sed -n "$(awk '/'$sd'/ {print NR}' serverlog.log.log | head -1),$ p" serveerlog.log|c

我正在处理一个日志文件,我想从特定的一天打印到它的结束。例如,具体日期为($sd=27/Dec/2002)。现在我想搜索这一天,并从它打印到日志文件的结尾!但如果27/Dec不在日志文件中,该怎么办?它应该搜索>=$sd(27/Dec)的项目,我该怎么做

这段代码只搜索$Sd,即2002年12月27日,我想搜索>=$Sd的项目

sed -n "$(awk '/'$sd'/ {print NR}' serverlog.log.log | head -1),$ p" serveerlog.log|cut -d: -f1
日志文件的示例:

213.64.237.213 - - [23/Dec/2002:03:02:22 +0100]
213.132.36.66 - - [28/Dec/2002:19:33:29 +0100]

日志文件已排序

使用awk将非常容易。请参见下面的示例:

kent$  cat log.txt
213.64.237.213 - - [20/Dec/2002:03:02:22 +0100]
213.64.237.213 - - [20/Dec/2002:03:02:22 +0100]
213.64.237.213 - - [20/Dec/2002:03:02:22 +0100]
213.64.237.213 - - [20/Dec/2002:03:02:22 +0100]
213.64.237.213 - - [20/Dec/2002:03:02:22 +0100]
213.64.237.213 - - [23/Dec/2002:03:02:22 +0100]
213.64.237.213 - - [23/Dec/2002:03:02:22 +0100]
213.64.237.213 - - [23/Dec/2002:03:02:22 +0100]
213.64.237.213 - - [25/Dec/2002:03:02:22 +0100]
213.64.237.213 - - [25/Dec/2002:03:02:22 +0100]
213.64.237.213 - - [25/Dec/2002:03:02:22 +0100]
213.64.237.213 - - [25/Dec/2002:03:02:22 +0100]
213.132.36.66 - - [28/Dec/2002:19:33:29 +0100]

kent$  sd=21/Dec/2002




kent$  awk -F'[:[]' -v d=$sd '$2>d' log.txt
输出

213.64.237.213 - - [23/Dec/2002:03:02:22 +0100]
213.64.237.213 - - [23/Dec/2002:03:02:22 +0100]
213.64.237.213 - - [23/Dec/2002:03:02:22 +0100]
213.64.237.213 - - [25/Dec/2002:03:02:22 +0100]
213.64.237.213 - - [25/Dec/2002:03:02:22 +0100]
213.64.237.213 - - [25/Dec/2002:03:02:22 +0100]
213.64.237.213 - - [25/Dec/2002:03:02:22 +0100]
213.132.36.66 - - [28/Dec/2002:19:33:29 +0100]
更新

试试这个awk行:$sd是变量。希望它对你有用

kent$  awk -F'[:[]' -v vd=$sd 'BEGIN{ gsub(/\//," ",vd);"date +%s -d \""vd"\""|getline d} {p=$0;  gsub(/\//," ",$2); "date +%s -d \""$2"\""|getline o;if(o>d) print p}' log.txt

显示日志文件的一些示例。您的日志条目是否已正确排序?后来的条目总是附加到文件中?我测试过了!它有问题并打印整个日志文件或不相关的内容:((基于示例数据(日志和变量),上面的代码有效。但在包含14000多个项目的原始日志文件上,它打印了一些不相关的内容!@matarsak,你能试试我答案中的示例数据吗?看看它是否有效。如果变量和文件中的日期格式相同,你能粘贴一整行日志条目吗?是的,我与你的输入后,结果相同!但与原始日志文件noooo不兼容213.46.27.204---[01/Jan/2003:12:55:21+0100]“GET/scripts/.%252f../winnt/system32/cmd.exe?/c+dir HTTP/1.0”404-“””