Python 用单独文件中的完整注释替换blast报告中的id
我有一个带有以下格式注释的文件:Python 用单独文件中的完整注释替换blast报告中的id,python,replace,annotations,blast,Python,Replace,Annotations,Blast,我有一个带有以下格式注释的文件: XS-5236245.2_hypothetical_protein c16_g1_i1 len=581 path=[12725:0-580] XS-5236245.2 94.9 59 3 0 403 579 254 312 8.6e-27 116.3 以及以制表符分隔的blast报告,第二列中仅包含登录id: transcript1 XS-5236245.2 94.3 35 0 245 356 789 89
XS-5236245.2_hypothetical_protein
c16_g1_i1 len=581 path=[12725:0-580] XS-5236245.2 94.9 59 3 0 403 579 254 312 8.6e-27 116.3
以及以制表符分隔的blast报告,第二列中仅包含登录id:
transcript1 XS-5236245.2 94.3 35 0 245 356 789 896 1e-230 6.3
当存在匹配项时,我想用注释文件中的整行替换blast报告中的accession_id。这是我的尝试,正如您所看到的,我使用非常基本的python。如果你能给我一个更复杂的解决方案,我希望你能解释一下。谢谢你的帮助
利努
我找到了这样的解决方案: 创建一个包含两列的新文件accessionid_headers.txt,第一列包含登录ID,第二列包含完整的标题。python很容易做到这一点:
#!usr/bin/env python
import sys
f1 = open(sys.argv[1],'r')
f2 = open(sys.argv[2],'w')
for line in f1:
splitline = line.split('_')
accessionid = splitline[0]
f2.write('{0} {1}'.format(accessionid, line))
f1.close()
f2.close()
使用以下格式的爆炸报告:
XS-5236245.2_hypothetical_protein
c16_g1_i1 len=581 path=[12725:0-580] XS-5236245.2 94.9 59 3 0 403 579 254 312 8.6e-27 116.3
我应用了以下我修改过的awk,以适应我的文件,但由于我不是awk方面的专家,无法充分解释每个步骤。也许有人可以解释每一步都在做什么:
awk 'NR==FNR{a[$1]=$2;next}$4 in a{$4=a[$4]}1' accession_headers.txt blast.report > outfile
实际上,它并不适用于所有字段,它只替换了一些字段,并且所有字段都应该有一个匹配项,所以也许有人可以帮助更正awk命令。