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

使用awk处理重复记录:将重复项第二列修改为唯一值

问题

需要用awk识别文件中的重复记录并直接修改原文件,文件包含6个无表头列,目标是修改重复记录的第二列,通过添加递增数字使其唯一。

原始数据

1 A B C D E
1 A B C D E   (This is a duplicate record1)
1 A B C D E   (This is a duplicate record2)
2 F G H I J
3 K L M N O

期望输出

1 A   B C D E
1 A-1 B C D E
1 A-2 B C D E
2 F   G H I J
3 K   L M N O

补充说明

曾尝试Stack Overflow上的代码:awk 'cnt[$0]++{$0=$0" variant "cnt[$0]-1} 1' file,但数字被添加到了记录末尾,不符合需求。


解决方案

使用以下awk命令可实现需求,针对重复记录修改第二列而非追加到行尾:

awk '{
    key = $0
    if (cnt[key]++ > 0) {
        $2 = $2 "-" (cnt[key] - 1)
        printf "%s %-3s %s\n", $1, $2, substr($0, index($0, $3))
    } else {
        printf "%s %-3s %s\n", $1, $2, substr($0, index($0, $3))
    }
}' file > temp && mv temp file

关键说明

  • 重复判定:以整行内容作为统计键,确保只有完全重复的记录会被处理。
  • 第二列修改:当记录重复时,给第二列追加-N后缀,N从1开始递增(cnt[key]-1确保第一次重复时后缀为1)。
  • 格式对齐:通过printf的%-3s控制第二列宽度,保证和示例输出的对齐效果;substr($0, index($0,$3))保留第三列及之后的原始内容,避免破坏原有格式。
  • 文件修改:awk无法直接编辑原文件,因此先将结果输出到临时文件,再覆盖原文件。

执行效果

运行命令后,原文件会被更新为期望格式,重复记录的第二列被添加唯一后缀,同时保持列对齐。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 17:05:44