免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1313 | 回复: 6

[文本处理] awk挑战题来了 [复制链接]

论坛徽章:
0
发表于 2017-10-19 12:48 |显示全部楼层
内容如下:
id:1
id:2
<orderImportRequest version="0.1" login="120" password="xxxx">
    <orders>  <order sequence="1">
            <clientCode/>
            <clientReferenceNumber></clientReferenceNumber>
            <branch>INV_SY</branch>
            <erpNumber>SYZP201710180010</erpNumber>
            <allowUpdate>true</allowUpdate>
            <shipFromExternalId>开发科技有限公司</shipFromExternalId>            
            <shipTo>
                <companyName>有限公司</companyName>
                <province>广东省</province>
                <town>广州市</town>
              <county>区</county>
             <address>321197</address>
                <contact>
                    <name>广东省</name>
                    <mobile>广东省</mobile>
                </contact>
            </shipTo>
            <timeSchedule>
                <pickupDate>2017-10-17</pickupDate>
                <deliveryDate>2017-10-17</deliveryDate>
             <pickupTimeFrom>10:00:00</pickupTimeFrom>
             <pickupTimeTo>10:00:00</pickupTimeTo>            
             <deliveryTimeFrom>18:00:00</deliveryTimeFrom>
             <deliveryTimeTo>18:00:00</deliveryTimeTo>
            </timeSchedule><orderLines> </orderLines><concealOrderLines>false</concealOrderLines>
            <rejectDraft>true</rejectDraft>
            <autoProcessMode>1</autoProcessMode>
            <dispatchBy>1</dispatchBy>
            <cargoDetails>
                <totalQuantity>1</totalQuantity>
                <totalWeight>1</totalWeight>
                <totalVolume>1</totalVolume>               
            </cargoDetails>
            <transportMode>
                <transportType></transportType>
                <truckType>1</truckType>
                <truckLength>4.2</truckLength>
            </transportMode> <customFields>
    <customText1>广东省</customText1>
    <customText3>广东省</customText3>
    <customText30></customText30>                                               
    <customEnum1></customEnum1>
    <customEnum2>广东省</customEnum2>         
    <customEnum3>广东省货</customEnum3>
    <customEnum4>广东省</customEnum4>  
    <customEnum6></customEnum6>                 
    </customFields> </order> </orders>
</orderImportRequest>

需求: 首先过滤出<orderImportRequest> 到 </orderImportRequest> 范围内如果包含<shipTo>到</shipTo> 就打印<orderImportRequest version="0.1" login="120" password="xxxx">和<shipTo>到</shipTo>的内容.


