我有以下问题,我有一个日志文件,我想逐行阅读,但减少我想要过滤掉两个时间戳之间的行!
awk中的示例:
find all between two patterns: pattern1 = 2012-10-23 14, pattern2 = 2012-10-23 16
awk '/2012-10-23 14/{P=1;next}/2012-10-23 16/{exit} P' server.log
或使用egrep和一种模式:
egrep "2012-10-23 (1[4-6]:[0-5][0-9])" server.log
上面的awk行只会给我这两个时间戳之间的界限。
如何在不执行任何系统命令或awk,grep ...的情况下在python中执行此操作,但只能使用python正则表达式
先谢谢。
答案 0 :(得分:0)
您的awk代码中的一对一翻译:
with open('yourFile') as f:
lines = f.read().splitlines()
for l in lines:
if l.startswith('2012-10-23 14'):
p=1
elif l.startswith('2012-10-23 16'):
p=0
break
if p: print l
这将在以2012-10-23 14 ...
开头的第一行匹配时开始输出,并在以2012-10-23 16..
开头的第一行匹配时停止打印。 (与您的awk代码相同)
答案 1 :(得分:0)
我认为@Kent帖子只有在我们假设时间戳位于您行的开头时才会起作用。使用AWK / egrep代码,您需要更通用的东西。
以下代码应该有效:
具有更多通用代码构造,以防您需要进一步修改。
import re
def log_lines(yourFile, regexp):
rxp = re.compile(regexp)
with open(yourFile) as f:
for line in f.readlines():
if rxp.search(line):
yield line
for line in log_lines("yourFile", "2012-10-23 1[4-6]"):
print line
坚持使用python,它很容易上瘾; - )