homemade blat: insert query from keyboard to find an oligo in an hashtable
1
0
Entering edit mode
5.4 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 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");
 }

 

software error hashtable perl script query • 1.2k views
ADD COMMENT
0
Entering edit mode

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!

ADD REPLY
2
Entering edit mode
5.4 years ago

Use <STDIN> to read from STDIN. When @ARGV is not empty, <> reads from the files in @ARGV. If you still want to keep using <>, then empty @ARGV first e.g. $nomefile = shift @ARGV;

ADD COMMENT

Login before adding your answer.

Traffic: 2498 users visited in the last hour
Help About
FAQ
Access RSS
API
Stats

Use of this site constitutes acceptance of our User Agreement and Privacy Policy.

Powered by the version 2.3.6