eventTimestamp: 2010-03-23T07:56:19.166result: Allowedprotocol: SMSpayload: RCOMM_SMSeventTimestamp: 2010-03-23T07:56:19.167result: Allowedprotocol: SMSpayload: RCOMM_SMSeventTimestamp: 2010-03-23T07:56:19.186result: Allowedprotocol: SMSpayload: SMS-MO-FSMeventTimestamp: 2010-03-23T07:56:19.197result: Allowedprotocol: SMSpayload: copSeventTimestamp: 2010-03-23T07:56:29.519result: Blockedprotocol: SMSpayload: copStype: URL_IWFresult: Blocked
我想找到有效载荷的所有事件:SMS-MO-FSM或有效载荷:在2010-03-23 12:56:47和2010-03-23 13之间发生的SMS-MO-FSM-INFO: 56:47.到目前为止查询此文件时,我已按以下方式使用awk:
cat checkThis.txt |awk 'BEGIN{FS="\n"; RS=""; OFS=";"; ORS="\n"} ~/eventTimestamp: 2010-03-23T14\:16\:35/ && ~/SMS-MO-FSM-INFO|SMS-MO-FSM$/ {= ""; printpython -c "import time; ENGINE_TIME_FORMAT='%Y-%m-%dT%H:%M:%s'; print int(time.mktime(time.strptime('2010-03-23T12:52:52',ENGINE_TIME_FORMAT)))"}'
这将为我提供2010-03-23 14:16:35第二次发生的所有事件.但是,我正在努力思考如何将日期范围放入我的查询中.我可以使用以下内容将日期放入纪元时间但是如何在我的awk中使用以下内容来检查日期是否在所需的时间之间:
#!/usr/local/bin/pythonimport time,sysENGINE_TIME_FORMAT='%Y-%m-%dT%H:%M:%s'testTime = sys.argv[1]try: print int(time.mktime(time.strptime(testTime,ENGINE_TIME_FORMAT)))except: print "Time to convert %s" % testTime raise
我知道这可以在Python中完成,但我已经在Python中为此编写了一个解析器,我希望这个方法作为替代检查器,所以我想尽可能使用awk.
我更进一步,创建了一个时间转换的python脚本:
cat checkThis.txt| awk 'BEGIN {FS="\n"; RS=""; OFS=";"; ORS="\n"; "./firstDate '2010-03-23T12:56:47'" | getline start_time; close("firstDate"); "./firstDate '2010-03-23T13:56:47'" | getline end_time; close("firstDate");} ("./firstDate " | getline) > start_time {= ""; printawk 'BEGIN { FS = "\n" RS = "" OFS = ";" ORS = "\n" t1 = "2010-03-23T07:45:00" t2 = "2010-03-23T08:00:00" m1 = "eventTimestamp: " t1 m2 = "eventTimestamp: " t2 } ~ /eventTimestamp:/ && ~ /SMS-MO-FSM(-INFO)?$/ { if ( >= m1 && <= m2) print ,,,;}' "$@"}'Traceback (most recent call last): file "./firstDate",line 4,in <module>testTime = sys.argv[1]IndexError: List index out of range
然后我尝试使用getline将转换分配给变量进行比较:
eventTimestamp: 2010-03-23T07:56:19.186;result: Allowed;protocol: SMS;payload: SMS-MO-FSM
getline在BEGIN中工作,我在最终打印中检查了它,但我似乎在脚本的比较部分有问题.
解决方法 关键的观察是,您可以使用字母数字比较来比较您的时间戳,并获得正确的答案 – 这是 ISO 8601表示法的美妙之处.因此,稍微调整您的代码 – 并格式化以避免滚动条:
显然,您可以将其放入脚本文件中 – 您不希望经常输入它.准确方便地输入日期范围是其中一个难点.请注意,我已调整时间范围以匹配数据.
在样本数据上运行时,它输出一条记录:
总结以上是内存溢出为你收集整理的linux – 使用awk检查两个日期全部内容,希望文章能够帮你解决linux – 使用awk检查两个日期所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)