log 如下:
链路名称 是否使用 是否故障 是否闭塞 是否激活 本端是否禁止 对端是否禁止 是否拥塞 是否倒换 是否倒回 信令链路选择码(十六进制) Server名称
BSH-BSC37_9 正在使用 正常 未闭塞 已激活 本端管理解禁 对端管理解禁 未拥塞 未发生倒换 未发生倒回 09 LOCAL
BSC39_15 正在使用 正常 未闭塞 已激活 本端管理解禁 对端管理解禁 未拥塞 未发生倒换 未发生倒回 0F LOCAL
(由于篇幅大小,只能对应的看了,例如 链路名称对应 BSH-BSC37_9,是否激活 对应 已激活)
需求如下:
匹配log是否有错,以下为正常情况下对应的字段:
是否故障:正常 是否使用:正在使用 信令链路选择吗(十六进制):不为空
整体解决方案:
将每一行读入,之后匹配判断,发现的问题:
1.标题和正文的如果用/S匹配那么是一样的:解决:用单词匹配,这样就区分了中文和单词,但是在单词匹配中链路名称有的有-,所以先将-去除,代码如下:
$line =~s/-//g; 匹配方案:/b/w+/b
2.解决16进制问题,首先如何匹配16进制,另外需求中的16进制数是0个或多个,解决方案:[[:xdigit:]/s+]{0,} ; [:xdigit:]是匹配16进制的意思,/s+是会有空格出现(因为 log中多个十六进制会用空格隔开),{0,}至少匹配0次
由于匹配出来的$11为 NULL(有很多空格)如果$11 eq "NULL" 肯定是不成功的,所以 用字符串处理函数
if(index($11,"NULL") != -1)
{
$null_flag = 1;
}
若找到了说明$11中包含NULL
总体的匹配方案:
$line =~m/^/s*/b/w+/b/s+(/S+)/s+(/S+)/s+(/S+)/s+(/S+)/s+(/S+)/s+(/S+)/s+(/S+)/s+(/S+)/s+(/S+)/s+([[:xdigit:]/s+]{0,})/s+(/S+)/s*$/)
本文介绍了一种检查信令链路状态的方法,通过解析日志文件中的各项指标,如是否故障、是否激活等,来确保链路正常运行。特别关注了十六进制信令链路选择码的有效性。

被折叠的 条评论
为什么被折叠?



