Link to home
Start Free TrialLog in
Avatar of StephenMcGowan
StephenMcGowan

asked on

Perl Script Modification

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
Avatar of Jan Bacher
Jan Bacher
Flag of United States of America image

Can you post statistics.pl?
Avatar of StephenMcGowan
StephenMcGowan

ASKER

Hi Jesper,

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

Thanks again,
Stephen.
statistics.txt
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;
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
SOLUTION
Avatar of ozo
ozo
Flag of United States of America image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
SOLUTION
Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
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.
ASKER CERTIFIED SOLUTION
Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial