免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: yestreenstars
打印 上一主题 下一主题

[文本处理] 提取数字并循环打印 [复制链接]

论坛徽章:
1
辰龙
日期:2014-05-22 11:38:58
31 [报告]
发表于 2013-02-28 19:59 |只看该作者
  1. awk -vRS='[0-9]+[ \t]+to[ \t]+[0-9]+' 'NR==1{prefix=$0}{if($0~/[0-9]/)print prefix,$1;if(RT~/to/){split(RT,a);for(i=int(a[1]);i<=int(a[3]);i++)print prefix,i}}'
复制代码

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
32 [报告]
发表于 2013-02-28 21:02 |只看该作者
match 也不错~
  1. awk '{match($0,/([^0-9]+)(.*)/,a);t=a[1];$0=a[2];while(match($0,/([0-9]+) to ([0-9]+)(.*)/,a)){for(i=a[1];i<=a[2];i++)print t,i;if(match(a[3],/ ([0-9]+)( [0-9].*)/,a)){print t,a[1];$0=a[2]}else{$0=a[3]}}}'
复制代码

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
33 [报告]
发表于 2013-02-28 21:19 |只看该作者
本帖最后由 yestreenstars 于 2013-02-28 21:24 编辑

回复 32# yinyuemi


    没细看,不过从结果来看应该是有问题的:
  1. [root@localhost ~]# cat i
  2. port trunk allow-pass vlan 3 to 19 21 to 25 29 32 to 35 37 to 41 43 to 44 48 52 to 56 59 to 64 66 to 70
  3. [root@localhost ~]# awk '{match($0,/([^0-9]+)(.*)/,a);t=a[1];$0=a[2];while(match($0,/([0-9]+) to ([0-9]+)(.*)/,a)){for(i=a[1];i<=a[2];i++)print t,i;if(match(a[3],/ ([0-9]+)( [0-9].*)/,a)){print t,a[1];$0=a[2]}else{$0=a[3]}}}' i
  4. port trunk allow-pass vlan  3
  5. port trunk allow-pass vlan  4
  6. port trunk allow-pass vlan  5
  7. port trunk allow-pass vlan  6
  8. port trunk allow-pass vlan  7
  9. port trunk allow-pass vlan  8
  10. port trunk allow-pass vlan  9
  11. port trunk allow-pass vlan  10
  12. port trunk allow-pass vlan  11
  13. port trunk allow-pass vlan  12
  14. port trunk allow-pass vlan  13
  15. port trunk allow-pass vlan  14
  16. port trunk allow-pass vlan  15
  17. port trunk allow-pass vlan  16
  18. port trunk allow-pass vlan  17
  19. port trunk allow-pass vlan  18
  20. port trunk allow-pass vlan  19
  21. [root@localhost ~]#
