You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在AWK中使用匹配反向引用检测并去除重复双字母?

问题原因
  • gensub是GNU AWK(gawk)独有的扩展函数,非GNU版本的AWK(如macOS系统自带的BSD AWK)不支持该函数,运行后会无效果。
  • 正则写法的转义规则错误,同时要注意gensub不会修改输入的原字符串,必须显式使用它的返回值。
正确实现方案

先确认你使用的是GNU AWK,可执行awk --version查看版本信息,若没有GNU标识,需安装gawk后使用gawk命令执行脚本。

可直接运行的测试命令

gawk 'BEGIN {f="telly" ;print gensub(/(.)\1/,"\\1","g",f)}'
# 输出:tely

测试connoisseur的效果:

gawk 'BEGIN {f="connoisseur" ;print gensub(/(.)\1/,"\\1","g",f)}'
# 输出:conoiseur,重复的n、s均已去重

适配你的业务脚本的写法

你的disambiguate函数需要按如下方式实现,确保正确返回处理后的字符串:

function disambiguate(str) {
    # 正则用字面量写法,无需额外转义,直接返回gensub的处理结果
    return gensub(/(.)\1/, "\\1", "g", str)
}

BEGIN {FS= "\"" }
{print $2,$4,disambiguate($4),isolate_terminal_vowels($4),devowelCentre(isolate_terminal_vowels($4)),$6}
特殊场景说明

如果你需要用动态拼接的正则(而非固定正则字面量),需要对反斜杠做二次转义,写法如下:

function disambiguate(str) {
    # 字符串形式的正则需要四层反斜杠才能匹配到反向引用
    return gensub("(.)\\\\1", "\\1", "g", str)
}

内容的提问来源于stack exchange,提问作者Tobe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 02:15:05