论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:58:11
发表于 2017-10-19 13:56 |显示全部楼层
本帖最后由 这个冬天不冷 于 2017-10-19 13:58 编辑
  1. cat test.txt
  2. d:1
  3. id:2
  4. <orderImportRequest version="0.1" login="120" password="xxxx">
  5.     <orders>  <order sequence="1">
  6.             <clientCode/>
  7.             <clientReferenceNumber></clientReferenceNumber>
  8.             <branch>INV_SY</branch>
  9.             <erpNumber>SYZP201710180010</erpNumber>
  10.             <allowUpdate>true</allowUpdate>
  11.             <shipFromExternalId>开发科技有限公司</shipFromExternalId>            
  12.             <shipTo>
  13.                 <companyName>有限公司</companyName>
  14.                 <province>广东省</province>
  15.                 <town>广州市</town>
  16.               <county>区</county>
  17.              <address>321197</address>
  18.                 <contact>
  19.                     <name>广东省</name>
  20.                     <mobile>广东省</mobile>
  21.                 </contact>
  22.             </shipTo>
  23.             <timeSchedule>
  24.                 <pickupDate>2017-10-17</pickupDate>
  25.                 <deliveryDate>2017-10-17</deliveryDate>
  26.              <pickupTimeFrom>10:00:00</pickupTimeFrom>
  27.              <pickupTimeTo>10:00:00</pickupTimeTo>            
  28.              <deliveryTimeFrom>18:00:00</deliveryTimeFrom>
  29.              <deliveryTimeTo>18:00:00</deliveryTimeTo>
  30.             </timeSchedule><orderLines> </orderLines><concealOrderLines>false</concealOrderLines>
  31.             <rejectDraft>true</rejectDraft>
  32.             <autoProcessMode>1</autoProcessMode>
  33.             <dispatchBy>1</dispatchBy>
  34.             <cargoDetails>
  35.                 <totalQuantity>1</totalQuantity>
  36.                 <totalWeight>1</totalWeight>
  37.                 <totalVolume>1</totalVolume>               
  38.             </cargoDetails>
  39.             <transportMode>
  40.                 <transportType></transportType>
  41.                 <truckType>1</truckType>
  42.                 <truckLength>4.2</truckLength>
  43.             </transportMode> <customFields>
  44.     <customText1>广东省</customText1>
  45.     <customText3>广东省</customText3>
  46.     <customText30></customText30>                                               
  47.     <customEnum1></customEnum1>
  48.     <customEnum2>广东省</customEnum2>         
  49.     <customEnum3>广东省货</customEnum3>
  50.     <customEnum4>广东省</customEnum4>  
  51.     <customEnum6></customEnum6>                 
  52.     </customFields> </order> </orders>
  53. </orderImportRequest>
  54. # awk '{if($0~/orderImportRequest/){f1=1;print $0}if($0~/<\/orderImportRequest>/){f1=0;} if(f1){if($0~/shipTo/){f2=1} if(print $0} if(f2)print $0}}' test.txt
  55. <orderImportRequest version="0.1" login="120" password="xxxx">
  56.             <shipTo>
  57.                 <companyName>有限公司</companyName>
  58.                 <province>广东省</province>
  59.                 <town>广州市</town>
  60.               <county>区</county>
  61.              <address>321197</address>
  62.                 <contact>
  63.                     <name>广东省</name>
  64.                     <mobile>广东省</mobile>
  65.                 </contact>
  66.             </shipTo>
  67. </orderImportRequest>
复制代码

论坛徽章:
24
申猴
日期:2014-10-10 15:56:39射手座
日期:2014-10-10 15:57:18黑曼巴
日期:2018-05-14 11:05:122016科比退役纪念章
日期:2018-05-14 11:05:0715-16赛季CBA联赛之北控
日期:2018-05-14 11:05:0015-16赛季CBA联赛之江苏
日期:2017-02-27 18:11:0715-16赛季CBA联赛之上海
日期:2018-08-15 09:48:5415-16赛季CBA联赛之佛山
日期:2018-07-20 17:14:2315-16赛季CBA联赛之佛山
日期:2019-09-10 18:08:4615-16赛季CBA联赛之山西
日期:2020-03-26 09:40:5115-16赛季CBA联赛之佛山
日期:2020-05-08 09:03:54
发表于 2017-10-19 13:57 |显示全部楼层
本帖最后由 chengchow 于 2017-10-19 13:59 编辑
  1. <blockquote><div class="blockcode"><blockquote>[root@module tmp]# sed -rn '/<orderImportRequest/,/<\/orderImportRequest>/{1h;1!H;$!d;${g;s/.*(<orderImportRequest version="0.1" login="120" password=\S+).*(<shipTo>.*<\/shipTo>).*/\1\n\t    \2/p}}' aa.log
  2. <orderImportRequest version="0.1" login="120" password="xxxx">
  3.             <shipTo>
  4.                 <companyName>有限公司</companyName>
  5.                 <province>广东省</province>
  6.                 <town>广州市</town>
  7.               <county>区</county>
  8.              <address>321197</address>
  9.                 <contact>
  10.                     <name>广东省</name>
  11.                     <mobile>广东省</mobile>
  12.                 </contact>
  13.             </shipTo>
