$_ = ; # read column headings my @columns= split /,/; #### use strict; my %data; open(I1,"file1") or die "file1: $!" $_ = ; # read column headings my @columns= split /,/; my %line; while () { # get data chomp; @line{@column} = split /,/; $data{$line{'upc'}} = $line{'qty'}; } open(I2,"file2") or die "file2: $!" $_ = ; # read column headings my @columns= split /,/; while () { # get data chomp; @line{@column} = split /,/; $data{$line{'upc'}} .= join ',',@line{@columns},''; # or: $data{$line{'upc'}} = join ',', $data{$line{'upc'}},@line{@columns}; } for (sort keys %data) { print $data{$_}\n"; }