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

如何在Bash中利用参考表重命名制表符分隔表的列值

用参考表批量替换制表符分隔表的第一列值

我有一张制表符分隔的数据表:

chr1    24809154    24809669
chr1    24546969    24547563
chr1    7932037 7932594
chr3    42012155    42012598
chr3    923035  923549
chr4    5799575 5799990
chr4    6895845 6896348
chr4    2337251 2337743
chr5    10715994    10716426
chr5    4385445 4385878

同时有一张参考映射表,用来替换第一列的内容:

chr1    scaffold_A  
chr2    scaffold_B  
chr3    scaffold_C  
chr4    scaffold_D  
chr5    scaffold_E  

需要将第一张表的第一列按参考表替换,得到如下结果:

scaffold_A  24809154    24809669
scaffold_A  24546969    24547563
scaffold_A  7932037 7932594
scaffold_C  42012155    42012598
scaffold_C  923035  923549
scaffold_D  5799575 5799990
scaffold_D  6895845 6896348
scaffold_D  2337251 2337743
scaffold_E  10715994    10716426
scaffold_E  4385445 4385878

方法一:用awk命令(命令行首选)

awk可以直接读取参考表建立映射关系,再批量处理数据表,一行命令搞定:

awk 'NR==FNR {map[$1]=$2; next} {print map[$1] "\t" $2 "\t" $3}' reference.txt data.txt > output.txt

简单说明:

  • 先读参考表,把chrX和对应的scaffold_Y存入数组map
  • 接着读数据表,把第一列替换成map里对应的值,再拼接原表的第二、第三列输出
  • 结果会保存到output.txt里,用\t保证输出还是制表符分隔

方法二:用sed命令(适合轻量替换)

先把参考表转成sed能识别的替换规则,再执行替换:

  1. 生成替换脚本:
sed 's/\(.*\)\t\(.*\)/s\/^\1\t\/\2\t\/g/' reference.txt > replace.sed
  1. 用脚本处理数据表:
sed -f replace.sed data.txt > output.txt

简单说明:

  • 第一步把参考表的每一行转成s/^chrX\t/scaffold_Y\t/g这种sed替换规则
  • 第二步用生成的规则批量替换数据表中开头的chrX内容

方法三:用Python脚本(适合自定义逻辑)

如果需要更灵活的处理(比如过滤空行、处理异常值),可以写个简单脚本:

# 读取参考表建立映射
mapping = {}
with open('reference.txt', 'r') as ref_file:
    for line in ref_file:
        line = line.strip()
        if not line:
            continue
        chr_name, scaffold_name = line.split('\t')
        mapping[chr_name.strip()] = scaffold_name.strip()

# 处理数据表并输出
with open('data.txt', 'r') as data_file, open('output.txt', 'w') as out_file:
    for line in data_file:
        line = line.strip()
        if not line:
            continue
        parts = line.split('\t')
        if parts[0] in mapping:
            parts[0] = mapping[parts[0]]
        out_file.write('\t'.join(parts) + '\n')

运行脚本:

python replace_chr.py

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 06:05:17