请求编写Awk/Sed脚本:在Load DR后按TMS序列插入NEW_TRAN
Awk脚本实现指定序列后的精准插入操作
针对你的需求,下面提供一个精准的Awk脚本,只会在"Load DR"之后匹配到REST_TMS=1→REST_TMS=0→REST_TMS=0的序列时,在第三个项对应的V块前插入NEW_TRAN:
BEGIN { in_load_dr = 0 tms_seq = 0 insert_flag = 0 } /Load DR/ { in_load_dr = 1 } in_load_dr && /REST_TMS=1/ && tms_seq == 0 { tms_seq = 1 } in_load_dr && /REST_TMS=0/ && tms_seq == 1 { tms_seq = 2 } in_load_dr && /REST_TMS=0/ && tms_seq == 2 { tms_seq = 3 insert_flag = 1 } # 此处正则需匹配你的V块起始标识,示例为以V开头的行,可按需修改 /^V/ && insert_flag == 1 { print "NEW_TRAN" insert_flag = 0 tms_seq = 0 } { print }
脚本逻辑说明
in_load_dr:标记是否进入"Load DR"之后的处理区域,未触发前忽略所有序列匹配tms_seq:跟踪序列匹配进度,从0开始:- 匹配到
REST_TMS=1时进入阶段1 - 阶段1匹配到
REST_TMS=0进入阶段2 - 阶段2匹配到
REST_TMS=0进入阶段3,同时设置插入标记
- 匹配到
insert_flag:当序列匹配完成后,标记下一个V块前需要插入字符串,插入后立即重置标记和序列计数器,避免重复触发- 所有行正常输出,仅在指定位置插入
NEW_TRAN
适配说明
如果你的V块起始标识不是以V开头(比如是V_BLOCK_START这类特定字符串),请修改脚本中/^V/这一行的正则表达式,替换为匹配你实际V块开头的规则。
内容的提问来源于stack exchange,提问作者kshitij kulshreshtha
相关产品推荐
相关产品推荐

