i wrote a script that given a sequence extracts a 'n' dimension hashtable of oligos, and tells how many times and where a certain oligo is located.
I want to insert from keyboard an oligo and extract the positions, but ican't write it down. Any suggestions?
Thank you very much!
That's my script, that when asked to insert query returns the name of the file i opened first....
use strict;
my $f;
my $nomefile;
my $line;
my %oligo = ();
my %pos = ();
my $piece;
my $query;
my $sequenza;
my $i;
$nomefile = $ARGV[0];
open $f, "< $nomefile" or die "cannot open $nomefile: $!";
$sequenza = <$f>;
while($line = <$f>)
{
chomp($line);
if(substr($line, 0, 1) ne ">")
{
$sequenza = $sequenza.$line;
}
}
$sequenza = uc $sequenza;
for($i = 0; $i < length($sequenza) - 4; $i++)
{
$piece = substr($sequenza, $i, 4);
if(exists $oligo{$piece})
{
$oligo{$piece} = $oligo{$piece} + 1;
push(@{$pos{$piece}} , $i + 1);
}
else
{
$oligo{$piece} = 1;
push(@{$pos{$piece}} , $i + 1);
}
}
foreach $piece (sort keys %oligo)
{
print("$piece\t$oligo{$piece}\t@{$pos{$piece}}\n");
}
print("Insert query:\n");
$query = <>;
chomp($query);
$query = uc $query;
if(exists $oligo{$query})
{
print("$query\t compare $oligo{$query} volte\t in posizione @{$pos{$query}}\n");
}
else
{
print("$query does not appear in the sequence");
}
Thank you very much for your kind answer, it was very simple, I'm new in using Perl but I'm enjoying it very much! Can I ask a little enlightment please?
How can I make it work with a query not the length used to create the index (for example a query >n or a multiple of n)?
Thanks!