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

基于前三列匹配合并重复行并合并指定列内容的技术问询

合并相同前三列的文本行

问题描述

输入制表符分隔的文本:

chr1    13369510    13369602    PRAMEF18    0   +
chr1    13369510    13369602    PRAMEF19    0   +

需求:对比每行前三列,若内容完全匹配则合并为一行,第四列用逗号分隔,其余列保持不变。期望输出:

chr1    13369510    13369602    PRAMEF18,PRAMEF19    0   +

解决方案

使用awk命令处理,脚本如下:

BEGIN {FS=OFS="\t"}
{
    key = $1 FS $2 FS $3
    if (!(key in data)) {
        data[key] = $4
        rest[key] = $5 FS $6
    } else {
        data[key] = data[key] "," $4
    }
}
END {
    for (k in data) {
        print k, data[k], rest[k]
    }
}

使用方法

  1. 将上述脚本保存为merge_lines.awk
  2. 运行命令:
awk -f merge_lines.awk input.txt

或者直接执行单行命令:

awk 'BEGIN {FS=OFS="\t"} {key=$1 FS $2 FS $3; if(!(key in data)){data[key]=$4; rest[key]=$5 FS $6}else{data[key]=data[key]","$4}} END{for(k in data) print k, data[k], rest[k]}' input.txt

说明

  • 脚本以前三列的组合作为唯一标识键,将匹配行的第四列值用逗号拼接累加
  • 默认假设匹配行的第五、六列内容一致,若存在不一致场景,需额外添加逻辑处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 08:01:23