#!/usr/bin/perl # Coded by Trizen under the GPL # Split a text file into sub file of 'n' lines each other # http://trizen.googlecode.com use warnings; use strict; my $lines_n = (grep { /^\d+$/ } @ARGV)[0] || 100; if (!grep { -f } @ARGV) { die "Usage: $0 \n"; } sub print_to_file { my ($array_ref, $foldername, $num) = @_; open my $out_fh, '>', "$foldername/$num.txt" or return; print $out_fh @{$array_ref}; close $out_fh; return 1; } foreach my $filename (grep { -f } @ARGV) { my $foldername = $filename; if (not $foldername =~ s/\.\w{1,5}$//) { $foldername .= '_files'; } if (-d $foldername) { warn "error: '${foldername}' already exists...\n"; next; } else { mkdir $foldername or do { warn "Unable to create '${foldername}': $!\n"; next }; } open my $fh, '<', $filename or do { warn "Unable to open '${filename}' for read: $!\n"; next }; my @lines; my $num = 0; while (defined(my $line = <$fh>)) { push @lines, $line; if (eof $fh) { ++$num; print_to_file(\@lines, $foldername, $num); undef @lines; last; } next unless scalar @lines == $lines_n; ++$num; print_to_file(\@lines, $foldername, $num); undef @lines; } close $fh; }