免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2968 | 回复: 7
打印 上一主题 下一主题

[文本处理] 求提高此脚本效率的方法 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-09-07 13:55 |只看该作者 |倒序浏览
本帖最后由 llaser 于 2012-09-07 13:57 编辑

脚本是这样的
  1. echo "MSISDN;IMSI;APNID1;IP1;PDPID1;APNID2;IP2;PDPID2;APNID3;IP3;PDPID3;APNID4;IP4;PDPID4;APNID5;IP5;PDPID5;APNID6;IP6;PDPID6" >$2
  2. cat $1|dos2unix|awk '{if(A)print;A=0}/^MSISDN/{A=1}/^APNID/{B=1}{if(B)print}/END/{B=0}'|tr -d '\n'|sed 's/END/\n/g'|awk '{if(length($0)>10)print}'|while read ALINE
  3. do
  4. F1=`echo "$ALINE" |cut -b1-13`
  5. F2=`echo "$ALINE" |cut -b18-32`

  6. F3=`echo "$ALINE" |cut -b126-128`
  7. F4=`echo "$ALINE" |cut -b132-147`
  8. F5=`echo "$ALINE" |cut -b185-185`

  9. F6=`echo "$ALINE" |cut -b188-190`
  10. F7=`echo "$ALINE" |cut -b194-209`
  11. F8=`echo "$ALINE" |cut -b247-247`

  12. F9=`echo "$ALINE" |cut -b250-252`
  13. F10=`echo "$ALINE" |cut -b256-271`
  14. F11=`echo "$ALINE" |cut -b309-309`

  15. F12=`echo "$ALINE" |cut -b312-314`
  16. F13=`echo "$ALINE" |cut -b318-333`
  17. F14=`echo "$ALINE" |cut -b371-371`

  18. F15=`echo "$ALINE" |cut -b374-376`
  19. F16=`echo "$ALINE" |cut -b380-395`
  20. F17=`echo "$ALINE" |cut -b433-433`

  21. F18=`echo "$ALINE" |cut -b436-438`
  22. F19=`echo "$ALINE" |cut -b442-457`
  23. F20=`echo "$ALINE" |cut -b495-495`

  24. echo $F1";"$F2";"$F3";"$F4";"$F5";"$F6";"$F7";"$F8";"$F9";"$F10";"$F11";"$F12";"$F13";"$F14";"$F15";"$F16";"$F17";"$F18";"$F19";"$F20 >>$2
  25. done
复制代码
原始数据
  1. <hgsdp:msisdn=8613411110014,pdp;
  2. HLR SUBSCRIBER DATA

  3. SUBSCRIBER IDENTITY
  4. MSISDN           IMSI             STATE          AUTHD
  5. 8613411110014    460001110583182  CONNECTED      AVAILABLE

  6. NAM
  7. 0

  8. PACKET DATA PROTOCOL CONTEXT DATA
  9. APNID   PDPADD                EQOSID  VPAA  PDPCH    PDPTY  PDPID
  10.     1                          401    NO             IPV4    1
  11.     2                          401    NO             IPV4    2
  12.   118                          401    NO             IPV4    3
  13.   901                          401    NO             IPV4    4
  14.     4   10.7.85.168            401    YES            IPV4    5

  15. END
  16. <hgsdp:msisdn=8613411110024,pdp;
  17. HLR SUBSCRIBER DATA

  18. SUBSCRIBER IDENTITY
  19. MSISDN           IMSI             STATE          AUTHD
  20. 8613411110024    460001111783034  CONNECTED      AVAILABLE

  21. NAM
  22. 0

  23. PACKET DATA PROTOCOL CONTEXT DATA
  24. APNID   PDPADD                EQOSID  VPAA  PDPCH    PDPTY  PDPID
  25.     1                          401    NO             IPV4    1
  26.     2                          401    NO             IPV4    2
  27.   118                          401    NO             IPV4    3
  28.     4   10.7.88.90             401    YES            IPV4    5

  29. END
  30. <hgsdp:msisdn=8613411110054,pdp;
  31. HLR SUBSCRIBER DATA

  32. SUBSCRIBER IDENTITY
  33. MSISDN           IMSI             STATE          AUTHD
  34. 8613411110054    460001110586550  CONNECTED      AVAILABLE

  35. NAM
  36. 0

  37. PACKET DATA PROTOCOL CONTEXT DATA
  38. APNID   PDPADD                EQOSID  VPAA  PDPCH    PDPTY  PDPID
  39.     1                          401    NO             IPV4    1
  40.     2                          401    NO             IPV4    2
  41.   901                          401    NO             IPV4    3
  42.     4   10.5.85.1              401    YES            IPV4    4

  43. END
  44. <hgsdp:msisdn=8613411110134,pdp;
  45. HLR SUBSCRIBER DATA

  46. SUBSCRIBER IDENTITY
  47. MSISDN           IMSI             STATE          AUTHD
  48. 8613411110134    460001110586551  CONNECTED      AVAILABLE

  49. NAM
  50. 0

  51. PACKET DATA PROTOCOL CONTEXT DATA
  52. APNID   PDPADD                EQOSID  VPAA  PDPCH    PDPTY  PDPID
  53.     1                          401    NO             IPV4    1
  54.     2                          401    NO             IPV4    2
  55.   118                          401    NO             IPV4    3
  56.   901                          401    NO             IPV4    4
  57.     4   10.5.85.2              401    YES            IPV4    5

  58. END
