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

编写Awk脚本为指定列重复值添加自定义后缀(分两种场景)

解决方案:针对CR/DR场景的Awk后缀处理脚本

我会帮你分别实现两个场景的需求,核心是实现字母递增后缀生成逻辑(支持z之后自动转为aa、ab...),同时按第1列的CR/DR条件筛选处理。

通用字母序列生成函数

首先我们需要一个Awk函数,把数字转换成类似Excel列名的字母序列(1→a,26→z,27→aa,28→ab...),再拼接上CR/DR后缀:

function num2alpha(n,   res, rem) {
    res = ""
    while (n > 0) {
        rem = (n - 1) % 26
        res = sprintf("%c", rem + 97) res
        n = int((n - rem) / 26)
    }
    return res
}

场景1:第1列为CR时,所有重复第3列添加递增后缀(从aCR开始)

需求回顾

仅当第1列为CR且第3列存在重复时,为每一行的第3列添加后缀,后缀从aCR开始递增,支持超过26条重复行(zCR之后自动转为aaCR、abCR...)

完整Awk脚本

awk -F"|" -v OFS="|" '
function num2alpha(n,   res, rem) {
    res = ""
    while (n > 0) {
        rem = (n - 1) % 26
        res = sprintf("%c", rem + 97) res
        n = int((n - rem) / 26)
    }
    return res
}
$1 == "CR" {
    count[$3]++
    $3 = $3 num2alpha(count[$3]) "CR"
}
1' input.txt

测试验证

输入示例:

a||c
CR||2157237496
CR||2157237496
CR||2157237496
INV||2157237496
RNV||3457634589

输出示例:

a||c
CR||2157237496aCR
CR||2157237496bCR
CR||2157237496cCR
INV||2157237496
RNV||3457634589

逻辑说明

  • 用count[$3]数组跟踪每个第3列值在CR行中的出现次数
  • 每次遇到CR行,递增计数后调用num2alpha生成字母序列,拼接CR作为后缀
  • 最后1表示打印所有行(包括未处理的非CR行)

场景2:第1列为DR时,重复第3列除第一条外添加递增后缀(从aDR开始)

需求回顾

仅当第1列为DR且第3列存在重复时,第一条记录保持原第3列,从第二条开始添加后缀,后缀从aDR开始递增,支持超过26条重复行

完整Awk脚本

awk -F"|" -v OFS="|" '
function num2alpha(n,   res, rem) {
    res = ""
    while (n > 0) {
        rem = (n - 1) % 26
        res = sprintf("%c", rem + 97) res
        n = int((n - rem) / 26)
    }
    return res
}
$1 == "DR" {
    count[$3]++
    if (count[$3] > 1) {
        $3 = $3 num2alpha(count[$3]-1) "DR"
    }
}
1' input.txt

测试验证

输入示例:

a||c
DR||3770022521
DR||3770022521
DR||3770022521
INV||9876543738

输出示例:

a||c
DR||3770022521
DR||3770022521aDR
DR||3770022521bDR
INV||9876543738

逻辑说明

  • 同样用count[$3]跟踪DR行中第3列的出现次数
  • 仅当计数>1时(即非第一条重复行)才添加后缀,这里count[$3]-1是因为第一条计数为1,第二条开始从1对应aDR,以此类推
  • 非DR行保持原样输出

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:03:46