### test1.csv ###
1 aaa ignored_field
3 ccc ignored_field
4 ddd ignored_field
### test2.csv ###
11 aaa ignored_field
22 bbb ignored_field
44 ddd ignored_field
### test3.csv ###
333 ccc ignored_field
555 eee ignored_field
666 fff ignored_field
777 ggg ignored_field
####
#!/usr/bin/perl
use v5.14;
my %data;
sub cnt_fields {
my @fields = split "\t", $_[0];
return scalar @fields;
}
sub gather_file {
state $count = 0;
return $count unless @_;
my ($filename, $d) = @_;
open my $fh, "<", $filename;
while (<$fh>) {
chomp;
my @field = split;
my $offset = $count - cnt_fields($d->{$field[1]});
$d->{$field[1]} .= "0\t" x $offset;
$d->{$field[1]} .= "$field[0]\t";
}
close $fh;
for my $key (keys %$d) {
if (cnt_fields($d->{$key}) <= $count) {
$d->{$key} .= "0\t";
}
}
$count++;
}
for (1..3) {
gather_file("test$_.csv", \%data);
}
my $header = "Key\t";
for (1..gather_file()) {
$header .= "f$_\t";
}
say $header;
for my $key (sort keys %data) {
say "$key\t$data{$key}";
}
####
$ ./report.pl
Key f1 f2 f3
aaa 1 11 0
bbb 0 22 0
ccc 3 0 333
ddd 4 44 0
eee 0 0 555
fff 0 0 666
ggg 0 0 777