#! /usr/local/bin/perl use strict; use warnings; # Example data - 85_782 lines, 1_072_787 (words), 10_313_190 bytes - filename: syslog # Split into 3 files: Execution time on a 333MHz Ultrasparc w/1GB RAM less than 5 seconds... # Written by -Sx- o4/22/2oo4 ... # Example command: # perl split_files syslog [3] # where [] is an optional number of files to split into... my $filename = shift || die "no file name given..."; my $split_into = shift || 3; my $line_cnt; my $x; open (ROFILE, "$filename") or die "cannot open $filename $!"; while() { ++$line_cnt; } close (ROFILE) or die "cannot close $filename $!"; open (ROFILE, "$filename") or die "cannot re-read $filename $!"; for ($x=0; $x < $split_into; ++$x) { open (WOFILE, ">$filename.$x") or die "cannot write to $filename.$x $!"; until (eof ROFILE) { my @data_lines = map scalar(), 1 .. ($line_cnt/$split_into); print WOFILE @data_lines; last; } close (WOFILE) or die "cannot close $filename.$x $!"; } close (ROFILE) or die "cannot close $filename $!"; print "Done ... \n\n"; __END__