#! /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(<ROFILE>) { ++$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(<ROFILE>), 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__