复制代码

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
发表于 2017-10-19 13:59 |显示全部楼层
回复 1# by917611


$ awk '/^ *<orderImportRequest /{p=1;h=$0}/^ *<\/orderImportRequest>/{p=0;if(s)print h s}p{if(/^ *<shipTo>/)st=1;if(st)s=s"\n"$0;if(/^ *<\/shipTo>/)st=0}' FILE
<orderImportRequest version="0.1" login="120" password="xxxx">
            <shipTo>
                <companyName>有限公司</companyName>
                <province>广东省</province>
                <town>广州市</town>
              <county>区</county>
             <address>321197</address>
                <contact>
                    <name>广东省</name>
                    <mobile>广东省</mobile>
                </contact>
            </shipTo>

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:58:11
发表于 2017-10-19 14:03 |显示全部楼层
回复 4# jason680

还在坚持回帖啊,真心厉害

论坛徽章:
24
程序设计版块每日发帖之星
日期:2016-05-03 06:20:0015-16赛季CBA联赛之八一
日期:2018-07-03 16:56:4615-16赛季CBA联赛之八一
日期:2018-07-05 10:34:09黑曼巴
日期:2018-07-06 15:19:5015-16赛季CBA联赛之佛山
日期:2018-08-03 13:19:3315-16赛季CBA联赛之山西
日期:2018-08-07 19:46:2315-16赛季CBA联赛之广夏
日期:2018-08-08 19:31:5015-16赛季CBA联赛之青岛
日期:2018-11-26 15:21:5015-16赛季CBA联赛之上海
日期:2018-12-11 09:45:3219周年集字徽章-年
日期:2020-04-18 23:54:5215-16赛季CBA联赛之深圳
日期:2020-04-19 21:40:1915-16赛季CBA联赛之深圳
日期:2018-06-15 14:59:37
发表于 2017-10-19 14:08 |显示全部楼层
本帖最后由 wh7211 于 2017-10-19 14:17 编辑

回复 1# by917611


  1. awk '/<orderImportRequest.*>/{print;a=1}/<shipTo>/{b=1}a&&b{print}/<\/shipTo>/{b=0}/<\/orderImportRequest>/{a=0}' file
复制代码

论坛徽章:
2
2016科比退役纪念章
日期:2017-09-30 10:47:3315-16赛季CBA联赛之福建
日期:2017-10-13 09:46:21
发表于 2017-10-19 17:28 |显示全部楼层
回复 1# by917611

脚本ss.awk:
  1. /<orderImportRequest /{f1=1; content=$0;}/<shipTo>/{f2=1;}
  2. /<\/shipTo>/{ if(f2==1) f2=2; if(f1==1) content=content"\n</shipTo>";}
  3. /<\/orderImportRequest>/{if(f1==1&&f2==2) print content"\n</orderImportRequest>"; f1=0;f2=0;content="";}
  4. {       if(f1==1&&f2==1)
  5.         {       content=content"\n"$0;
  6.         }
  7. }
复制代码


修改测试数据文件 ss.txt 加多几个特别用例:
id:1
id:2
<orderImportRequest version="0.1" login="120" password="xxxx">
    <orders>  <order sequence="1">
            <clientCode/>
            <clientReferenceNumber></clientReferenceNumber>
            <branch>INV_SY</branch>
            <erpNumber>SYZP201710180010</erpNumber>
            <allowUpdate>true</allowUpdate>
            <shipFromExternalId>开发科技有限公司</shipFromExternalId>            
            <shipTo>
                <companyName>有限公司</companyName>
                <province>广东省</province>
                <town>广州市</town>
              <county>区</county>
             <address>321197</address>
                <contact>
                    <name>广东省</name>
                    <mobile>广东省</mobile>
                </contact>
            </shipTo>
            <timeSchedule>
                <pickupDate>2017-10-17</pickupDate>
                <deliveryDate>2017-10-17</deliveryDate>
             <pickupTimeFrom>10:00:00</pickupTimeFrom>
             <pickupTimeTo>10:00:00</pickupTimeTo>            
             <deliveryTimeFrom>18:00:00</deliveryTimeFrom>
             <deliveryTimeTo>18:00:00</deliveryTimeTo>
            </timeSchedule><orderLines>
