修改匹配变量行的首个单词:Cisco ATM端口数据处理求助
我之前处理Cisco设备接口统计解析的时候,也碰到过ATM端口格式特殊导致脚本卡壳的情况,核心问题就是ATM端口的输出格式和普通以太网、快速以太网端口差异很大,你的脚本逻辑没适配这种特殊格式。
先搞清楚差异在哪
普通端口(比如G0/0)的输出通常是状态行单独一行,后面跟着硬件信息、统计项,每部分都规规矩矩换行;但ATM端口的输出就很“任性”——比如你给的示例ATM0/0/0 is up, protocol is up line 1 line 2 line 3 lin...,状态行后面直接拼接了多行附加内容,甚至可能因为输出长度限制被截断,这就导致你原脚本按“单行状态+后续统计行”的逻辑完全走不通。
调整脚本的几个关键地方
1. 优先识别ATM端口并拆分状态行
先给脚本加个判断:只要行开头是ATM,就单独处理它的状态行。比如用Python的话,可以这么写:
def parse_atm_line(line): # 先把接口名和状态抠出来 if 'protocol is up' in line: # 拆分出接口状态部分和后面的附加内容 status_section, extra_content = line.split('protocol is up', 1) interface_name = status_section.split(' is up')[0].strip() interface_status = 'up' elif 'protocol is down' in line: status_section, extra_content = line.split('protocol is down', 1) interface_name = status_section.split(' is ')[0].strip() interface_status = 'down' else: # 处理异常状态行 interface_name = line.split()[0] if line.split() else 'Unknown' interface_status = 'Unknown' extra_content = line.strip() return (interface_name, interface_status, extra_content.strip())
这样不管状态行后面跟了多少乱七糟八的内容,都能先把核心的接口名和状态提取出来。
2. 适配ATM特有的统计项
ATM端口会有VC(虚拟电路)相关的统计,比如ATM VC 1/100 is up, VC is up这种行,你的脚本原来可能只处理以太网的输入/输出字节、错误包这些,现在要加个判断:如果当前处理的是ATM端口,就去抓这些VC相关的字段,而不是硬套以太网的统计项。
3. 处理截断的行
你示例里的lin...是输出被截断了,脚本里要加个容错逻辑,比如用try-except包裹解析代码,或者碰到以...结尾的行时,标记为“不完整数据”,避免脚本直接崩溃。
测试很重要
改完脚本后,别直接跑全量数据,先拿你那一段ATM端口的测试输出单独跑一遍,看看接口名、状态能不能正确提取,CSV里的内容是否符合预期,没问题了再处理完整的设备输出。
内容的提问来源于stack exchange,提问作者kuroikenshi

