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

基于第一列ID匹配合并多份Tab分隔文件的AWK实现问题

多Tab分隔文件按ID匹配合并解决方案

核心需求

以FILE_1的第一列ID为基准,合并另外10份Tab分隔文件的对应列:匹配到ID则追加该文件的后续列内容,未匹配到则对应列填充NA。

通用AWK解决方案

以下代码支持任意数量的待合并文件(这里对应10份),自动处理多列情况,无需手动调整列数:

BEGIN {
    FS = "\t"
    OFS = "\t"
}

# 处理除FILE_1外的所有待合并文件
ARGIND > 1 {
    if (FNR == 1) {
        # 记录当前文件第一列之后的列数
        col_cnt[ARGIND] = NF - 1
        next
    }
    # 拼接当前ID对应的所有后续列
    content = ""
    for (i=2; i<=NF; i++) {
        content = content (content ? OFS : "") $i
    }
    data[ARGIND][$1] = content
    next
}

# 处理基准文件FILE_1
{
    printf "%s", $0
    # 遍历所有待合并文件,追加对应内容或NA
    for (i=2; i<=ARGC-1; i++) {
        if ($1 in data[i]) {
            printf "%s%s", OFS, data[i][$1]
        } else {
            # 生成对应列数的NA串
            na = ""
            for (j=1; j<=col_cnt[i]; j++) {
                na = na (na ? OFS : "") "NA"
            }
            printf "%s%s", OFS, na
        }
    }
    print ""
}

使用方式

将上述代码保存为merge_ids.awk,然后执行命令:

awk -f merge_ids.awk FILE_1 FILE_2 FILE_3 ... FILE_11

(把FILE_2到FILE_11替换成你的实际文件名)

代码说明

  1. 文件区分:用ARGIND变量判断当前处理的文件,ARGIND=1对应基准文件FILE_1,ARGIND>=2对应待合并的其他文件。
  2. 列数记录:col_cnt数组存储每个待合并文件第一列之后的列数,保证未匹配时填充正确数量的NA。
  3. 数据存储:二维数组data[文件索引][ID]保存每个待合并文件中ID对应的后续列内容。
  4. 基准文件处理:遍历FILE_1的每一行,先输出本行内容,再依次追加每个待合并文件的匹配内容或NA串。

示例验证

输入文件

FILE_1:

ID	ColA	ColB
1	a	b
2	c	d
3	e	f

FILE_2:

ID	ColC
1	x
3	y

FILE_3:

ID	ColD	ColE
2	z	w

输出结果

ID	ColA	ColB	ColC	ColD	ColE
1	a	b	x	NA	NA
2	c	d	NA	z	w
3	e	f	y	NA	NA

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 03:15:41