[interchange-cvs] interchange - jon modified eg/merge-tab-files

interchange-cvs at icdevgroup.org interchange-cvs at icdevgroup.org
Fri Apr 11 08:29:28 UTC 2008

User:      jon
Date:      2008-04-11 08:29:28 GMT
Added:     eg       merge-tab-files
Commit little utility for merging tab-delimited text file tables.

Probably there's some existing tool out there, but this is what I wrote
to merge new locales into the Interchange Standard demo locale.txt file.
Maybe it'll come in handy for others.

Revision  Changes    Path
1.1                  interchange/eg/merge-tab-files

rev 1.1, prev_rev 1.0
Index: merge-tab-files

# merge-tab-files
# by Jon Jensen <jon at endpoint.com>
# 2008-04-11
# A tool for merging multiple tab-delimited files.
# Each tab-delimited file's first line is expected to contain the column names.
# Usage: merge-tab-files $file1 [$file2 ...]

use strict;
use warnings;
use List::MoreUtils qw( uniq );
#use Data::Dumper;

my %data;
my @all_cols;

for my $file (@ARGV) {
    open my $in, '<', $file or die "Couldn't open file $file: $!\n";
    $_ = <$in>;
    my @cols = split /\t/, $_, -1;
    push @all_cols, @cols;
    while (<$in>) {
        my @row = split /\t/, $_, -1;
        my $key = $row[0];
        # Don't want to clobber duplicate column definitions if the new one is empty
        $data{$key}{$cols[$_]} ||= $row[$_] for 1..$#cols;
    close $in;

@all_cols = uniq @all_cols;
print join("\t", @all_cols), "\n";

#print Dumper(\%data);

no warnings 'uninitialized';

for my $key (sort keys %data) {
    print join("\t", $key, map { $data{$key}{$_} } @all_cols[1..$#all_cols]), "\n";

More information about the interchange-cvs mailing list