免费注册 查看新帖 |

Chinaunix

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

[文本处理] awk提取多个不匹配项的问题 [复制链接]

论坛徽章:
0
发表于 2022-03-11 15:26 |显示全部楼层
$ cat stat.txt

# show interfaces status
Interface                        Status    Vlan    Duplex   Speed     Type  
-------------------------------- --------  ------  -------  --------- ------
GigabitEthernet 0/1              up        500     Full     100M      copper
GigabitEthernet 0/2              up        900     Full     100M      copper
GigabitEthernet 0/3              down      1       Unknown  Unknown   copper
GigabitEthernet 0/4              down      900     Unknown  Unknown   copper
GigabitEthernet 0/5              down      1       Unknown  Unknown   copper
GigabitEthernet 0/6              down      1       Unknown  Unknown   copper
GigabitEthernet 0/7              down      1       Unknown  Unknown   copper
GigabitEthernet 0/8              down      1       Unknown  Unknown   copper
GigabitEthernet 0/9              down      1       Unknown  Unknown   copper
GigabitEthernet 0/10             up        915     Full     100M      copper
GigabitEthernet 0/11             down      1       Unknown  Unknown   copper
GigabitEthernet 0/12             down      1       Unknown  Unknown   copper
GigabitEthernet 0/13             down      910     Unknown  Unknown   copper
GigabitEthernet 0/14             down      910     Unknown  Unknown   copper
GigabitEthernet 0/15             down      910     Unknown  Unknown   copper
GigabitEthernet 0/16             down      910     Unknown  Unknown   copper
GigabitEthernet 0/17             up        910     Full     100M      copper
GigabitEthernet 0/18             down      910     Unknown  Unknown   copper
GigabitEthernet 0/19             up        910     Full     100M      copper
GigabitEthernet 0/20             down      910     Unknown  Unknown   copper
GigabitEthernet 0/21             down      910     Unknown  Unknown   copper
GigabitEthernet 0/22             up        910     Full     100M      copper
GigabitEthernet 0/23             up        910     Full     1000M     copper
GigabitEthernet 0/24             up        910     Half     100M      copper
GigabitEthernet 0/25             up        910     Half     100M      copper
GigabitEthernet 0/26             up        910     Full     100M      copper
GigabitEthernet 0/27             down      910     Unknown  Unknown   copper
GigabitEthernet 0/28             up        910     Full     100M      copper
GigabitEthernet 0/29             up        910     Full     100M      copper
GigabitEthernet 0/30             down      910     Unknown  Unknown   copper
GigabitEthernet 0/31             down      1       Unknown  Unknown   copper
GigabitEthernet 0/32             down      1       Unknown  Unknown   copper
GigabitEthernet 0/33             down      1       Unknown  Unknown   copper
GigabitEthernet 0/34             down      1       Unknown  Unknown   copper
GigabitEthernet 0/35             down      1       Unknown  Unknown   copper
GigabitEthernet 0/36             down      1       Unknown  Unknown   copper
GigabitEthernet 0/37             down      1       Unknown  Unknown   copper
GigabitEthernet 0/38             down      1       Unknown  Unknown   copper
GigabitEthernet 0/39             down      1       Unknown  Unknown   copper
GigabitEthernet 0/40             down      1       Unknown  Unknown   copper
GigabitEthernet 0/41             down      routed  Unknown  Unknown   copper
GigabitEthernet 0/42             down      1       Unknown  Unknown   copper
GigabitEthernet 0/43             down      1       Unknown  Unknown   copper
GigabitEthernet 0/44             down      1       Unknown  Unknown   copper
GigabitEthernet 0/45             down      1       Unknown  Unknown   copper
GigabitEthernet 0/46             down      1       Unknown  Unknown   copper
GigabitEthernet 0/47             up        routed  Full     100M      copper
GigabitEthernet 0/48             up        routed  Full     100M      copper
#

想提取“Status”状态为“up”且“Interface”不为GigabitEthernet 0/1、GigabitEthernet 0/2、GigabitEthernet 0/47、GigabitEthernet 0/48的“Interface”端口,即:
GigabitEthernet 0/10
GigabitEthernet 0/17
GigabitEthernet 0/19
GigabitEthernet 0/22
GigabitEthernet 0/23
GigabitEthernet 0/24
GigabitEthernet 0/25
GigabitEthernet 0/26
GigabitEthernet 0/28
GigabitEthernet 0/29

之后想对各端口进行配置,如:
interface GigabitEthernet 0/10
description XXX
...
interface GigabitEthernet 0/17
description XXX
...
请教如何用awk提取到端口(即红色标记的部分)信息?谢谢!




