Entering edit mode
9.0 years ago
nico_ce90
•
0
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 I can'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!