2012-09-03 73 views
0

我有一個蛋白質序列的FASTA文件。我想查找文件中是否存在 序列hxxhcxc,如果是,則打印 段。這裏,h =疏水性,c =帶電荷,x =任何(包括剩餘的)殘基/ s。 如何在Perl中做到這一點?查找文件中的氨基酸序列

我能想到的是製作3個陣列 - 疏水性,帶電和所有殘基。 將每個陣列與具有FASTA序列的文件進行比較。除此之外,我無法想到任何事情,特別是如何維持秩序 - 這是主要的事情。我是Perl的初學者,所以請儘可能簡單的解釋。 PS:由於這只是一個序列,我可以簡單地將內容複製到一個.txt文件,沒有強制使用fasta文件(在這種情況下)。疏水性和帶電荷的殘基(氨基酸) - 有9個疏水性和5個帶電殘基。正如你所提到的,它是以大寫單字母表示的氨基酸名稱。所以我想要做的是在蛋白質序列(.txt文件/ fasta文件)中找到一個序列:疏水序列,任何疏水序列,帶電序列,任意序列(hxxhcxc)。我努力重新構思我的問題 - 希望我現在好一點。

+0

您正在處理單入或多入FASTA文件嗎?根據維基百科頁面,H代表'組氨酸',C代表半胱氨酸或胞嘧啶(我認爲您的情況下爲半胱氨酸)。然而你正在尋找小寫字母(在FASTA描述中根本沒有描述);有一些解釋要做嗎?當你說'打印拉伸'時,你的意思是'打印整個條目'還是'打印匹配條目的部分'?你需要打印識別線嗎?你面臨的問題之一是模式匹配可能會延伸到多行。 –

+0

這個特定的文件只是一個包含一個蛋白質序列的文件。正如我所提到的,h =疏水的,c =帶電的,x =所有的殘基。我想知道序列「hxxhcxc」是否存在於蛋白質序列中。 – Shweta

+0

好的:我可以看到你重申了你在這個問題中所說的話,而沒有提到我問的第一個問題,這不是很有幫助。我對FASTA文件(這只是我從Wikipiedia收集的)瞭解不多,知道您的數據是什麼樣子,因此您需要什麼。我不清楚你的FASTA文件是否真的包含小寫'h'和'c';你說是的,但維基建議它不能這樣做。我再也忍不住了 - 對不起。 –

回答

2

我對Fasta文件並不熟悉,但是正則表達式看起來像是要走到這裏的路。

在口頭上

如果open文件進行讀取,你可以處理行的文件行,print -ing只有那些線if它們匹配您指定的正則表達式。

在代碼

use strict; 
use warnings; 
use autodie; 

open my $fh, '<', 'file.fasta';   # Open filehandle in read mode 

while (my $line = <$fh>) {    # Loop over line by line 

    print $line       # Print line if it matches pattern 
     if $line =~ /h..hc.c/;    # '.' in a regular expression matches 
              # (almost) anything 
} 

close $fh;        # Close filehandle 
0

所以,你必須決定哪些是 「疏水」 氨基酸,但讓剛剛有兩種V(艾琳)開始,我(soleucine),L( eucine),F,W,或C.

並且其帶電氨基酸是E,d,R或K.使用此您可以定義 一個正則表達式(你會看到它下面)

如果您只需在文本文件中將整個序列解析爲:

#!/usr/bin/perl 

open(IN, "yourfile.txt") || die("couldn't open the file: $!"); 

$sequence = ""; 

while(<IN>) { 
    chomp(); 
    $sequence .= $_; 
} 

if($sequence =~ /[VILFWC]..[VILFWC][EDRK].[EDRK]/) { 
    print "Found it!\n"; 
} else { 
    print "Not there\n"; 
}