如何使用一行Shell脚本提取每组连续匹配行的第一行?
提取连续匹配行分组首行的Shell单行实现
直接给出逻辑清晰、无晦涩语法的awk实现,和你提到的Python状态变量实现思路完全一致:
awk '/interesting line/{ if(flag == 0) print; flag = 1 } !/interesting line/{ flag = 0 }' 输入文件名
逻辑说明
- 内置变量
flag作为状态标记,默认初始值为0,表示当前不在连续匹配分组中 - 当行匹配
interesting line规则时:- 若
flag为0,说明当前行是新分组的第一行,直接打印 - 将
flag置为1,后续同分组的匹配行不会重复打印
- 若
- 当行不匹配规则时,将
flag重置为0,等待下一个分组的首行
效果验证
针对你给出的测试输入,执行上述命令后输出完全符合预期:
interesting line 1 interesting line 3 interesting line 6
如果需要处理管道流,直接把输入通过管道传给awk即可:
cat 输入文件名 | awk '/interesting line/{ if(flag == 0) print; flag = 1 } !/interesting line/{ flag = 0 }'
内容的提问来源于stack exchange,提问作者DarioP
相关产品推荐
相关产品推荐

