awk为日期范围日期格式,如mm / dd / yyyy hh:mm:ss

时间:2013-07-10 09:03:42

标签: awk

我有我的日志文件,我正在尝试审核日期范围

"07/10/2013 01:31:54","SNMP" 

"07/10/2013 01:31:54","SNMP" 
.... ... .. 
"07/10/2013 03:03:54","SNMP"

我正在使用faklowing awk命令,它给出了所有的行,我尝试了不同的组合没有用,是否有需要在awk中使用的标准数据格式?

awk -F, '"07/10/2013 01:35:40" > $1&&$1 <= "07/10/2013 01:50:03"' Mylog.log | wc -l

2 个答案:

答案 0 :(得分:3)

您有两个问题: CSV解析日期比较

您可以使用match()CSV parsing function来解决第一个问题。

您可以使用正确的日期格式(例如ISO-8601)来解决第二个问题,一个令人愉快的副作用是日期(ex timezone / DST更改)可以在词汇上进行比较。 如果您确实使用gawk而不是普通awknawk,则可以使用内置日期函数mktime()来解析时间戳并返回允许时间戳的第二个序数日期数字比较。 awk没有本机日期/时间类型,也没有标准数据/时间库,因此词法或数字比较是最简单的选择。

gawk的最终选项是一个讨厌的黑客:

/^"07.10.2013 01:35:40"/,/^"07.10.2013 01:50:03"/ {
    # your code here
}

这使用range expression来限制某些行之间的匹配范围。只要时间单调递增,这应该适用于您的文件格式 - 对于Apache日志,这是 true(因为它们按完成顺序记录,但默认情况下包含原始请求时间戳,并且不保证单调增加。)

答案 1 :(得分:1)

字符串比较:

$ awk -F" '"07/10/2013 01:35:40" > $2 && $2 <= "07/10/2013 01:50:03"' file
"07/10/2013 01:31:54","SNMP"
"07/10/2013 01:31:54","SNMP"
.... ... ..

......似乎有效!要比较时间,请更好地使用mktime("YYYY MM DD HH MM SS")