复制代码
原来match还可以这样用的,学习了~

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
34 [报告]
发表于 2013-02-28 21:53 |只看该作者
回复 33# yestreenstars


   
为蛤蟆我测试可以呢?
  1. echo port trunk allow-pass vlan 3 to 19 21 to 25 29 32 to 35 37 to 41 43 to 44 48 52 to 56 59 to 64 66 to 70 |awk '{match($0,/([^0-9]+)(.*)/,a);t=a[1];$0=a[2];while(match($0,/([0-9]+) to ([0-9]+)(.*)/,a)){for(i=a[1];i<=a[2];i++)print t,i;if(match(a[3],/ ([0-9]+)( [0-9].*)/,a)){print t,a[1];$0=a[2]}else{$0=a[3]}}}'   port trunk allow-pass vlan  3
  2. port trunk allow-pass vlan  4
  3. port trunk allow-pass vlan  5
  4. port trunk allow-pass vlan  6
  5. port trunk allow-pass vlan  7
  6. port trunk allow-pass vlan  8
  7. port trunk allow-pass vlan  9
  8. port trunk allow-pass vlan  10
  9. port trunk allow-pass vlan  11
  10. port trunk allow-pass vlan  12
  11. port trunk allow-pass vlan  13
  12. port trunk allow-pass vlan  14
  13. port trunk allow-pass vlan  15
  14. port trunk allow-pass vlan  16
  15. port trunk allow-pass vlan  17
  16. port trunk allow-pass vlan  18
  17. port trunk allow-pass vlan  19
  18. port trunk allow-pass vlan  25
  19. port trunk allow-pass vlan  32
  20. port trunk allow-pass vlan  33
  21. port trunk allow-pass vlan  34
  22. port trunk allow-pass vlan  35
  23. port trunk allow-pass vlan  41
  24. port trunk allow-pass vlan  43
  25. port trunk allow-pass vlan  44
  26. port trunk allow-pass vlan  48
  27. port trunk allow-pass vlan  52
  28. port trunk allow-pass vlan  53
  29. port trunk allow-pass vlan  54
  30. port trunk allow-pass vlan  55
  31. port trunk allow-pass vlan  56
  32. port trunk allow-pass vlan  64
  33. port trunk allow-pass vlan  66
  34. port trunk allow-pass vlan  67
  35. port trunk allow-pass vlan  68
  36. port trunk allow-pass vlan  69
  37. port trunk allow-pass vlan  70
复制代码

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
35 [报告]
发表于 2013-02-28 21:58 |只看该作者
回复 34# yinyuemi


    29没有啊,其它的没注意。

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
36 [报告]
发表于 2013-02-28 22:28 |只看该作者
回复 35# blackold


    多谢@blackold @yestreenstars
  1. echo port trunk allow-pass vlan 3 to 19 21 to 25 29 32 to 35 37 to 41 43 to 44 48 52 to 56 59 to 64 66 to 70 |awk '{match($0,/([^0-9]+)(.*)/,a);t=a[1];$0=a[2];while(match($0,/([0-9]+) to ([0-9]+) (.*)/,a)){for(i=a[1];i<=a[2];i++)print t,i;if(match(a[3],/^([0-9]+) ([0-9]+)(.*)/,b)){print t,b[1];$0=b[2] b[3]}else{$0=a[3]}}}'
复制代码

论坛徽章:
39
辰龙
日期:2013-08-21 15:45:192015亚冠之广州富力
日期:2015-05-12 16:34:52亥猪
日期:2015-03-03 17:22:00申猴
日期:2015-03-03 17:21:37未羊
日期:2014-10-10 13:45:41戌狗
日期:2014-06-17 09:53:29巨蟹座
日期:2014-06-12 23:17:17双鱼座
日期:2014-06-10 12:42:44寅虎
日期:2014-06-09 12:52:172015亚冠之卡尔希纳萨夫
日期:2015-05-24 15:24:35黄金圣斗士
日期:2015-12-02 17:25:0815-16赛季CBA联赛之吉林
日期:2017-06-24 16:43:52
37 [报告]
发表于 2013-02-28 23:39 |只看该作者
回复 1# yestreenstars
  1. awk -vRS='to' 'NR==1{n=$NF;NF--;a=$0;next}{for(i=n;i<=$1;i++)print a,i;for(i=2;i<NF;i++)print a,$i;n=$NF}' urfile
复制代码

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
38 [报告]
发表于 2013-03-01 09:01 |只看该作者
回复 30# reyleon


    不错啊~进步神速啊~

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
39 [报告]
发表于 2013-03-01 09:06 |只看该作者
本帖最后由 yestreenstars 于 2013-03-01 09:11 编辑

