#!/usr/bin/perl use strict; use warnings; use File::Basename; use Sort::Naturally; my %data; my $table; my %col_cnt; @ARGV = glob "tab*.txt"; while (<>) { next if /^ID/; chomp; ($table = fileparse $ARGV) =~ s/\.txt$// unless $table; $col_cnt{$table} ||= tr/|//; my ($gene, $cols) = split /\s*\|\s*/, $_, 2; $data{$gene}{$table} = $cols; $table = '' if eof; } my @tables = nsort keys %col_cnt; for my $gene (nsort keys %data) { print $gene; for my $table (@tables) { if ($data{$gene}{$table}) { print ' | ' . $data{$gene}{$table}; } else { print ' | ' . join " | ", ("n.a.") x $col_cnt{$table}; } } print "\n"; }