可能被陈述为重复..感谢您的接受
阿尔法秩序 设施: 201 ZZZ COUNTRY 错误踪迹: Kotak: NA Soak: NA NOUN: XP 哦哦哦哦哦 林 AMO 订单号 P/PROLHSCNDKMDDCN LAM uii ii oo --- -------- --- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --- --- BZ90rty K/K AA AA AA NA XP AP NA NA NA NA NA NA AP AP OOL XP IP N a ZX A/A WD WD WD NA WD WD NA NA NA NA NA NA WD WD OOL WD IP Y 埋葬令 设施: 201 ZZZ COUNTRY 错误踪迹: Kotak: NA Soak: NA NOUN: XP 哦哦哦哦哦 林 AMO 订单号 P/PROLHSCNDKMDDCN LAM uii ii oo --- -------- --- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --- --- BZ903901 A/A AA AA AA NA XP AP NA NA NA NA NA NA AP AP OOL XP IP N a ZX A/A WD WD WD NA WD WD NA NA NA NA NA NA WD WD OOL WD IP Y 订购 ALUIO 设施: 201 ZZZ COUNTRY 错误踪迹: Kotak: NA PAT: NA NOUN: AP 哦哦哦哦哦 林 AMO 订单号 P/PROLHSCNDKMDDCN LAM uii ii oo --- -------- --- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --- --- BZ903901 U/U AA AA AA NA XP AP NA NA NA NA NA NA AP AP OOL XP IP N a ZX Y/Y WD WD WD NA WD WD NA NA NA NA NA NA WD WD OOL WD IP Y 订单 AL123...续....
在新订单开始之前,显示或删除或重定向整个订单到订单最后一行数据,如果满足这些过滤器,则条件 1:如果 NOUN :XP 和 A/A 高于 A/A 则删除该订单或解析到另一个文件。条件 2:如果 NOUN :AP 和 Y/Y 高于 U/U 则删除该订单或解析到另一个文件。已删除的输出如下所示
阿尔法秩序 设施: 201 ZZZ COUNTRY 错误踪迹: Kotak: NA Soak: NA NOUN: XP 哦哦哦哦哦 林 AMO 订单号 P/PROLHSCNDKMDDCN LAM uii ii oo --- -------- --- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --- --- BZ90rty K/K AA AA AA NA XP AP NA NA NA NA NA NA AP AP OOL XP IP N a ZX A/A WD WD WD NA WD WD NA NA NA NA NA NA WD WD OOL WD IP Y
像这样有很多条件,我会自己添加条件,但这些是我发布的一些条件.....注意:行是动态的,ORDER ****(***)可能是任何字母,但ORDER是恒定的。
答案1
这可以通过分而治之文本来实现。下面的 Python 脚本就是这样做的 - 它逐行读取文件,收集与订单相关的所有行,然后将该信息传递给解析每个订单的函数以确定是否应该打印它。虽然有点冗长,但它工作得相当不错,尽管它实际上是两个嵌套循环,这可能会给出最优解表现。
#!/usr/bin/env python
import sys
def parse_order(order,order_lines):
flag1 = False
flag2 = False
xp_counter = 0
ap_counter = 0
for line in order_lines:
if 'Wrong Trace:' in line:
words = line.split()
if 'NOUN:' in words[-2] and 'XP' in words[-1]:
flag1 = True
continue
if 'NOUN:' in words[-2] and 'AP' in words[-1]:
flag2 = True
continue
if flag1 and 'A/A' in line: xp_counter += 1
if flag2 and ( 'Y/Y' in line or 'U/U' in line):
ap_counter += 1
if xp_counter == 2 or ap_counter == 2:
return
print("".join([order]+order_lines))
def main():
buffer=[]
last_order = None
with open(sys.argv[1]) as fp:
for line in fp:
if line.startswith('ORDER'):
current_order = line
if not last_order:
last_order = current_order
continue
parse_order(last_order,buffer)
last_order = current_order
buffer = []
continue
buffer.append(line)
parse_order(last_order,buffer)
if __name__ == '__main__': main()
该脚本已使用来自 OP 的略微修改的输入文件进行了测试。如下所示,和BURY
被ALUIO
跳过:
$ ./parse_orders.py input.txt
ORDER ALPHA
Facility: 201 ZZZ COUNTRY
Wrong Trace: Kotak: NA Soak: NA NOUN: XP
O O O O O O O O O O O O O O
O O O O O O O O O O O O O O LAM
AMO ORDER # P/P R O L H S C N D K M D D C N LAM uii ii oo
--- -------- --- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --- --- -- --
BZ90rty K/K AA AA AA NA XP AP NA NA NA NA NA NA AP AP OOL XP IP N
a ZX A/A WD WD WD NA WD WD NA NA NA NA NA NA WD WD OOL WD IP Y
ORDER GAMMA
Facility: 201 ZZZ COUNTRY
Wrong Trace: Kotak: NA Soak: NA NOUN: XP
O O O O O O O O O O O O O O
O O O O O O O O O O O O O O LAM
AMO ORDER # P/P R O L H S C N D K M D D C N LAM uii ii oo
--- -------- --- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --- --- -- --
BZ90rty K/K AA AA AA NA XP AP NA NA NA NA NA NA AP AP OOL XP IP N
a ZX A/A WD WD WD NA WD WD NA NA NA NA NA NA WD WD OOL WD IP Y