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

如何基于染色体与位置列精准匹配合并两个文件?

问题描述

需要合并两个文件:

  1. output_armlympho.txt:共5778行,15列,示例内容:
NUMBER CHROM POS ID REF ALT A1 TEST OBS_CT BETA SE L95 U95 T_STAT P
42484 1 18052645 rs260514:18052645:G:A G A G ADD 1597 0.0147047 0.0656528 -0.113972 0.143382 0.223977 0.822804
42485 1 18054638 rs35592535:18054638:GC:G GC G G ADD 1597 0.0138673 0.0269643 -0.0389816 0.0667163 0.514286 0.607124
42486 7 18054785 rs1572792:18054785:G:A G A A ADD 1597 -0.0126002 0.0256229 -0.0628202 
  1. file1:共25958247行,16列,示例内容:
column1 column2 column3 column4 column5 column6 column7 column8 column9 column10    column11    column12    column13    column14    column15    column16
1 chr1_10000044_A_T_b38 ENS 171773 29 30 0.02 0.33 0.144 0.14 chr1 10000044 A T chr1 10060102 
2 chr7_10000044_A_T_b38 ENS -58627 29 30 0.024 0.26 0.16 0.15 chr7 10000044 A T chr7 18054785
4 chr1_10000044_A_T_b38 ENS 89708 29 30 0.0 0.03 -0.0 0.038 chr1 10000044 A T chr1 18054638
5 chr1_10000044_A_T_b38 ENS -472482 29 30 0.02 0.16 0.11 0.07 chr1 10000044 A T chr1 18052645

合并需求

  • 匹配规则:output_armlympho.txt的第2列(CHROM,数字格式)、第3列(POS)与file1的第15列(column15,chr+数字格式)、第16列(column16)精准匹配
  • 适配染色体格式差异(数字 vs chr+数字)
  • file1存在重复行,两个文件排序不一致
  • 输出需包含两个文件的所有列

用户之前尝试的错误命令:

awk 'NR==FNR {Tmp[$3] = $16 FS $4; next} ($16 in Tmp) {print $0 FS Tmp[$16]}' output_armlympho.txt file1 > test
正确实现方案

使用以下awk命令完成合并:

awk '
NR==FNR {
    if (FNR == 1) {
        output_header = $0
        next
    }
    # 构建唯一匹配键:chr+染色体号+_+位置
    key = "chr" $2 "_" $3
    map[key] = $0
    next
}
{
    if (FNR == 1) {
        # 输出合并后的表头
        print $0, output_header
        next
    }
    # 提取file1的染色体号(去掉chr前缀)和位置,构建匹配键
    chrom_num = substr($15, 4)
    pos = $16
    match_key = "chr" chrom_num "_" pos
    
    # 匹配成功则输出合并行
    if (match_key in map) {
        print $0, map[match_key]
    }
}
' output_armlympho.txt file1 > merged_result.txt

命令解释

  1. 索引构建阶段(处理output_armlympho.txt)
    • 读取第一行时保存文件表头到output_header变量,用于后续合并表头
    • 对数据行,用chr+CHROM列(数字)+_+POS列拼接成唯一键,将整行内容存入map数组,确保每个染色体-位置组合对应唯一的output行
  2. 合并阶段(处理file1)
    • 读取第一行时,输出file1的表头加上output_armlympho.txt的表头,完成表头合并
    • 对数据行,通过substr($15,4)提取column15中chr后的数字部分,再和column16的位置拼接成和索引一致的匹配键
    • 如果匹配键存在于map数组中,就输出当前file1的行加上对应的output_armlympho.txt行内容
  3. 优势
    • 精准匹配染色体和位置,避免单字段匹配的歧义
    • 自动适配染色体格式差异
    • 不依赖文件排序,支持file1中的重复行匹配输出

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 16:36:18