使用awk为.dog添加数值前缀 支持行内多匹配最多5次计数
问题需求
- 处理文本文件中所有出现的
.dog字符串,为其添加数值前缀,格式为数字.dog,例如.dog改为1.dog,foo.dogfish改为foo1.dogfish - 同一行内的多个
.dog匹配项需使用相同的当前计数值 - 计数上限为5,计数状态保持稳定
- 支持忽略大小写匹配
现有代码问题
原有代码仅调用了sub函数,该函数默认仅替换每行第一个匹配到的.dog,无法处理单行多匹配的场景。
修复后的实现方案
将单次替换的sub替换为全局替换函数gsub,同时补充计数上限判断和忽略大小写配置即可,完整代码如下:
awk ' BEGIN { count = 1 IGNORECASE = 1 } /\.dog/ { t = int(count) gsub(/\.dog/, t "&") if (count < 5) count += 0.2 }1' 输入文件路径
逻辑说明
gsub(/\.dog/, t "&"):全局替换当前行所有.dog匹配项,&代表匹配到的原字符串,拼接前缀数值t即可实现需求int(count):取当前计数的整数部分作为前缀,保证同一行所有匹配项前缀统一count += 0.2:每处理一行包含.dog的内容计数加0.2,累计加5次后整数部分进1,配合上限判断实现最大前缀为5的要求IGNORECASE = 1:开启忽略大小写匹配,避免大小写变体匹配遗漏
内容的提问来源于stack exchange,提问作者7beggars_nnnnm
相关产品推荐
相关产品推荐