复制代码
输出
  1. MSISDN;IMSI;APNID1;IP1;PDPID1;APNID2;IP2;PDPID2;APNID3;IP3;PDPID3;APNID4;IP4;PDPID4;APNID5;IP5;PDPID5;APNID6;IP6;PDPID6
  2. 8613411110014;460001110583182; 1; ;1; 2; ;2;118; ;3;901; ;4; 4;10.7.85.168 ;5;;;
  3. 8613411110024;460001111783034; 1; ;1; 2; ;2;118; ;3; 4;10.7.88.90 ;5;;;;;;
  4. 8613411110054;460001110586550; 1; ;1; 2; ;2;901; ;3; 4;10.5.85.1 ;4;;;;;;
  5. 8613411110134;460001110586551; 1; ;1; 2; ;2;118; ;3;901; ;4; 4;10.5.85.2 ;5;;;
复制代码
我自己捣鼓的这个执行效率太低了,求高手帮忙 脚本及文件.zip (1.32 KB, 下载次数: 34)

论坛徽章:
15
2015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-15 17:29:44午马
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉鸡
日期:2014-04-02 12:24:51双子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥猪
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大牛徽章
日期:2013-04-17 11:48:45
2 [报告]
发表于 2012-09-07 15:30 |只看该作者
本帖最后由 rdcwayx 于 2012-09-07 17:40 编辑
  1. awk '/MSISDN/{getline;s=$1 OFS $2}
  2.     /APNID/{ while (1)
  3.               {  getline
  4.                  if ($0!~/[0-9]/) {print s; break}
  5.                  s=(NF>5)?s OFS $1 OFS $2 OFS $NF:s OFS $1 OFS " " OFS $NF
  6.               }
  7.            }' OFS=";" infile

  8. 8613411110014;460001110583182;1; ;1;2; ;2;118; ;3;901; ;4;4;10.7.85.168;5
  9. 8613411110024;460001111783034;1; ;1;2; ;2;118; ;3;4;10.7.88.90;5
  10. 8613411110054;460001110586550;1; ;1;2; ;2;901; ;3;4;10.5.85.1;4
  11. 8613411110134;460001110586551;1; ;1;2; ;2;118; ;3;901; ;4;4;10.5.85.2;5
复制代码

论坛徽章:
0
3 [报告]
发表于 2012-09-07 16:17 |只看该作者
  1. ;4;10.5.85.2;5460001110586551;1; ;1
  2. ;4;10.5.85.1;4460001110586550;1; ;1
  3. ;4;10.7.88.90;560001111783034;1; ;1
  4. ;4;10.7.85.168;50001110583182;1; ;1
复制代码
我这里运行结果是这个啊

论坛徽章:
0
4 [报告]
发表于 2012-09-07 16:27 |只看该作者
  1. ;4;10.7.85.168;50001110583182;1; ;1
  2. ;4;10.7.88.90;560001111783034;1; ;1
  3. ;4;10.5.85.1;4460001110586550;1; ;1
  4. ;4;10.5.85.2;5460001110586551;1; ;1
复制代码
第二次更新的是这个结果。。

论坛徽章:
15
2015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-15 17:29:44午马
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉鸡
日期:2014-04-02 12:24:51双子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥猪
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大牛徽章
日期:2013-04-17 11:48:45
5 [报告]
发表于 2012-09-08 19:32 |只看该作者
你的awk 什么版本啊?

论坛徽章:
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
6 [报告]
发表于 2012-09-08 21:49 |只看该作者
回复 4# llaser

$ dos2unix hgsdp.log
dos2unix: converting file hgsdp.log to Unix format ...

and it will work fine

$ awk '/MSISDN/{getline;s=$1 OFS $2}
    /APNID/{ while (1)
              {  getline
                 if ($0!~/[0-9]/) {print s; break}
                 s=(NF>5)?s OFS $1 OFS $2 OFS $NF:s OFS $1 OFS " " OFS $NF
              }
           }' OFS=";" hgsdp.log
8613411110014;460001110583182;1; ;1;2; ;2;118; ;3;901; ;4;4;10.7.85.168;5
8613411110024;460001111783034;1; ;1;2; ;2;118; ;3;4;10.7.88.90;5
8613411110054;460001110586550;1; ;1;2; ;2;901; ;3;4;10.5.85.1;4
8613411110134;460001110586551;1; ;1;2; ;2;118; ;3;901; ;4;4;10.5.85.2;5


   

论坛徽章:
0
7 [报告]
发表于 2012-09-10 08:39 |只看该作者
发现问题了,是换行格式问题,谢谢楼上提醒了

论坛徽章:
1
15-16赛季CBA联赛之广夏
日期:2016-04-12 15:53:16
8 [报告]
发表于 2016-03-05 10:47 |只看该作者
mark一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP