我试图制作一个python脚本,从日志文件输出特定的时间范围(类似于下面列出的sed命令):
sed -n '/2017-01-26 18:00/ , /2017-01-26 18:02/p' /logfile.log
^{pr2}$
我的python脚本正在搜索固定字符串,而不是上面的sed命令(我怀疑我做错了什么,但找不到错误-请检查下面的代码):
请指出代码应该在哪里更改,并建议代码增强。谢谢!在
#!/usr/bin/python
import datetime, time, os, sys, re
from datetime import timedelta
counter = 0
avgtime = 0
now = datetime.datetime.utcnow()
pasttime = now - datetime.timedelta(minutes=5)
timestamp = now.strftime("%y%m%d")
fiveago = now - timedelta(minutes=5,seconds=now.second)
current = now.strftime("%Y-%m-%d %H:%M")
pasttime = fiveago.strftime("%Y-%m-%d %H:%M")
pattern = str(current + "|" + pasttime)
f = open('/logs/' + sys.argv[1] + '/' + 'u_ex' + timestamp + '.log', 'r')
for line in f:
if "POST" in line:
if re.search(pattern, line, re.IGNORECASE):
date = line.split(' ')[1]
time = line.split(' ')[14]
avgtime += int(time)
counter += 1
print(date,time)
f.close()
print(pattern)
print("Total amount of time: ",counter)
print("Total scan time: ",avgtime)
print("Average scan time: ",avgtime / counter)
IIUC,你需要从日志中输入你经过的时间戳。在
输出
^{pr2}$用于此的输入
你的解决方案的问题是你只寻找两个“边缘时间”。在您的3分钟时间范围示例中,这是}。在
18:00
和{sed
命令的作用是:-n
)2017-01-26 18:00
,它就开始打印所有行2017-01-26 18:02
时,它就会停止打印在您的示例中,regex模式是:
^{pr2}$只会找到或者18:00或者18:02。所以,你可以做的是:
拉皮条客你的正则表达式,这样它也可以搜索时间之间的时间:
这将产生例如:
我看不出问题出在哪里,但您要求的sed相当于您的命令,所以下面是python的确切翻译:
相关问题 更多 >
编程相关推荐