论坛徽章:
5
白羊座
日期:2014-10-28 11:23:27水瓶座
日期:2015-01-20 10:19:022015亚冠之柏斯波利斯
日期:2015-07-11 18:17:2015-16赛季CBA联赛之同曦
日期:2015-12-23 12:38:582016猴年福章徽章
日期:2016-02-18 15:30:34
发表于 2022-03-12 18:25 |显示全部楼层
本帖最后由 klainogn 于 2022-03-12 18:58 编辑
  1. awk -vb='0/1,0/2' 'BEGIN{split(b, e, ",");for(i in e)a[e[i]]++}$1 ~ /Giga/ && $3== "up"{if($2 in a)next;print $1" "$2}' test.txt
  2. GigabitEthernet 0/10
  3. GigabitEthernet 0/17
  4. GigabitEthernet 0/19
  5. GigabitEthernet 0/22
  6. GigabitEthernet 0/23
  7. GigabitEthernet 0/24
  8. GigabitEthernet 0/25
  9. GigabitEthernet 0/26
  10. GigabitEthernet 0/28
  11. GigabitEthernet 0/29
  12. GigabitEthernet 0/47
  13. GigabitEthernet 0/48
复制代码

论坛徽章:
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
发表于 2022-03-13 00:35 |显示全部楼层
回复 1# xxinganling


  1. cat 1
  2. # show interfaces status
  3. Interface                        Status    Vlan    Duplex   Speed     Type  
  4. -------------------------------- --------  ------  -------  --------- ------
  5. GigabitEthernet 0/1              up        500     Full     100M      copper
  6. GigabitEthernet 0/2              up        900     Full     100M      copper
  7. GigabitEthernet 0/3              down      1       Unknown  Unknown   copper
  8. GigabitEthernet 0/4              down      900     Unknown  Unknown   copper
  9. GigabitEthernet 0/5              down      1       Unknown  Unknown   copper
  10. GigabitEthernet 0/6              down      1       Unknown  Unknown   copper
  11. GigabitEthernet 0/7              down      1       Unknown  Unknown   copper
  12. GigabitEthernet 0/8              down      1       Unknown  Unknown   copper
  13. GigabitEthernet 0/9              down      1       Unknown  Unknown   copper
  14. GigabitEthernet 0/10             up        915     Full     100M      copper
  15. GigabitEthernet 0/11             down      1       Unknown  Unknown   copper
  16. GigabitEthernet 0/12             down      1       Unknown  Unknown   copper
  17. GigabitEthernet 0/13             down      910     Unknown  Unknown   copper
  18. GigabitEthernet 0/14             down      910     Unknown  Unknown   copper
  19. GigabitEthernet 0/15             down      910     Unknown  Unknown   copper
  20. GigabitEthernet 0/16             down      910     Unknown  Unknown   copper
  21. GigabitEthernet 0/17             up        910     Full     100M      copper
  22. GigabitEthernet 0/18             down      910     Unknown  Unknown   copper
  23. GigabitEthernet 0/19             up        910     Full     100M      copper
  24. GigabitEthernet 0/20             down      910     Unknown  Unknown   copper
  25. GigabitEthernet 0/21             down      910     Unknown  Unknown   copper
  26. GigabitEthernet 0/22             up        910     Full     100M      copper
  27. GigabitEthernet 0/23             up        910     Full     1000M     copper
  28. GigabitEthernet 0/24             up        910     Half     100M      copper
  29. GigabitEthernet 0/25             up        910     Half     100M      copper
  30. GigabitEthernet 0/26             up        910     Full     100M      copper
  31. GigabitEthernet 0/27             down      910     Unknown  Unknown   copper
  32. GigabitEthernet 0/28             up        910     Full     100M      copper
  33. GigabitEthernet 0/29             up        910     Full     100M      copper
  34. GigabitEthernet 0/30             down      910     Unknown  Unknown   copper
  35. GigabitEthernet 0/31             down      1       Unknown  Unknown   copper
  36. GigabitEthernet 0/32             down      1       Unknown  Unknown   copper
  37. GigabitEthernet 0/33             down      1       Unknown  Unknown   copper
  38. GigabitEthernet 0/34             down      1       Unknown  Unknown   copper
  39. GigabitEthernet 0/35             down      1       Unknown  Unknown   copper
  40. GigabitEthernet 0/36             down      1       Unknown  Unknown   copper
  41. GigabitEthernet 0/37             down      1       Unknown  Unknown   copper
  42. GigabitEthernet 0/38             down      1       Unknown  Unknown   copper
  43. GigabitEthernet 0/39             down      1       Unknown  Unknown   copper
  44. GigabitEthernet 0/40             down      1       Unknown  Unknown   copper
  45. GigabitEthernet 0/41             down      routed  Unknown  Unknown   copper
  46. GigabitEthernet 0/42             down      1       Unknown  Unknown   copper
  47. GigabitEthernet 0/43             down      1       Unknown  Unknown   copper
  48. GigabitEthernet 0/44             down      1       Unknown  Unknown   copper
  49. GigabitEthernet 0/45             down      1       Unknown  Unknown   copper
  50. GigabitEthernet 0/46             down      1       Unknown  Unknown   copper
  51. GigabitEthernet 0/47             up        routed  Full     100M      copper
  52. GigabitEthernet 0/48             up        routed  Full     100M      copper
  53. #

  54. awk '$2!="0/1"&&$2!="0/2"&&$2!="0/47"&&$2!="0/48"&&$3=="up"{print $1,$2}' 1
  55. GigabitEthernet 0/10
  56. GigabitEthernet 0/17
  57. GigabitEthernet 0/19
  58. GigabitEthernet 0/22
  59. GigabitEthernet 0/23
  60. GigabitEthernet 0/24
  61. GigabitEthernet 0/25
  62. GigabitEthernet 0/26
  63. GigabitEthernet 0/28
  64. GigabitEthernet 0/29
