免费注册 查看新帖 |

Chinaunix

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

[文本处理] 如何在分组文本中提取固定和不固定位置信息? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2022-04-28 16:17 |只看该作者 |倒序浏览
有文本部分内容如下:
$ cat conf.txt
....

#
interface LoopBack600
description to-lb600
ip address 192.168.2.45 255.255.255.255
#
interface LoopBack800
  to-lb800
ip address 172.18.32.96 255.255.255.255
#
#
interface Vlan-interface634
description TO-unit34
ip address 192.168.1.66 255.255.255.252
ospf cost 200
ospf network-type p2p
ospf bfd enable
#
#
interface FastEthernet 0/30
no switchport
ip ospf network point-to-point
ip ospf authentication message-digest
ip ospf message-digest-key 1 md5 7 141a46076330240c541752
ip ospf cost 50
no ip proxy-arp
ip address 192.168.6.32 255.255.255.252
description Connect_to_unit30
#
....

要从文本中提取含有“ip address”的行所在的一组文本(以#号区隔)的字头(FastEthernet 0/30等)、IP地址(ip address)和描述信息(description),输出以逗号区隔的如下文本:
LoopBack600,192.168.2.45,to-lb600
LoopBack800,172.18.32.96,to-lb800
Vlan-interface634,192.168.1.66,TO-unit34
FastEthernet 0/30,192.168.6.32,Connect_to_unit30
...
研究了好长时间,因为每组数的行数不固定,要取得信息除了字头外其他两项所在行的位置也不固定,没能实现。请论坛里的高手帮忙,谢谢!




论坛徽章:
6
15-16赛季CBA联赛之浙江
日期:2021-07-14 11:18:4315-16赛季CBA联赛之浙江
日期:2021-08-20 17:26:1015-16赛季CBA联赛之天津
日期:2021-09-01 10:56:4619周年集字徽章-19
日期:2021-10-12 11:08:032016科比退役纪念章
日期:2021-10-12 11:33:4515-16赛季CBA联赛之深圳
日期:2021-11-11 14:25:38
2 [报告]
发表于 2022-04-29 11:28 |只看该作者
本帖最后由 a5love3n 于 2022-04-29 11:39 编辑
  1. awk '/interface/{if(b){print a","b","c;b=c=""};a=$2" "$3}/ip address/{b=$3}/description/{c=$2}END{print a","b","c}' 1.txt
复制代码
to-lb800这一行缺少 description,我才是你复制漏了,如果不是,那就不好处理了,因为description信息是管理员自定义的,没有特征

效果如下

LoopBack600 ,192.168.2.45,to-lb600
LoopBack800 ,172.18.32.96,to-lb800
Vlan-interface634 ,192.168.1.66,TO-unit34
FastEthernet 0/30,192.168.6.32,Connect_to_unit30

因为 interface FastEthernet 0/30 接口和其他接口格式不一样,为了兼顾,会导致 LoopBack600 ,这里的逗号前面多一个空格,介意的话,再用sed或者vim处理一下就行了

论坛徽章:
0
3 [报告]
发表于 2022-04-29 14:22 |只看该作者
回复 2# a5love3n

谢谢a5love3n !!!
脚本完全合适!我以为要重置FS为#后再配置各行,但没做成。您的这种连续匹配的方法我还是头一回见到,有对应的术语或相关的资料推荐吗?再次感谢 a5love3n !!!


另外,确实是丢了 description 字段。完整文件如下:
#
interface LoopBack600
description to-lb600
ip address 192.168.2.45 255.255.255.255
#
interface LoopBack800
description to-lb800
ip address 172.18.32.96 255.255.255.255
#
#
interface Vlan-interface634
description TO-unit34
ip address 192.168.1.66 255.255.255.252
ospf cost 200
ospf network-type p2p
ospf bfd enable
#
#
interface FastEthernet 0/30
no switchport
ip ospf network point-to-point
ip ospf authentication message-digest
ip ospf message-digest-key 1 md5 7 141a46076330240c541752
ip ospf cost 50
no ip proxy-arp
ip address 192.168.6.32 255.255.255.252
description Connect_to_unit30
#



论坛徽章:
6
15-16赛季CBA联赛之浙江
日期:2021-07-14 11:18:4315-16赛季CBA联赛之浙江
日期:2021-08-20 17:26:1015-16赛季CBA联赛之天津
日期:2021-09-01 10:56:4619周年集字徽章-19
日期:2021-10-12 11:08:032016科比退役纪念章
日期:2021-10-12 11:33:4515-16赛季CBA联赛之深圳
日期:2021-11-11 14:25:38
4 [报告]
发表于 2022-04-30 09:53 |只看该作者
回复 3# xxinganling

专业术语和资料我还真不知道,我是个半桶水,我的awk就是在这里刷帖子学的,主要学习对象就是版主 wh7211 对各种问题的解决

论坛徽章:
0
5 [报告]
发表于 2022-05-02 11:37 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
25
程序设计版块每日发帖之星
日期:2016-05-03 06:20:0015-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:19黑曼巴
日期:2022-04-03 17:55:1315-16赛季CBA联赛之八一
日期:2018-07-03 16:56:46
6 [报告]
发表于 2022-06-07 17:20 |只看该作者
回复 1# xxinganling
回复 2# a5love3n


这样定义变量a,逗号前面就没有空格了。
  1. cat 1
  2. #
  3. interface LoopBack600
  4. description to-lb600
  5. ip address 192.168.2.45 255.255.255.255
  6. #
  7. interface LoopBack800
  8. description to-lb800
  9. ip address 172.18.32.96 255.255.255.255
  10. #
  11. #
  12. interface Vlan-interface634
  13. description TO-unit34
  14. ip address 192.168.1.66 255.255.255.252
  15. ospf cost 200
  16. ospf network-type p2p
  17. ospf bfd enable
  18. #
  19. #
  20. interface FastEthernet 0/30
  21. no switchport
  22. ip ospf network point-to-point
  23. ip ospf authentication message-digest
  24. ip ospf message-digest-key 1 md5 7 141a46076330240c541752
  25. ip ospf cost 50
  26. no ip proxy-arp
  27. ip address 192.168.6.32 255.255.255.252
  28. description Connect_to_unit30
  29. #

  30. awk '/^interface/{if(a&&b&&c){print a","b","c};a=b=c="";a=gensub($1" ","","1",$0)}/^ip address/{b=$3}/^description/{c=$2}END{if(a&&b&&c){print a","b","c}}' 1
  31. LoopBack600,192.168.2.45,to-lb600
  32. LoopBack800,172.18.32.96,to-lb800
  33. Vlan-interface634,192.168.1.66,TO-unit34
  34. FastEthernet 0/30,192.168.6.32,Connect_to_unit30
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP