2017-09-16 43 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

相關問題