回复 31# winway1988


    有bug,请看以下测试:
  1. [root@localhost ~]# cat i
  2. port trunk allow-pass vlan 3 to 19 21 to 25 27 29 32 to 35 37 to 41 43 to 44 48 52 to 56 59 to 64 66 to 70
  3. [root@localhost ~]# awk -vRS='[0-9]+[ \t]+to[ \t]+[0-9]+' 'NR==1{prefix=$0}{if($0~/[0-9]/)print prefix,$1;if(RT~/to/){split(RT,a);for(i=int(a[1]);i<=int(a[3]);i++)print prefix,i}}' i
  4. port trunk allow-pass vlan  3
  5. port trunk allow-pass vlan  4
  6. port trunk allow-pass vlan  5
  7. port trunk allow-pass vlan  6
  8. port trunk allow-pass vlan  7
  9. port trunk allow-pass vlan  8
  10. port trunk allow-pass vlan  9
  11. port trunk allow-pass vlan  10
  12. port trunk allow-pass vlan  11
  13. port trunk allow-pass vlan  12
  14. port trunk allow-pass vlan  13
  15. port trunk allow-pass vlan  14
  16. port trunk allow-pass vlan  15
  17. port trunk allow-pass vlan  16
  18. port trunk allow-pass vlan  17
  19. port trunk allow-pass vlan  18
  20. port trunk allow-pass vlan  19
  21. port trunk allow-pass vlan  21
  22. port trunk allow-pass vlan  22
  23. port trunk allow-pass vlan  23
  24. port trunk allow-pass vlan  24
  25. port trunk allow-pass vlan  25
  26. port trunk allow-pass vlan  27
  27. port trunk allow-pass vlan  32
  28. port trunk allow-pass vlan  33
  29. port trunk allow-pass vlan  34
  30. port trunk allow-pass vlan  35
  31. port trunk allow-pass vlan  37
  32. port trunk allow-pass vlan  38
  33. port trunk allow-pass vlan  39
  34. port trunk allow-pass vlan  40
  35. port trunk allow-pass vlan  41
  36. port trunk allow-pass vlan  43
  37. port trunk allow-pass vlan  44
  38. port trunk allow-pass vlan  48
  39. port trunk allow-pass vlan  52
  40. port trunk allow-pass vlan  53
  41. port trunk allow-pass vlan  54
  42. port trunk allow-pass vlan  55
  43. port trunk allow-pass vlan  56
  44. port trunk allow-pass vlan  59
  45. port trunk allow-pass vlan  60
  46. port trunk allow-pass vlan  61
  47. port trunk allow-pass vlan  62
  48. port trunk allow-pass vlan  63
  49. port trunk allow-pass vlan  64
  50. port trunk allow-pass vlan  66
  51. port trunk allow-pass vlan  67
  52. port trunk allow-pass vlan  68
  53. port trunk allow-pass vlan  69
  54. port trunk allow-pass vlan  70
  55. [root@localhost ~]#
复制代码
少了个29,也就是当单数大于2个时,就会出错~改成这样就好了:
  1. awk -vRS='[0-9]+[ \t]+to[ \t]+[0-9]+' 'NR==1{prefix=$0}{if($0~/[0-9]/)for(i=1;i<=NF;i++)print prefix,$i;if(RT~/to/){split(RT,a);for(i=int(a[1]);i<=int(a[3]);i++)print prefix,i}}'
复制代码

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
40 [报告]
发表于 2013-03-01 09:16 |只看该作者
本帖最后由 yestreenstars 于 2013-03-01 11:21 编辑

回复 36# yinyuemi


    在我这里,你的只能显示到64,我修改了一下,另外,我的主题更新了,加了另一种情况,就是1 3 to 19 21 to 25 27 29 32 to 35……的这种情况~
  1. awk '{match($0,/([^0-9]+)(.*)/,a);t=a[1];$0=a[2];while(match($0,/([0-9]+) to ([0-9]+)(.*)/,a)){for(i=a[1];i<=a[2];i++)print t,i;if(match(a[3],/^ ([0-9]+) ([0-9]+)(.*)/,b)){print t,b[1];$0=b[2] b[3]}else{$0=a[3]}}}'
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP