sub countLines { my $filename=shift(@_); die("amaUtils:countLines:invalid filename") if(length($filename)==0); open(TMP,"<$filename") or die("amaUtils:countLines unable to open file $filename"); my $nb=0; $nb += tr/\n/\n/ while sysread(TMP, $_, 2 ** 16); close TMP; return $nb; } sub split_file { my $filename=shift(@_); my $nbFiles=shift(@_); die("amaUtils:split_files invalid number") if($nbFiles !~ /^\d+$/); die("amaUtils:split_files invalid number") if($nbFiles < 1); my $curNb=1; my $totalCount=countLines($filename); my $nbLinesPerFile=int($totalCount/$nbFiles); $nbLinesPerFile++ if( ($nbLinesPerFile * $nbFiles)!=$totalCount); my $currentCount=0; open(ORIG,"<$filename"); my ($newfile,$ext)=split(/\./,$filename); open(DEST,">${newfile}_".sprintf("%02d",${curNb}).".$ext"); while() { if($currentCount==$nbLinesPerFile) { close DEST; $curNb++; $currentCount=0; open(DEST,">${newfile}_".sprintf("%02d",${curNb}).".$ext"); } print DEST $_; $currentCount++; } close DEST; close ORIG; }