Hello,
I am trying to write a program that reads in a FASTA file containing several DNA sequences, identifies all repeating 4-dimensional (i.e. all 4-mers that occur more than once) in a sequence, and prints repeating 4-mer and header of the sequence in which it was found. K-mer is simply a sequence of k nucleotides (for example, "aaca", "gacg" and "tttt" are 4-dimensional).
Here is my code:
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";
}
}
I have two queries: firstly, I don’t know how to create my regular expression pattern to get the desired result. And secondly, less importantly, I'm sure my code is very inefficient, so if there is a way to shorten it, please tell me.
!
FASTA: ( , , fasta)
> NC_001422.1 Enterobacteria phage phiX174 sensu lato, GAGTTTTATCGCTTCCATGACGCAGAAGTTAACACTTTttttttCGGATATTTCTGATGAGTCGAAAAAT CCCTTACTTGAGGATAtatataAATTATGTCTAATATTCAAACTGGCGCCGAGCGTATGCCGCATGACCT
> NC_001501.1 Enterobacteria phage phiX184 sensu lato, AACGGCTGGTCAGTATTTAAGGTTAGTGCTGAGGTTGACTACATCTGTTTTTAGAGACCCAGACCTTTTA TCTCACTTCTGTTACTCCAGCTTCTTCGGCACCTGTTTTACAGACACCTAAAGCTACATCGTCAACGTTA TATTTTGATAGTTTGACGGTTAATGCTGGTAATGGTgagagagaGGTTTTCTTCATTGCATTCAGATGGA TCAACGCCGCTAATCAGGTTGTTTCTGTTGGTGCTGATATTGCTTTTGATGCCGACCCTAAATTTTTTGC CTGTTTGGTTCGCTTTGAGTCTTCTTCGGTTCCGACTACCCTCCCGACTGCCTATGATGTTTATCCTTTG
> NC_001622.5 Enterobacteria phage phiX199 sensu lato, TTCGCTGAATCAGGTTATTAAAGAGTTGCCGAGATATTTATGTTGGTTTCATGCGGATTGGTCGTTTAAA TTGGACTTGGTGGCAAGTCTGCCGCTGATAAAGGAAAGGATAATGACCAAATCAAAGAACTCGTGATTAT CTTGCTGCTGCATTTCCTGAGCTTAATGCTTGGGAGCGTGCTGGTGCTGATGCTTCCTCTGCTGGTATGG TTGACGCCGGATTTGAGAATCAAAAATGTGAGAGAGCTTACTAAAATGCAACTGGACAATCAGAAAGAGA GATGCAAAATGAGACTCAAAAAGAGATTGCTGGCATTCAGTCGGCGACTTCACGCCAGAATACGAAAGAC CAGGTATATGCACAAAATGAGATGCTTGCTTATCAACAGAAGGAGTCTACTGCTCGCGTTGCGTCTATTA TGGAAAACACCAATCTTTCCAAGCAACAGCAGGTTTCCGAGATTATGCGCCAAATGCTTACTCAAGCTCA AACGGCTGGTCAGTATTTTACCAATGACCAAATCAAAGAAATGACTCGCAAGGTTAGTGCTGAGGTTGAC TTAGATGAGTGTTCATCAGCAAACGCAGAATCAGCGGTATGGCTCTTCTCATATTGGCGCTACTGCAAAG