</orderLines><concealOrderLines>false</concealOrderLines>
            <rejectDraft>true</rejectDraft>
            <autoProcessMode>1</autoProcessMode>
            <dispatchBy>1</dispatchBy>
            <cargoDetails>
                <totalQuantity>1</totalQuantity>
                <totalWeight>1</totalWeight>
                <totalVolume>1</totalVolume>               
            </cargoDetails>
            <transportMode>
                <transportType></transportType>
                <truckType>1</truckType>
                <truckLength>4.2</truckLength>
            </transportMode> <customFields>
    <customText1>广东省</customText1>
    <customText3>广东省</customText3>
    <customText30></customText30>                                               
    <customEnum1></customEnum1>
    <customEnum2>广东省</customEnum2>         
    <customEnum3>广东省货</customEnum3>
    <customEnum4>广东省</customEnum4>  
    <customEnum6></customEnum6>                 
    </customFields> </order> </orders>
</orderImportRequest>


<orderImportRequest version="0.1" login="121" password="xxxx">
    <orders>  <order sequence="1">
            <clientCode/>
            <clientReferenceNumber></clientReferenceNumber>
            <branch>INV_SY</branch>
            <erpNumber>SYZP201710180010</erpNumber>
            <allowUpdate>true</allowUpdate>
            <shipFromExternalId>开发科技有限公司</shipFromExternalId>            
</order> </orders>
</orderImportRequest>

<shipTo>
                <companyName>有限公司</companyName>
                <province>黑龙省</province>
                <town>哈尔滨</town>
</shipTo>

<orderImportRequest version="0.1" login="122" password="xxxx">
    <orders>  <order sequence="1">
            <clientCode/>
            <clientReferenceNumber></clientReferenceNumber>
            <branch>INV_SY</branch>
            <erpNumber>SYZP201710180010</erpNumber>
            <allowUpdate>true</allowUpdate>
            <shipFromExternalId>开发科技有限公司</shipFromExternalId>            
            <shipTo>
                <companyName>有限公司</companyName>
                <province>陕西省</province>
                <town>西安市</town>
             <address></address>
                <contact>
                    <name>陕西省西安市大雁塔</name>
                    <mobile>11212</mobile>
                </contact>
            </shipTo>
                        <nohup />
                        <shipTo>
                <companyName>有限公司</companyName>
                <province>山西省</province>
                <town>山西市</town>
                        </shipTo>
</order> </orders>
</orderImportRequest>


运行$awk -f ss.awk ss.txt 输出:
$awk -f ss.awk ss.txt
<orderImportRequest version="0.1" login="120" password="xxxx">
            <shipTo>
                <companyName>有限公司</companyName>
                <province>广东省</province>
                <town>广州市</town>
              <county>区</county>
             <address>321197</address>
                <contact>
                    <name>广东省</name>
                    <mobile>广东省</mobile>
                </contact>
</shipTo>
</orderImportRequest>
<orderImportRequest version="0.1" login="122" password="xxxx">
            <shipTo>
                <companyName>有限公司</companyName>
                <province>陕西省</province>
                <town>西安市</town>
             <address></address>
                <contact>
                    <name>陕西省西安市大雁塔</name>
                    <mobile>11212</mobile>
                </contact>
</shipTo>
                        <shipTo>
                <companyName>有限公司</companyName>
                <province>山西省</province>
                <town>山西市</town>
</shipTo>
</orderImportRequest>



您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP