perl script to make batching jobs easier

git-svn-id: file:///humgen/gsa-scr1/gsa-engineering/svn_contents/trunk@1638 348d0f76-0448-11de-a6fe-93d51630548a
This commit is contained in:
ebanks 2009-09-16 19:02:46 +00:00
parent 2f29cf59ba
commit 598974ae10
1 changed files with 57 additions and 0 deletions

View File

@ -0,0 +1,57 @@
#!/usr/bin/perl -w
# Runs a given (GATK) command as specified, except that a single '*'
# in the -I argument field is replaced with the appropriate shell
# expansion and all other instances of the '*' in other arguments are
# replaced with the correct expansion accordingly.
# IMPORTANT: remember to surround your command with quotes (\"\") so
# that the shell doesn't try to expand out your regular expression!
use strict;
use Getopt::Long;
my $dry;
my $inArg = "I";
GetOptions( "dry!" => \$dry,
"inArg=s" => \$inArg);
if (scalar(@ARGV) != 1) {
print "Usage: batchGATKjobsWithRegExp\n\t[-inArg <the GATK argument flag for input; default=I>]\n\t[-dry]\n\t\"GATK command\"\n";
exit(1);
}
my @args = split(/ /, $ARGV[0]);
chomp(@args);
my $argcount = scalar(@args);
my $IargIdx = undef;
for (my $i = 0; $i < $argcount; $i++) {
if ($args[$i] eq "-$inArg") {
$IargIdx = $i + 1;
}
}
my $Iarg = "$args[$IargIdx]\n";
if ($Iarg =~ m/(.*),(.*),(.*)/) {
$Iarg = $3;
}
my @matches = glob($Iarg);
$Iarg =~ s/\*/(.*)/;
chomp($Iarg);
foreach my $match (@matches) {
$match =~ m/$Iarg/;
my $piece = $1;
my $cmd = "";
for (my $i = 0; $i < $argcount; $i++) {
my $arg = $args[$i];
$arg =~ s/\*/$piece/;
$cmd .= "$arg ";
}
if ($dry) {
print "$cmd\n";
} else {
system($cmd);
}
}