AIX服务器日志提取:基于UniqIdentifier获取分隔块内容(vi/Unix工具)
AIX日志指定内容提取方案
以下是几种在AIX环境下,通过Unix工具提取目标日志块的实现方法:
一、AWK命令实现
利用AWK的记录分隔符特性,直接定位包含UniqIdentifier的星号分隔块:
BEGIN { RS="^\\*{12}$"; ORS="\n************\n" } /UniqIdentifier/ { print $0 }
逻辑说明:
- 将
RS(记录分隔符)设为12个星号组成的行,让每个星号包裹的内容成为独立记录 - 设置
ORS(输出记录分隔符)为换行+星号行,保证输出格式与原日志一致 - 仅打印包含
UniqIdentifier的记录,即可得到目标块
二、SED命令实现
通过循环匹配与空间缓存,定位目标块并输出:
/^\*{12}$/{ h :loop n H /^\*{12}$/{ g /UniqIdentifier/p b } b loop } ' logfile
逻辑说明:
- 遇到星号分隔行时,将其存入保持空间
- 循环读取后续行并追加到保持空间,直到遇到下一个星号分隔行
- 检查保持空间内容是否包含
UniqIdentifier,若是则打印整个块
三、VI交互操作实现
适合手动提取场景,步骤如下:
- 打开日志文件:
vi logfile - 定位目标标识:输入
/UniqIdentifier并回车,跳转到包含该标识的行 - 向上找起始分隔符:输入
?^\*{12}$并回车,定位到最近的星号分隔行 - 标记起始位置:输入
ma(将当前位置标记为a) - 向下找结束分隔符:输入
/^\*{12}$并回车,定位到下一个星号分隔行 - 标记结束位置:输入
mb(将当前位置标记为b) - 导出内容:输入
:'a,'b w! extracted.log,将标记区间的内容写入新文件extracted.log
内容的提问来源于stack exchange,提问作者Pravin
相关产品推荐
相关产品推荐

