我正在分析过程中的某些日志数据,并且具有各种列,例如id,日期,时间,日志代码,日志文本。 产品编号是唯一的 日期和时间是捕获日志的时间部分。 日志代码是特定于日志文本的代码 日志文本是描述过程的256个字符的文本
例如
ID Date time log id log text
A 01/10/18 9:00:00 bbb process begin
A 01/10/18 9:00:00 yyy dimensions not specified
A 01/10/18 9:00:30 fff failure
A 01/10/18 9:00:30 ddd dispatched
A 01/10/18 9:00:30 sss process success
B 01/10/18 9:01:01 bbb process begin
B 01/10/18 9:01:50 mmm moved to stage2
B 01/10/18 9:02:50 aaa space not allocated
B 01/10/18 9:02:50 fff failure
我想在满足以下条件(可以更改)的csv或xls输出中grep(或更确切地说创建一个子集)-
所以我的预期输出是-
ID Date time log id log text
A 01/10/18 9:00:00 bbb process begin
A 01/10/18 9:00:00 yyy dimensions not specified
A 01/10/18 9:00:30 fff failure
B 01/10/18 9:01:50 mmm moved to stage2
B 01/10/18 9:02:50 aaa space not allocated
B 01/10/18 9:02:50 fff failure
A 01/10/18 9:00:30 sss process success
使用以下线程中的讨论: Grep for a word, and if found print 10 lines before and 10 lines after the pattern match
我尝试了一些代码来获得下面的代码- 导入子进程
filename = "filename.csv"
string_to_search = "failure"
extract = (subprocess.getstatusoutput("grep -C 2 '%s' %s"%(string_to_search, filename)))[1]
print(extract)
答案 0 :(得分:2)
您可以使用以下代码:
with open("text.txt", "r") as f:
output = open("output.txt", "w")
count = 0
lines = f.readlines()
for line in lines:
if "sss" in line:
output.write(line)
elif "failure" in line:
output.write(lines[lines.index(line) - 2])
output.write(lines[lines.index(line) - 1])
output.write(line)