如果复杂过滤器匹配,则显示整个数据块 A---B

如果复杂过滤器匹配,则显示整个数据块 A---B

可能被陈述为重复..感谢您的接受

阿尔法秩序

设施: 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 的略微修改的输入文件进行了测试。如下所示,和BURYALUIO跳过:

$ ./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

相关内容