in reply to Merging two files by command line

perl -naE 'push @{$%{$F[0]}},@F[1..$#F];END{say"$_ @{$%{$_}}"for keys% +%}' File1 File2

Replies are listed 'Best First'.
Re^2: Merging two files by command line
by venciso (Initiate) on Aug 20, 2009 at 14:56 UTC
    Thanks JavaFan, I'm a Perl beginner so would it be much trouble if anyone took me through what that line means? Cheers guys, Victor

      You did ask for a one-line script to solve it. That's what a one-line script looks like in Perl: obscure and hard to parse.

      You'd be much better off doing it with multiple lines:

      use strict; use warnings; my %stuff; while (my $line = <>) { chomp $line; my @word = split(q{ }, $line); push (@{$stuff{$word[0]}}, @word[1..$#word]); } for my $key (keys %stuff) { print "$key @{$stuff{$key}}\n"; }

      Example run:

      $ cat file1 Adam 1 2 3 Eve 4 5 6 $ cat file2 Adam 4 5 6 Eve 7 8 9 $ ./merge.pl file1 file2 Adam 1 2 3 4 5 6 Eve 4 5 6 7 8 9