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

如何利用映射文件替换FASTA文件标题中下划线包裹的特定片段?

用键值映射文件替换FASTA标题中被下划线包围的部分

需求说明

需要把FASTA文件标题里,被下划线夹在中间的特定标识(比如scf7180000350313),替换为键值映射文件中对应的新编号(比如NW_011929472.1),标题的其他部分和序列内容保持不变。

示例文件

原始FASTA文件

>mir-2_scf7180000350313_41896
CCATCAGAGTGGTTGTGATGTGGTGCTATTGATTCATATCACAGCCAGCTTTGATGAG
>mir-92a-2_scf7180000349939_17298
AGGTGGGGATGGGGGCAATATTTGTGAATGATTAAATTCAAATTGCACTTGTCCCGGCCTGC
>mir-279a_scf7180000350374_48557
AATGAGTGGCGGTCTAGTGCACGGTCGATAAAGTTGTGACTAGATCCACACTCATTAAG

键值映射文件(key_file.txt)

scf7180000350313 NW_011929472.1
scf7180000349939 NW_011929473.1
scf7180000350374 NW_011929474.1

期望结果

>mir-2_NW_011929472.1_41896
CCATCAGAGTGGTTGTGATGTGGTGCTATTGATTCATATCACAGCCAGCTTTGATGAG
>mir-92a-2_NW_011929473.1_17298
AGGTGGGGATGGGGGCAATATTTGTGAATGATTAAATTCAAATTGCACTTGTCCCGGCCTGC
>mir-279a_NW_011929474.1_48557
AATGAGTGGCGGTCTAGTGCACGGTCGATAAAGTTGTGACTAGATCCACACTCATTAAG

解决方案

用awk命令可以快速完成替换,执行以下命令即可:

awk 'NR==FNR {map[$1]=$2; next} /^>/ {split(substr($0,2), arr, "_"); $0=">"arr[1]"_"map[arr[2]]"_"arr[3]} 1' key_file.txt input.fasta > output.fasta

命令解释

  • NR==FNR {map[$1]=$2; next}:先读取键值映射文件,把第一列的旧标识作为键、第二列的新编号作为对应值存入数组map,读完映射文件后再处理FASTA文件。
  • /^>/ {split(substr($0,2), arr, "_"); $0=">"arr[1]"_"map[arr[2]]"_"arr[3]}:碰到FASTA标题行(以>开头)时,先去掉开头的>,按下划线分割成数组,用映射表中的新编号替换数组的第二个元素,再重新拼接成新标题。
  • 1:对所有行(包括序列内容)直接输出,保证序列部分原样保留。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 11:45:36