1
我最終嘗試使用List::MoreUtils::mesh
的字母三個陣列結合,這樣我可以然後比較序列中的每個位置的滑動窗口搜索。 例如,如果我有一個看起來像三個文件:perl的:沿着網格陣列
>file_1
TAGCTAGCCAGC-T
第一比較是TTT之間(這可以算作不替代)。如果第一個字母是TAA,這將被視爲替代。第一個挑戰是將三個相應的字母放在一起進行比較。
這是到目前爲止我的代碼:
use strict;
use warnings;
use List::MoreUtils qw{mesh};
open (SEQ_ONE, "<", "/path/to/file_1.txt") or die $!;
open (SEQ_TWO, "<", "/path/to/file_2.txt") or die $!;
open (REFERENCE, "<", "/path/to/reference_sequence.txt") or die $!;
my @first;
my @second;
my @reference;
my @combined;
my $sequence;
my $secondsequence;
my $thirdsequence;
my $windowsize = 3;
my $step = 3;
while (my $line = <SEQ_ONE>){
chomp $line;
if ($line !~ /^>+/) {
$sequence .= $line;
}
@first = split //, $sequence;
}
while (my $secondline = <SEQ_TWO>){
chomp $secondline;
if ($secondline !~ /^>+/){
$secondsequence .= $secondline;
}
@second = split //, $secondsequence;
}
while (my $thirdline = <REFERENCE>){
chomp $thirdline;
if ($thirdline !~ /^>+/){
$thirdsequence .= $thirdline;
}
@reference = split //, $thirdsequence;
}
@combined = mesh @reference, @first, @second;
my $list = "@combined";
for (my $windowstart = 0; $windowstart <= (length($list) - $windowsize); $windowstart += $step){
my $windowSeq = substr($list, $windowstart, $windowsize);
print $windowSeq, "\n";
}
這似乎打破了字母的字母塊,在2個1個字母長度交替。上面的代碼輸出看起來是這樣的:
T T
T
A A
A
G G
G
我有不同的窗口和步長嘗試,但我仍然無法在同一時間獲得單獨三個字母所需的輸出。我很接近,只是不太在那裏。謝謝您的幫助。
你的線路'my $ list =「@combined」;'數組已插入_with個空格加在characters_之間。我不確定你想要什麼 - 任何三個字符的序列都必須有一個或兩個空格。在我看來,你想'我的$ list = join',@combined;'。順便說一句,我不明白你的問題描述。 – zdim
嗨zdim,謝謝你的回答!我應該如何改進我的問題?也許我可以簡化它...再次感謝。 – Rob
這是很好的,你給所有的代碼和描述問題!但是,您使用了「_mesh_」這個詞,我認爲您指的是您所在領域的某種技術。 (我添加了鏈接,我希望你不介意。)然後,用「_count as substitution_」,我以爲你的意思是計算,直到它讓我意識到它是生物學。我建議你避開你的領域的條款,如果你需要他們簡要解釋他們。另外,雖然我確實看到了問題(字符串中有多餘的空格),但從描述中不清楚。所以這都是關於如何描述描述。我的$ .02。 – zdim