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

如何修改AWK脚本仅为重复列值添加索引?

解决第二列重复值添加索引的AWK脚本问题

问题分析

你的需求是仅为第二列的重复值添加递增索引,唯一值保持原样,但原脚本会给所有值加上_1后缀——原因是不管第二列是否重复,count[$2]自增后都会强制拼接后缀,没有判断该值的总出现次数。

解决方案

需要先统计第二列每个值的总出现次数,再根据次数决定是否添加索引。以下是修正后的AWK脚本:

脚本实现

# 第一遍扫描文件,统计第二列每个值的出现次数
NR == FNR {
    freq[$2]++
    next
}
# 第二遍处理文件,根据频率决定输出格式
{
    if (freq[$2] > 1) {
        # 重复值添加递增索引
        print $1, $2 "_" ++count[$2]
    } else {
        # 唯一值直接输出原内容
        print $1, $2
    }
}

使用方法

假设你的输入文件名为input.txt,执行命令:

awk -f fix_suffix.awk input.txt input.txt

或者直接写成单行命令:

awk 'NR==FNR{freq[$2]++;next} {if(freq[$2]>1) print $1,$2"_"++count[$2]; else print $1,$2}' input.txt input.txt

效果示例

输入文件内容:

a chr_1
b chr_4
c chr_4
d chr_2

执行脚本后输出:

a chr_1
b chr_4_1
c chr_4_2
d chr_2

脚本说明

  • NR == FNR:AWK中用于判断当前处理的是第一个输入文件(这里重复传入同一个文件,实现两次遍历),第一遍仅统计第二列每个值的总出现次数到freq数组。
  • next:跳过后续处理逻辑,直接进入下一行。
  • 第二遍处理时,通过freq[$2] > 1判断该值是否重复:重复则用count[$2]记录当前出现的次数并拼接后缀,唯一值直接输出原内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 14:25:33