复制代码

论坛徽章:
0
发表于 2022-03-13 19:08 |显示全部楼层
谢谢 klainogn 和 wh7211 !!!


仿照写了下面的命令,得到了配置描述信息:
bash$ awk '$2!="0/1"&&$2!="0/2"&&$2!="0/47"&&$2!="0/48"&&$3=="up" {print "interface",$1,$2,"\n","description XXX"}' stat.txt
interface GigabitEthernet 0/10
description XXX
interface GigabitEthernet 0/17
description XXX
interface GigabitEthernet 0/19
description XXX
interface GigabitEthernet 0/22
description XXX
interface GigabitEthernet 0/23
description XXX
interface GigabitEthernet 0/24
description XXX
interface GigabitEthernet 0/25
description XXX
interface GigabitEthernet 0/26
description XXX
interface GigabitEthernet 0/28
description XXX
interface GigabitEthernet 0/29
description XXX
bash$


不过在摸索的过程中得到了另外一种结果:
bash$ awk '$2!="0/1"&&$2!="0/2"&&$2!="0/47"&&$2!="0/48"&&$3=="up" {print "interface",$1,$2}{print "description XXX"}' stat.txt
description XXX
description XXX
description XXX
description XXX
description XXX
description XXX
description XXX
description XXX
description XXX
description XXX
description XXX
description XXX
interface GigabitEthernet 0/10
description XXX
description XXX
description XXX
description XXX
description XXX
description XXX
description XXX
interface GigabitEthernet 0/17
description XXX
description XXX
interface GigabitEthernet 0/19
description XXX
description XXX
description XXX
interface GigabitEthernet 0/22
description XXX
interface GigabitEthernet 0/23
description XXX
interface GigabitEthernet 0/24
description XXX
interface GigabitEthernet 0/25
description XXX
interface GigabitEthernet 0/26
description XXX
description XXX
interface GigabitEthernet 0/28
description XXX
interface GigabitEthernet 0/29
description XXX
description XXX
description XXX
description XXX
description XXX
description XXX
description XXX
description XXX
description XXX
description XXX
description XXX
description XXX
description XXX
description XXX
description XXX
description XXX
description XXX
description XXX
description XXX
description XXX
description XXX

“print "description XXX”这一句得到了错误的输出,也就是前面的判断条件都没生效。这个如何理解?有相关的说明文档或资料链接吗?再次感谢!!!

论坛徽章:
0
发表于 2022-03-14 11:09 |显示全部楼层
本帖最后由 daixubinbin 于 2022-03-14 11:12 编辑
  1. awk '$3=="up"&&$2 !~/0\/(1|2|47|48)$/{print}'
复制代码

test.png

论坛徽章:
1
19周年集字徽章-年
日期:2020-10-29 09:39:21
发表于 2022-03-31 09:36 |显示全部楼层
  1. grep -Po 'GigabitEthernet 0/(?![12]\b|4[78])\d+(?=\s+up)' stat.txt
复制代码

论坛徽章:
0
发表于 2022-04-01 22:06 |显示全部楼层
感谢daixubinbin和legs!完全适合,学习中。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP