我有一个调试日志文件,如下所示:
示例文件:
DEBUG: Fri Dec 7 06:49:14 2018:16920 extra text
DEBUG: Fri Dec 7 06:49:14 2018:16920: start <ID>
DEBUG: Fri Dec 7 06:49:14 2018:16920: Final output is "output
output output
output"
DEBUG: extra lines
我想只获取ID和最终输出,如下所示 .
预期产量:
<ID> "output
output output
output"
我想在python或bash中执行此操作 . 任何帮助,将不胜感激 . 谢谢
当前代码仅适用于“最终输出” . 但我也想获取ID,并且应该有一种方法来区分(分隔符)每个ID及其输出 .
stream=open("debuglog.txt","r")
lines=stream.readlines()
flag = 0
for i in lines:
if "DEBUG:" in i:
flag = 0
if "final output is" in i:
flag = 1
if flag:
print(i)
3 回答
示例日志文件:
请找到代码 . 另外,我假设您每个ID和输出只有一个实例
产量
如果这可以解决您的问题,请勾选并接受;)
使用Perl,如果文件可以放入内存,你可以使用单行程序 .
用python,怎么样:
输入日志文件:
并输出:
正则表达式中的第一个parens捕获
start
之后和换行符之前的所有字符并将字符串存储到1st group
中 .正则表达式中的第二个parens还捕获
Final output is
之后和DEBUG
之前的任何字符或字符串的结尾并将字符串存储到2nd group
. 由于re.DOTALL
选项,字符串中可以包含换行符 .第3个parens是空长锚并且不包含在捕获组中 .
EDIT
下面的更新版本为单个ID处理多个“最终输出”,并仅显示每个ID的最后一个输出:
输入日志文件:
并输出:
我把子串的提取分为两个步骤:
提取ID和剩余文本(可能包含额外的字符串) . 这是使用
regex
处理的 .从上面的"remaining text"中提取"final output"个子串 . 这是使用
regex2
处理的 .然后选择最后的“最终输出”并显示 .