我有一个文本文件,我希望能够找到“Acct Nbr:”的任何实例并获取“Queue Number:”、“Queue Description:”的前几行以及 Queue Number 之后的第 5 行名为 ApplNbr .如果前面有其他应用程序,它不会总是第 5 行。这一行总是 3 列数字。例如:“5024 17 110”或“964 16 100”
如您所见,有时每个队列有多个“Acct nbr:”条目,但大多数时候只有一个。如果可能的话,在一个 Queue 编号行下有多个 Acct nbr: 会很好。此文本文件中有数千个条目,我只需要查找由 Acct nbr: 标识的这些错误,但我需要每个错误的队列号、队列描述和应用程序编号。我希望我说清楚了。
我用“->”标记了所需的行。我想使用 python,但我愿意使用其他脚本语言,如 powershell 或使用 gnu 实用程序,如 grep。
感谢您的时间和关注。
要解析的文本示例:
->Queue Number: 87125 Queue Effective Date: 09-05-2012 Queue Scheduled Date: 09-05-2012
->Queue Description: **Posting File** Processing Queue Type Description: PM File Load Copy
Appl QSub Seq Appl Appl Return Start Stop Time of Run
Nbr Nbr Nbr Description Name Code Time Time (In Minutes)
->386 2 0 Inclearing Processing AH_CLEAR 0 12:07:21 12:07:56 0.583
Procedure Complete
*************** Batch Application Errors ***************
->Acct Nbr: 0000000000 Batch Actv Msg: Bank Check Not Processed - Validation Error
->Batch Oracle Msg:
->Acct Nbr: 0000000000 Batch Actv Msg: Bank Check Not Processed - Validation Error
->Batch Oracle Msg:
期望的输出:
Queue Number: 87125 Queue Effective Date: 09-05-2012 Queue Scheduled Date: 09-05-2012
Queue Description: **Posting File** Processing Queue Type Description: PM File Load Copy
386 2 0 Inclearing Processing AH_CLEAR 0 12:07:21 12:07:56 0.583
Acct Nbr: 0000000000 Batch Actv Msg: Bank Check Not Processed - Validation Error
Batch Oracle Msg:
Acct Nbr: 0000000000 Batch Actv Msg: Bank Check Not Processed - Validation Error
Batch Oracle Msg:
最佳答案
使用存储最新队列编号
和队列描述
的状态机迭代每一行。当您找到 Acct Nbr
时,使用存储的值生成您的输出。
未经测试的快速示例,请根据自己的需要进行调整:
class State(object):
qnumb = None
qdesc = None
def feed(self, line):
if line.startswith('Queue Number'):
self.qnumb = line
elif line.startswith('Queue Description'):
self.qdesc = line
elif line.startswith('Acct Nbr'):
return line, self.qnumb, self.qdesc
def parse(lines):
results = []
s = State()
for line in lines:
entry = s.feed(line)
if entry:
results.append(entry)
return results
关于python - 用 python 抓取多条不连续的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12410835/