awk查找含7KFF_1的行并打印该行及下一行的脚本问题排查
awk匹配目标行并打印当前行及后一行的问题修复
原脚本错误原因
你编写的awk脚本存在以下几个问题:
- 匹配到
7KFF_1的行本身不会被打印:匹配命中后直接执行next跳过了所有输出逻辑,只有下一行才会触发打印操作 - 如果匹配行是文件的最后一行,由于后续没有其他行,该匹配结果会完全丢失
- 存在多个不连续匹配结果时,上一次匹配保存的
header值会被后续无关行重复打印,导致输出内容错乱
正确实现方案
使用打印计数器逻辑即可满足需求,代码如下:
awk '/7KFF_1/ { print_cnt = 2 } print_cnt > 0 { print; print_cnt-- }' sample.txt
逻辑说明
- 当匹配到包含
7KFF_1的行时,将打印计数器设置为2,代表接下来需要输出2行(当前匹配行 + 紧随其后的1行) - 每读取一行内容,只要计数器数值大于0就打印当前行,同时将计数器减1,直到计数器归零后停止额外输出
- 如需精简写法,可简写为
awk '/7KFF_1/{p=2} p&&p--' sample.txt,运行效果完全一致
内容的提问来源于stack exchange,提问作者Caterina
相关产品推荐
相关产品推荐

