紧急~~请各位大侠帮忙如何用awk读取部分报文
时间:2010-12-19
来源:互联网
如题
已知某日志文件中有好多如下报文结构体,每个报文结构都有唯一标识TransIDO :TransIDO20101217140042600470。
请各位大虾帮忙 用awk方法通过唯一标识TransIDO 将报文从<InterBOSS>......</InterBOSS>的内容输出!
我现在只能实现下面红色部分的输出,上边的蓝色部分不知道用awk如何输出!
<?xml version="1.0"?>
<InterBOSS>
<OrigDomain>UPMS</OrigDomain>
<HomeDomain>BOSS</HomeDomain>
<BIPCode>BIP2B284</BIPCode>
<BIPVer>0100</BIPVer>
<ActivityCode>T2001044</ActivityCode>
<ActionCode>0</ActionCode>
<Routing>
<RouteType>01</RouteType>
<RouteValue>13813960982</RouteValue>
</Routing>
<ProcID>UPMSPID20101217140042600470</ProcID>
<TransIDO>TransIDO20101217140042600470</TransIDO>
<TransIDH></TransIDH>
<ProcessTime>20101217140043</ProcessTime>
<SPReserve>
<TransIDC>0000UPMSTransIDO20101217140042600470</TransIDC>
<CutOffDay>20101217</CutOffDay>
<OSNDUNS>0000</OSNDUNS>
<HSNDUNS>2500</HSNDUNS>
<ConvID>005600005566TransIDO2010121714004260047020101217140028560</ConvID>
</SPReserve>
<TestFlag>0</TestFlag>
<MsgSender>2500</MsgSender>
<MsgReceiver>2501</MsgReceiver>
<SvcContVer>0100</SvcContVer>
<SvcCont><![CDATA[<?xml version="1.0" encoding="UTF-8"?><OrderReq><Amount>1</Amount><OrderList><OrderID>20101217125930280231</OrderID><MobNum>13813960982</MobNum><Province>250</Province><OrdOprTime>20101217125941</OrdOprTime><SubOrd><ItemList><SubOrderID>20101217125939668467</SubOrderID><ItemName>50Ԫ»°·Җ±³⺯ItemName><ItemID>346032</ItemID><Reserve></Reserve><Status>002</Status><StatusUpdateTime>20101217125939</StatusUpdateTime></ItemList></SubOrd></OrderList></OrderReq>]]></SvcCont>
</InterBOSS>
已知某日志文件中有好多如下报文结构体,每个报文结构都有唯一标识TransIDO :TransIDO20101217140042600470。
请各位大虾帮忙 用awk方法通过唯一标识TransIDO 将报文从<InterBOSS>......</InterBOSS>的内容输出!
我现在只能实现下面红色部分的输出,上边的蓝色部分不知道用awk如何输出!
<?xml version="1.0"?>
<InterBOSS>
<OrigDomain>UPMS</OrigDomain>
<HomeDomain>BOSS</HomeDomain>
<BIPCode>BIP2B284</BIPCode>
<BIPVer>0100</BIPVer>
<ActivityCode>T2001044</ActivityCode>
<ActionCode>0</ActionCode>
<Routing>
<RouteType>01</RouteType>
<RouteValue>13813960982</RouteValue>
</Routing>
<ProcID>UPMSPID20101217140042600470</ProcID>
<TransIDO>TransIDO20101217140042600470</TransIDO>
<TransIDH></TransIDH>
<ProcessTime>20101217140043</ProcessTime>
<SPReserve>
<TransIDC>0000UPMSTransIDO20101217140042600470</TransIDC>
<CutOffDay>20101217</CutOffDay>
<OSNDUNS>0000</OSNDUNS>
<HSNDUNS>2500</HSNDUNS>
<ConvID>005600005566TransIDO2010121714004260047020101217140028560</ConvID>
</SPReserve>
<TestFlag>0</TestFlag>
<MsgSender>2500</MsgSender>
<MsgReceiver>2501</MsgReceiver>
<SvcContVer>0100</SvcContVer>
<SvcCont><![CDATA[<?xml version="1.0" encoding="UTF-8"?><OrderReq><Amount>1</Amount><OrderList><OrderID>20101217125930280231</OrderID><MobNum>13813960982</MobNum><Province>250</Province><OrdOprTime>20101217125941</OrdOprTime><SubOrd><ItemList><SubOrderID>20101217125939668467</SubOrderID><ItemName>50Ԫ»°·Җ±³⺯ItemName><ItemID>346032</ItemID><Reserve></Reserve><Status>002</Status><StatusUpdateTime>20101217125939</StatusUpdateTime></ItemList></SubOrd></OrderList></OrderReq>]]></SvcCont>
</InterBOSS>
作者: ruyanvxiaoman 发布时间: 2010-12-19
红色部分我自己的写法是
cat T2001044-TransIDO20101217140042600470.xml | awk 'BEGIN{while(getline){if(/TransIDO20101217140042600470/) for(i=0;i<=NR;i++){ print $0; if(/InterBOSS/) break; getline;}}}'
请各位大侠给出蓝色部分输出的方法
cat T2001044-TransIDO20101217140042600470.xml | awk 'BEGIN{while(getline){if(/TransIDO20101217140042600470/) for(i=0;i<=NR;i++){ print $0; if(/InterBOSS/) break; getline;}}}'
请各位大侠给出蓝色部分输出的方法
作者: ruyanvxiaoman 发布时间: 2010-12-19
awk不熟,试下这个:
Assembly code
另外为什么非要awk?
Assembly code
awk '/TransIDO20101217140042600470/{print "<InterBOSS>"$0}' RS="<InterBOSS>" T2001044-TransIDO20101217140042600470.xml
另外为什么非要awk?
作者: iambic 发布时间: 2010-12-19
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28