comparison galaxy-tools/tools/rdock/bin/sdsplit @ 0:4eb3f9cb2a51 draft

Uploaded
author dzesikah
date Fri, 26 Aug 2016 09:53:37 -0400
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:4eb3f9cb2a51
1 #!/usr/bin/perl
2 # Splits SD records into multiple files of equal no. of records
3 use lib "$ENV{'RBT_ROOT'}/lib";
4
5 use FileHandle;
6 use SDRecord;
7
8 # Record size to split into
9 my $recSize = 1000;
10
11 #output root
12 my $outRoot = "tmp";
13
14 #Print help if no command line arguments
15 printHelpAndExit() if (scalar(@ARGV) == 0);
16
17 #Parse command line arguments
18 my @files;
19 while (scalar(@ARGV)) {
20 my $arg = shift @ARGV;
21 printHelpAndExit() if ($arg eq '-h');
22 if (index($arg,'-o')==0) {
23 $outRoot = substr($arg,2);
24 }
25 elsif (index($arg,'-')==0) {
26 $recSize = substr($arg,1);
27 }
28 else {
29 push @files,$arg;#must be a filename
30 }
31 }
32 push @ARGV,@files;#put the filenames back in the arg list
33
34 my $sdRec = new SDRecord;
35 my $nRec=0;
36 my $nFile=0;
37 my $sdfh;
38
39 #read records
40 while ($sdRec->readRec('LINES'=>1)) {
41 #check if we need to start a new output file
42 if ($nRec % $recSize == 0) {
43 $nFile++;
44 my $outFile = $outRoot . $nFile . ".sd";
45 if (defined $sdfh) {
46 undef $sdfh;
47 }
48 $sdfh = new FileHandle ">$outFile";
49 if (!defined $sdfh) {
50 die "Can't open $outFile";
51 }
52 else {
53 print STDOUT "Opening $outFile\n";
54 }
55 $sdfh->autoflush(1);
56 select($sdfh);
57 }
58 $nRec++;
59 $sdRec->writeRec();
60 }
61 undef $sdfh;
62 select(STDOUT);#reselect STDOUT as default
63
64 #######################################################################
65 sub printHelpAndExit {
66 print "\Splits SD records into multiple files of equal size\n";
67 print "\nUsage:\tsdsplit [-<RecSize>] [-o<OutputRoot>] [sdFiles]\n\n";
68 print "\t-<RecSize>\trecord size to split into (default = 1000 records)\n";
69 print "\t-o<OutputRoot>\tRoot name for output files (default = tmp)\n";
70 print "\n\tIf SD file list not given, reads from standard input\n";
71 exit;
72 }