UNIX Shell匹配文本分隔标记新增SEQ序列列实现方案咨询
问题背景
需要匹配文本中两个指定字符串界定的内容块,为每个内容块的行新增SEQ序列列,以ID CLOSED作为内容块的分隔标记,第一个内容块内所有行末尾追加序列值1,第二个内容块追加序列值2,依次类推,最终过滤掉所有ID CLOSED行。
输入示例
1|AB|1|2 2|BC|1|2 ID CLOSED 3|AB|1|2 4|BC|1|2 ID CLOSED
预期输出
1|AB|1|2|1 2|BC|1|2|1 3|AB|1|2|2 4|BC|1|2|2
实现方案
这类需要维护计数状态的文本处理场景,用awk实现比sed更简洁高效,直接执行以下命令即可:
awk '/^ID CLOSED/{seq++; next} {print $0 "|" seq+1}' 输入文件路径
命令逻辑说明
- 当匹配到行首为
ID CLOSED的分隔行时,将序列计数器seq加1,且直接跳过当前行不输出 - 对普通业务行,直接输出原行内容,末尾拼接分隔符
|和当前序列值(初始seq为0,所以第一个内容块的序列值为0+1=1,符合需求的序列递增规则)
如果坚持要用sed实现,需要结合shell循环遍历内容块,实现复杂度更高,不推荐。
内容的提问来源于stack exchange,提问作者Ambitioussignal
相关产品推荐
相关产品推荐

