20251125
This commit is contained in:
@@ -0,0 +1,84 @@
|
||||
#!/usr/bin/env perl
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
use File::Basename;
|
||||
|
||||
use Getopt::Long qw(:config no_ignore_case bundling pass_through);
|
||||
|
||||
my $usage = "\n\nusage: $0 --prefix \$prefix fileA.sra [fileB.sra ...]\n\n\n";
|
||||
|
||||
|
||||
my $prefix;
|
||||
|
||||
&GetOptions ('prefix=s' => \$prefix);
|
||||
|
||||
my @sra_files = @ARGV;
|
||||
|
||||
unless (@ARGV) {
|
||||
die $usage;
|
||||
}
|
||||
|
||||
unless (@sra_files) {
|
||||
die $usage;
|
||||
}
|
||||
|
||||
my $fastq_dump_path = `sh -c "command -v fastq-dump"`;
|
||||
unless ($fastq_dump_path && $fastq_dump_path =~ /\w/) {
|
||||
die "Error, cannot find 'fastq-dump' utility in your PATH. Be sure you have SRA toolkit installed and fastq-dump in your PATH setting. ";
|
||||
}
|
||||
|
||||
my @core_names;
|
||||
foreach my $sra_file (@sra_files) {
|
||||
|
||||
my $core_name = $sra_file;
|
||||
$core_name =~ s/\.sra$//;
|
||||
$core_name = basename($core_name);
|
||||
push (@core_names, $core_name);
|
||||
|
||||
my $cmd = "fastq-dump --defline-seq '@\$sn[_\$rn]/\$ri' --split-files $sra_file";
|
||||
&process_cmd($cmd) unless (-s "${core_name}_1.fastq");
|
||||
|
||||
}
|
||||
|
||||
if ($prefix) {
|
||||
|
||||
my @final_cmds;
|
||||
my @tmp_files;
|
||||
for my $end ("1", "2") {
|
||||
|
||||
my $cmd = "cat";
|
||||
foreach my $core_name (@core_names) {
|
||||
|
||||
my $file = "$core_name" . "_$end.fastq";
|
||||
$cmd .= " $file ";
|
||||
push (@tmp_files, $file);
|
||||
}
|
||||
$cmd .= ">$prefix" . "_$end.fastq";
|
||||
&process_cmd($cmd);
|
||||
}
|
||||
|
||||
## remove tmp files:
|
||||
foreach my $file (@tmp_files) {
|
||||
unlink($file);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
exit(0);
|
||||
|
||||
|
||||
####
|
||||
sub process_cmd {
|
||||
my ($cmd) = @_;
|
||||
|
||||
print STDERR "CMD: $cmd\n";
|
||||
my $ret = system($cmd);
|
||||
|
||||
if ($ret) {
|
||||
die "Error, cmd: $cmd died with ret $ret";
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
Reference in New Issue
Block a user