cat /some/full/path/file.abc.part*.txt > /some/full/path/file.abc.MERGED.txt
####
file.abc.part-1.txt
file.abc.part-10.txt
file.abc.part-11.txt
file.abc.part-2.txt
file.abc.part-3.txt
...
####
#!/usr/bin/perl
use strict;
die "Usage: $0 /full/path/to/data/dir\n"
unless ( @ARGV == 1 and -d $ARGV[0] );
my $basedir = shift;
chdir $basedir or die "chdir $basedir failed: $!";
my @parts = <*.part-*.txt>;
# or:
# opendir D, ".";
# my @parts = grep /\.part-\d+\./, readdir D;
# closedir D;
my %merged;
for my $part ( sort { my ($x) = ($a=~/part-(\d+)/);
my ($y) = ($b=~/part-(\d+)/);
$x <=> $y
} @parts )
{
my ( $merge_key ) = ( $part =~ /^(.*)\.part-\d/ );
push @{$merged{$merge_key}}, $part;
}
for my $mrgfile ( sort keys %merged )
{
open( OUT, ">", "$mrgfile.MERGED.txt" )
or die "$mrgfile.MERGED.txt: $!";
local $/;
for my $partfile ( @{$merged{$mrgfile}} ) {
$_ = do { open( I, $partfile ); }
close I;
print OUT;
}
close OUT;
}