如何利用映射文件替换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
相关产品推荐
相关产品推荐

