0
我有一个用户提供日期,开始时间和结束时间的脚本。该脚本将采用这些值并扫描日志文件以搜索时间范围内的日志文件中的关键字。当用户使用上午时间(例如:0700至0900 - 这是上午7点至上午9点)作为范围或PM时间(例如:1400至1600 - 这是下午2点至4点)作为范围脚本工作正常。当他们使用AM开始时间(从零开始 - 0700)和结束时间(不以零开始 - 1000(这是上午10点)时,脚本不能正常工作。那我在与如何使用shell和awk在日志文件中搜索时间值?
echo "Number of ${shipmentTags[$i]} shipments processed in \
log file log$logDate/$logFileName is:
`cat $logDirectory/log$logDate/$logFileName |
awk -F":" '$1$2 >= '"$startTime"' && $1$2 <= '"$endTime"' {print $0}' |
grep ${shipmentStrings[$i]} |
wc -l`"
感谢的问题。我在这里复制了一个日志看起来像只是一些假数据。
07:00:01.124 dfsdfjsdflkjsdfkljsdflkjEDIRequestServiceModule/Routedasdfkl
07:05:02.123 fsldjfsdfskdfjsdfsdkfjEDIRequestServiceModule/Rouedsdfjsdfj
07:10:33.233 sdkjfasdflkjasdfaskdfjasdfkljEDIRequestServiceModule/Routed
09:30:02.222 sefsklfjsdfljksdfEDIRequestServiceModule/Routedasdfdf
14:00:12.222 sdfsdfsdfsdfsdfsdfEDIRequestServiceModule/Routed sdfsdfs
14:01:22.223 sdfsdfsdfsdfsdfsdfsdfEDIRequestServiceModule/Routed sdfsdfsdf
17:00:22.222 sdfsdfsdfsdfsdfsdfEDIRequestServiceModule/Routedsdfsdfsdf
18:00:33.333 sdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdf
如果有人想看到整个剧本,只是回复,我可以剪切并粘贴到这里。
嗨丹尼斯,我想你的变化和我没有得到任何罪名。他们将成为零。我最初遇到的问题是,从开始的零开始,例如早上7点,用户输入为0700,并且输入时间为0959之后的任何时间。这是脚本无法工作的时间。如果两次都在0959之后或0959之前,该脚本就可以工作。让我知道你是否想让我试着在这里复制整个剧本。我觉得脚本中存在$ 1 $ 2的问题..由于某些原因,与日志文件中的时间值进行比较会导致问题 – user389721 2010-07-13 14:50:21
@ user389721:试试这个:'startTime = 0700; ENDTIME = 1000;回声“09:30:02.222 sefsk”| awk(我的第一个AWK命令的其余部分)''。你应该得到完整的回显字符串。现在尝试使用您发布的行中的AWK部分。没有打印。你从这两个测试中得到了相同的结果吗? **另外**尝试在您发布的代码之前添加此代码,并在10之前/ 10之后尝试输入并发布它输出的内容:'echo“start:.. $ {startTime} .. end:。 。$ {endTime} ..“' – 2010-07-13 17:23:31
嗨丹尼斯,我把我的头发拉出来后弄清楚了。这是我想出来的,它的效果很好。我可以使用更多的awk语句清理它,但我会采取我得到的。以下是新的固定行: echo“日志文件log $ logDate/$ logFileName中处理的$ {shipmentTags [$ i]}货件的数量为:'cat $ logDirectory/log $ logDate/$ logFileName | awk -F: - v start = $ startTime -v end = $ endTime'(($ 1 $ 2)+ 0)> = start &&(($ 1 $ 2)+ 0)<= end {print $ 0}'| grep $ {shipmentStrings [$ i]} | wc -l'“ 谢谢你的所有帮助,虽然..让我走向正确的方向。 – user389721 2010-07-13 21:26:09