Solved

Perl Script Modification

Posted on 2012-03-12
10
322 Views
Last Modified: 2012-03-19
Hi,

I'm currently working with two scripts.
Running pipeline.sh generates three result files in the ~/candidates folder:

'proteome'-statistics file
'proteome'-final file
'proteome'-endfile file.

It is the generated statistics file I am interested in (see attached example).
I am interested in the number of "Molecular mimicry 14-mers":
statistics file:

Parasite proteome	0
Parasite-specific proteins	0
Conserved proteins	0
Parasite 14-mers	0
Parasite-specific 14-mers	0
Molecular mimicry candidate 14-mers	23
Molecular mimicry candidate proteins	9



I want to modify the script so that none of the above files are generated.
Instead the script will create a file called "Results"
As I say, I am only interested in Molecular Mimicry 14-mers
so, instead of creating the three files, I would like a "Results" file to be created in the ~/candidates folder. And in this file would be the number 23 (or whatever the number of molecular mimicry candidates would be).

Also, If the same script is run twice, the next result should append to the previous result in the same file (i.e. 23 [next result here])
Or if the script is run 1000 times, you'd generate 1000 results.

Any advice would be much appreciated.

Thanks.
pipeline.sh
get-candidates.txt
B-burgdorferi-statistics
0
Comment
Question by:StephenMcGowan
  • 4
  • 2
  • 2
10 Comments
 
LVL 28

Expert Comment

by:Jan Springer
ID: 37714694
Can you post statistics.pl?
0
 

Author Comment

by:StephenMcGowan
ID: 37715137
Hi Jesper,

Sorry, I thought I had attached it.
It should be attached to this reply.

Thanks again,
Stephen.
statistics.txt
0
 
LVL 28

Expert Comment

by:Jan Springer
ID: 37715634
I think that this might do it.  You need the "-final" file generated as input to your counters but I've added a line to remove it when it's done being used.


#!/usr/bin/perl -w
use strict;

my $counter_in = 0;
my $counter_out = 0;

open (COUNTERIN, "<$ENV{TMP}/$ENV{PARASITE}-in");
while (my $line = <COUNTERIN>) {
        if ($line =~ /^>/) {
                chomp $line;
                $counter_in++;
        }
}
close (COUNTERIN);

open (COUNTEROUT, "<$ENV{TMP}/$ENV{PARASITE}-out");
while (my $line = <COUNTEROUT>) {
        if ($line =~ /^>/) {
                chomp $line;
                $counter_out++;
        }
}
close (COUNTEROUT);

my $total_proteins = $counter_in + $counter_out;

open (STATISTICS, ">>$ENV{CANDIDATES}/Results");

my %whole_proteins;
my $mmcandidates = 0;
open (FINAL, "<$ENV{CANDIDATES}/$ENV{PARASITE}-$ENV{HOST}-final");
while (my $line = <FINAL>) {
        chomp $line;
        if ($line =~ /^(.+)-AA:\d+/) {
                $mmcandidates++;
                $whole_proteins{$1} = 1;
        }
}
close FINAL;
unlink("<$ENV{CANDIDATES}/$ENV{PARASITE}-$ENV{HOST}-final");

print STATISTICS "Molecular mimicry candidate 14-mers\t$mmcandidates\n";
close STATISTICS;
0
Free Tool: IP Lookup

Get more info about an IP address or domain name, such as organization, abuse contacts and geolocation.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

 

Author Comment

by:StephenMcGowan
ID: 37717511
Hi Jesper,

Thanks for getting back to me.
You're almost there. I've run the script and it still produces three files:

1. Results
2. a "final" file (B_burgdorferi-H_sapiens-final)
3. a "endfile" file (B_burgdorferi-H_sapiens-endfile)

(see attached picture)

I only need the Results file, the other two files shouldn't be generated (I'm trying to save data space as I'll be running this script 1000 times).

The Results file is almost right.
The file contains:

"Molecular mimicry candidate 14-mers      23"

I wanted just the number "23" to be in the file, without the "Molecular mimicry candidate 14-mers" statement beforehand. Is this possible?

What I'm trying to achieve is so, that if I run the same script 1000 times, 1000 result numbers will append to the same results file.

Hope this makes sense.

Thanks,

Stephen.
Results.jpg
0
 
LVL 84

Assisted Solution

by:ozo
ozo earned 150 total points
ID: 37723113
unlink("<$ENV{CANDIDATES}/$ENV{PARASITE}-$ENV{HOST}-final"); #should not contain "<"
0
 
LVL 84

Assisted Solution

by:ozo
ozo earned 150 total points
ID: 37723118
print STATISTICS "Molecular mimicry candidate 14-mers\t$mmcandidates\n";
#can be
print STATISTICS "$mmcandidates\n";
0
 
LVL 28

Expert Comment

by:Jan Springer
ID: 37724751
Those two files that are being left may be from another script.  

If all of the scripts are in the same directory,

     grep final *
     grep endfile *

Please post any other scripts that reference these file names.
0
 
LVL 28

Accepted Solution

by:
Jan Springer earned 350 total points
ID: 37724764
Thanks ozo for catching my cut/paste error.

What does this do for you:

#!/usr/bin/perl -w
use strict;

my $counter_in = 0;
my $counter_out = 0;

open (COUNTERIN, "<$ENV{TMP}/$ENV{PARASITE}-in");
while (my $line = <COUNTERIN>) {
        if ($line =~ /^>/) {
                chomp $line;
                $counter_in++;
        }
}
close (COUNTERIN);

open (COUNTEROUT, "<$ENV{TMP}/$ENV{PARASITE}-out");
while (my $line = <COUNTEROUT>) {
        if ($line =~ /^>/) {
                chomp $line;
                $counter_out++;
        }
}
close (COUNTEROUT);

my $total_proteins = $counter_in + $counter_out;

open (STATISTICS, ">>$ENV{CANDIDATES}/Results");

my %whole_proteins;
my $mmcandidates = 0;
open (FINAL, "<$ENV{CANDIDATES}/$ENV{PARASITE}-$ENV{HOST}-final");
while (my $line = <FINAL>) {
        chomp $line;
        if ($line =~ /^(.+)-AA:\d+/) {
                $mmcandidates++;
                $whole_proteins{$1} = 1;
        }
}
close FINAL;
unlink("$ENV{CANDIDATES}/$ENV{PARASITE}-$ENV{HOST}-final");

print STATISTICS "$mmcandidates\n";
close STATISTICS;
0

Featured Post

Free Tool: Postgres Monitoring System

A PHP and Perl based system to collect and display usage statistics from PostgreSQL databases.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
VB.net and sql server 4 45
Problem to Alipay 10 40
Why use this lambda? 12 26
Programming Language for Wordpress 7 27
Checking the Alert Log in AWS RDS Oracle can be a pain through their user interface.  I made a script to download the Alert Log, look for errors, and email me the trace files.  In this article I'll describe what I did and share my script.
Active Directory replication delay is the cause to many problems.  Here is a super easy script to force Active Directory replication to all sites with by using an elevated PowerShell command prompt, and a tool to verify your changes.
The viewer will be introduced to the technique of using vectors in C++. The video will cover how to define a vector, store values in the vector and retrieve data from the values stored in the vector.
In this fifth video of the Xpdf series, we discuss and demonstrate the PDFdetach utility, which is able to list and, more importantly, extract attachments that are embedded in PDF files. It does this via a command line interface, making it suitable …

791 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question