我有我的日志文件,我正在尝试审核日期范围
"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
答案 0 :(得分:3)
您有两个问题: CSV解析和日期比较。
您可以使用match()
或CSV parsing function来解决第一个问题。
您可以使用正确的日期格式(例如ISO-8601)来解决第二个问题,一个令人愉快的副作用是日期(ex timezone / DST更改)可以在词汇上进行比较。
如果您确实使用gawk
而不是普通awk
或nawk
,则可以使用内置日期函数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")
。