2017-09-16 40 views
0

我有两个文件: ID.txt含蛋白质的ID,像这样:如何使用python或linux命令通过在本地数据库中搜索将蛋白质ID转换为蛋白质名称?

KKP65897.1 
KKP42119.1 
KKP91065.1 
OGY93232.1 

另一个文件是nr.faa。它是从NCBI下载的数据库fasta格式文件。它是这样的:

>KKP42119.1 hypothetical protein DDB_G027....... 
MASTQNTVEEVAQJML....... 
>KKP65897.1 hypothetical protein DDB_G127....... 
MATSREEQNTVEEVAQJML....... 

我想在IDs.txt被命名此FASTA数据库文件进行搜索,并返回蛋白质的名称,如“假定蛋白”,并将其存储在一个txt文件。通过这种方式,我将把这个ID与蛋白质名称联系起来。数据库文件是巨大的〜7G,我也提取了标题行'> .....'并将其保存到txt文件(〜3G)。也许在该文件中搜索会更快。

如何在Python或Linux命令行中执行此操作?

谢谢。

+0

也许将平面文件加载到实际的关系数据库,如SQLite或MySQL。 –

+0

谢谢,但我对SQLite或MySQL一无所知。有没有办法做到这一点在python或linux命令? – stevex

回答

0

并返回蛋白质的名称,如“假定蛋白”,并存储 他们在一个txt文件

凭借强大的AWK工具:

awk 'NR==FNR{ a[$1];next }/^>/ && (substr($1,2) in a){ print $2,$3 }' id.txt nr.fa > prot_names.txt 

产生的prot_names.txt文件看起来象下面这样:

hypothetical protein 
hypothetical protein 
... 

如果你想用grep含蛋白质名全行 - 使用下面的的grep方法:

grep -Ff id.txt nr.fa > prot_names.txt 

在这种情况下,prot_names.txt文件将包含:

>KKP42119.1 hypothetical protein DDB_G027....... 
>KKP65897.1 hypothetical protein DDB_G127....... 
... 
+0

@stevex,不客气 – RomanPerekhrest

0

在bash,那么你可以简单地使用grep来获取搜索字符串相匹配的行:

grep "KKP65897.1" database.txt

+0

我有> 10000个名字,比如“KKP65897.1”,我不能一个一个地grep。有没有办法批量grep? – stevex

+0

什么是您可以查找信息的实际KEY?因为如果你没有主键,那么我不明白你怎么能做到这一点 – MrE

相关问题