【发布时间】:2017-06-28 07:59:44
【问题描述】:
你好,
我尝试编写一个程序,该程序读取包含多个 DNA 序列的 FASTA 格式文件,识别序列中所有重复的 4-mer(即所有出现不止一次的 4-mer),并打印出重复的4-mer 和发现它的序列的标题。 k-mer 只是 k 个核苷酸的序列(例如,“aaca”、“gacg”和“tttt”是 4-mers)。
这是我的代码:
use strict;
use warnings;
my $count = -1;
my $file = "sequences.fa";
my $seq = '';
my @header = ();
my @sequences = ();
my $line = '';
open (READ, $file) || die "Cannot open $file: $!.\n";
while ($line = <READ>){
chomp $line;
if ($line =~ /^>/){
push @header, $line;
$count++;
unless ($seq eq ''){
push @sequences, $seq;
$seq = '';
}
} else {
$seq .= $line;
}
} push @sequences, $line;
for (my $i = 0; $i <= $#sequences+1; $i++){
if ($sequences[$i] =~ /(....)(.)*\g{1}+/g){
print $header[$i], "\n", $&, "\n";
}
}
我有两个要求:首先,我不知道如何设计我的正则表达式模式以获得所需的输出。 其次,不太重要的是,我确信我的代码效率很低,所以如果有办法缩短它,请告诉我。
提前致谢!
这是一个 FASTA 文件的示例:(请注意,序列之间有一个额外的行,这在原始 fasta 文件中不是这种情况)
>NC_001422.1 肠杆菌噬菌体phiX174 sensu lato,完整基因组 GAGTTTTATCGCTTCCATGACGCAGAAGTTAACACTTTttttttCGGATATTTCTGATGAGTCGAAAAAT CCCTTACTTGAGGATAtatataAATTATGTCTAATATTCAAACTGGCGCCGAGCGTATGCCGCATGACCT
>NC_001501.1 肠杆菌噬菌体phiX184 sensu lato,完整基因组 AACGGCTGGTCAGTATTTAAGGTTAGTGCTGAGGTTGACTACATCTGTTTTTAGAGACCCAGACCTTTTA TCTCACTTCTGTTACTCCAGCTTCTTCGGCACCTGTTTTACAGACACCTAAAGCTACATCGTCAACGTTA TATTTTGATAGTTTGACGGTTAATGCTGGTAATGGTgagagagaGGTTTTCTTCATTGCATTCAGATGGA TCAACGCCGCTAATCAGGTTGTTTCTGTTGGTGCTGATATTGCTTTTGATGCCGACCCTAAATTTTTTGC CTGTTTGGTTCGCTTTGAGTCTTCTTCGGTTCCGACTACCCTCCCGACTGCCTATGATGTTTATCCTTTG
>NC_001622.5 肠杆菌噬菌体phiX199 sensu lato,完整基因组 TTCGCTGAATCAGGTTATTAAAGAGTTGCCGAGATATTTATGTTGGTTTCATGCGGATTGGTCGTTTAAA TTGGACTTGGTGGCAAGCTTGCCGCTGATAAAGGAAAGGATAATGACCAAATCAAAGAACTCGTGATTAT CTTGCTGCTGCATTTCCTGAGCTTAATGCTTGGGAGCGTGCTGGTGCTGATGCTTCCTCTGCTGGTATGG TTGACGCCGGATTTGAGAATCAAAAATGTGAGAGAGCTTACTAAAATGCAACTGGACAATCAGAAAGAGA GATGCAAAATGAGACTCAAAAAGAGATTGCTGGCATTCAGTCGGCGACTTCACGCCAGAATACGAAAGAC CAGGTATATGCACAAAATGAGATGCTTGCTTATCAACAGAAGGAGTCTACTGCTCGCGTTGCGTCTATTA TGGAAAACACCAATCTTTCCAAGCAACAGCAGGTTTCCGAGATTATGCGCCAAATGCTTACTCAAGCTCA AACGGCTGGTCAGTATTTTACCAATGACCAAATCAAAGAAATGACTCGCAAGGTTAGTGCTGAGGTTGAC TTAGATGAGTGTTCATCAGCAAACGCAGAATCAGCGGTATGGCTCTTCTCATATTGGCGCTACTGCAAAG
【问题讨论】:
-
好了,解释一下 4-mer 到底是什么!只有一个问题——它们可以重叠吗?你有一些样本数据和想要的输出吗?
-
是的,它们可以重叠。我试图附加一个 fasta 文件,但看起来不可能。我将在问题中复制一个示例。不幸的是,我没有所需输出的样本
-
您使用的是什么版本的 Perl?
perl -v -
我使用的是 5.18 版
标签: regex perl fasta dna-sequence