我有两个文件:ID.TXT包含蛋白质ID,如这样:
KKP65897.1
KKP42119.1
KKP91065.1
OGY93232.1
另一个文件是nr.faa。这是从NCBI下载的数据库Fasta-Format文件。就是这样:
>KKP42119.1 hypothetical protein DDB_G027.......
MASTQNTVEEVAQJML.......
>KKP65897.1 hypothetical protein DDB_G127.......
MATSREEQNTVEEVAQJML.......
我想通过IDS.TXT中的名称在此Fasta数据库文件中搜索,然后返回蛋白质名称,例如"假设蛋白质",然后将它们存储在TXT文件中。这样,我将ID与蛋白质名称联系起来。
数据库文件是巨大的〜7G,我还提取了标题行'> .....',然后将其保存到TXT文件(〜3G)。也许在该文件中搜索更快。
如何在Python或Linux命令行中执行此操作?
谢谢。
并返回蛋白质名称,例如"假设蛋白质",然后存储 他们在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 -Ff id.txt nr.fa > prot_names.txt
在这种情况下,prot_names.txt
文件将包含:
>KKP42119.1 hypothetical protein DDB_G027.......
>KKP65897.1 hypothetical protein DDB_G127.......
...
在bash中,您可以简单地使用grep获取与搜索字符串匹配的行:
grep "KKP65897.1" database.txt