Mercurial > repos > marpiech > norwich_docking_tools
comparison tools/rdock/bin/sdsplit @ 2:0faa03a92843 draft default tip
Uploaded
author | dzesikah |
---|---|
date | Fri, 26 Aug 2016 10:19:49 -0400 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
1:ad4bc82457e5 | 2:0faa03a92843 |
---|---|
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 } |