如何使用python或linux命令通过在本地数据库中搜索将蛋白质ID转换为蛋白质名称?

时间:2017-09-16 20:05:15

标签: python linux search fasta

我有两个文件: ID.txt包含蛋白质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命令行中执行此操作?

谢谢。

2 个答案:

答案 0 :(得分:0)

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

grep "KKP65897.1" database.txt

答案 1 :(得分: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.......
...