AIX系统下zgrep获取.debug.gz文件匹配行前后30行的方法
解决AIX上zgrep无前后行匹配选项的问题
针对AIX系统默认grep(及zgrep/zegrep)不支持-B/-A/-C的情况,直接用zcat+awk就能一次性处理压缩大文件,无需解压或额外脚本,命令如下:
zcat file.debug.gz | awk -v target='123456' -v context=30 ' { lines[NR] = $0 } $0 ~ target { start = NR > context ? NR - context : 1 end = NR + context for (i=start; i<=NR; i++) print lines[i] print_next = end } print_next > 0 { print $0 print_next-- } NR > context { delete lines[NR - context] } '
命令说明
zcat直接读取压缩文件内容,避免解压带来的磁盘空间和时间开销awk通过数组维护最近指定行数的内容,匹配目标行时:- 输出匹配行之前的
context行(如果当前行号小于context,则从第一行开始) - 标记后续需要输出
context行,逐行打印直到完成 - 实时清理超出范围的旧行,避免处理超大文件时占用过多内存
- 输出匹配行之前的
- 可修改
context=30调整前后行数,target='123456'替换为实际需要匹配的字符串
内容的提问来源于stack exchange,提问作者Solly
相关产品推荐
相关产品推荐

