【发布时间】:2016-03-26 22:09:07
【问题描述】:
我有一堆看起来像这样的数据:
|ApplVerID=9|unknownID_9=184|MessageType=X|SenderCompID=CME|MsgSeqNum=131523|SendingTime=20140915014116175|TradeDate=20140915|NoMDEntries=1|MDUpdateAction=0|SecurityIDSource=8|SecurityID=951806|RptSeq=3|SecurityDesc=UD:1T: SG 0822951806|MDEntryType=2|MDEntryPx=21|MDEntrySize=1|MDEntryTime=14116000|TradeCondition=E|NetChgPrevDay=1|TradeID=1|TradeVolume=5|AggressorSide=2|MatchEventIndicator=1|unknownID_10=224
|ApplVerID=9|unknownID_9=272|MessageType=X|SenderCompID=CME|MsgSeqNum=131524|SendingTime=20140915014116175|TradeDate=20140915|NoMDEntries=2|MDUpdateAction=0|SecurityIDSource=8|SecurityID=265872|RptSeq=7|SecurityDesc=ONX4 P3400|MDEntryType=2|MDEntryPx=17|MDEntrySize=1|MDEntryTime=14116000|TradeCondition=1|NetChgPrevDay=0|TradeID=1|TradeVolume=1|AggressorSide=2|MDUpdateAction=0|SecurityIDSource=8|SecurityID=311863|RptSeq=8|SecurityDesc=ONX4 C4700|MDEntryType=2|MDEntryPx=9|MDEntrySize=1|MDEntryTime=14116000|TradeCondition=1|NetChgPrevDay=0|TradeID=1|TradeVolume=1|AggressorSide=2|unknownID_10=160
|ApplVerID=9|unknownID_9=411|MessageType=X|SenderCompID=CME|MsgSeqNum=131574|SendingTime=20140915020404771|TradeDate=20140915|NoMDEntries=4|MDUpdateAction=0|SecurityIDSource=8|SecurityID=873267|RptSeq=16|SecurityDesc=ONX4 P3600|MDEntryType=2|MDEntryPx=30|MDEntrySize=7|MDEntryTime=20404000|TickDirection=2|TradeCondition=E|NetChgPrevDay=-5|TradeID=1|TradeVolume=5|AggressorSide=1|MatchEventIndicator=1|MDUpdateAction=1|SecurityIDSource=8|SecurityID=873267|RptSeq=17|SecurityDesc=ONX4 P3600|MDEntryType=1|MDEntryPx=45|MDEntrySize=3|MDEntryTime=20404000|TradingSessionID=2|NumberOfOrders=1|MDPriceLevel=1|MDUpdateAction=0|SecurityIDSource=8|SecurityID=873267|RptSeq=18|SecurityDesc=ONX4 P3600|MDEntryType=7|MDEntryPx=41|MDEntryTime=20404000|MDUpdateAction=0|SecurityIDSource=8|SecurityID=873267|RptSeq=19|SecurityDesc=ONX4 P3600|MDEntryType=8|MDEntryPx=45|MDEntryTime=20404000|unknownID_10=043
我想提取每条包含“MDEntryType=2”的消息。请注意,每行中可以有多条消息。消息的数量在“NoMDEntries”中指示。还有其他不相关的消息,例如上面带有“MDEntryType=7”的消息。我想要的每条单独的消息都以 'MDUpdateAction=' 开头,并在下一个 'MDUpdateAction=' 或以 'unknownID_10=' 之前结束。
注意,每个区块有一个“SendingTime”。
我想按以下格式返回数据:
|SendingTime=20140915014116175|MDUpdateAction=0|SecurityIDSource=8|SecurityID=951806|RptSeq=3|SecurityDesc=UD:1T: SG 0822951806|MDEntryType=2|MDEntryPx=21|MDEntrySize=1|MDEntryTime=14116000|TradeCondition=E|NetChgPrevDay=1|TradeID=1|TradeVolume=5|AggressorSide=2|MatchEventIndicator=1|
|SendingTime=20140915014116175|MDUpdateAction=0|SecurityIDSource=8|SecurityID=265872|RptSeq=7|SecurityDesc=ONX4 P3400|MDEntryType=2|MDEntryPx=17|MDEntrySize=1|MDEntryTime=14116000|TradeCondition=1|NetChgPrevDay=0|TradeID=1|TradeVolume=1|AggressorSide=2|
|SendingTime=20140915014116175|MDUpdateAction=0|SecurityIDSource=8|SecurityID=311863|RptSeq=8|SecurityDesc=ONX4 C4700|MDEntryType=2|MDEntryPx=9|MDEntrySize=1|MDEntryTime=14116000|TradeCondition=1|NetChgPrevDay=0|TradeID=1|TradeVolume=1|AggressorSide=2|
|SendingTime=20140915020404771|MDUpdateAction=0|SecurityIDSource=8|SecurityID=873267|RptSeq=16|SecurityDesc=ONX4 P3600|MDEntryType=2|MDEntryPx=30|MDEntrySize=7|MDEntryTime=20404000|TickDirection=2|TradeCondition=E|NetChgPrevDay=-5|TradeID=1|TradeVolume=5|AggressorSide=1|MatchEventIndicator=1|
如果在每行的开头设置发送时间太困难,您可以将其关闭。我只是将数据按天分开,并使用“MDEntryTime”中记录的毫秒数。
我很乐意使用任何有效的软件解决方案(sed、perl 等)。我一直试图用 Emacs 宏解决这个问题,但无济于事。
感谢您提供的任何帮助。
编辑:有些行有两个“MDEntryType=2”实例,因此要从该行中提取两条消息。例如:
|ApplVerID=9|unknownID_9=293|MessageType=X|SenderCompID=CME|MsgSeqNum=153770|SendingTime=20140915113751112|TradeDate=20140915|NoMDEntries=2|MDUpdateAction=0|SecurityIDSource=8|SecurityID=292861|RptSeq=6|SecurityDesc=ONZ4 P4100|MDEntryType=2|MDEntryPx=151|MDEntrySize=6|MDEntryTime=113751000|TickDirection=2|TradeCondition=1|NetChgPrevDay=-12|TradeID=1|TradeVolume=5|AggressorSide=1|MDUpdateAction=0|SecurityIDSource=8|SecurityID=726692|RptSeq=7|SecurityDesc=ONV4 P4100|MDEntryType=2|MDEntryPx=276|MDEntrySize=5|MDEntryTime=113751000|TickDirection=2|TradeCondition=1|NetChgPrevDay=-13|TradeID=1|TradeVolume=5|AggressorSide=2|unknownID_10=153
通常,任何行都可以有任意数量的要提取的消息和要丢弃的消息。
【问题讨论】: