join
を使用することもできますが、パイプラインが複雑になり、Perlのようなより強力な言語に切り替えるのが簡単になる可能性があります。
すべての情報を覚えておくことは、ハッシュを使用して
join -11 -21 -o1.1,1.2,1.3,1.4,1.5,2.4,2.5 \
<(sed 's/ \+/:/' fileA | sort) \
<(sed 's/ \+/:/' fileB | sort) \
| join -11 -22 -a1 -o1.1,1.2,1.3,1.4,1.5,1.6,1.7,2.5,2.6 \
- <(sed 's/ \+\([^ ]\+\) \+\([^ ]\+\)/ \1:\2/' fileC | sort -k2) \
| sed 's/:/ /'
Perlのソリューション、:ここで
#!/usr/bin/perl
use warnings;
use strict;
# key_start key_end keep_from output
my %files = (A => [0, 1, 2, [0 .. 3]],
B => [0, 1, 2, [-2, -1]],
C => [1, 2, 3, [-2, -1]],
);
my %hash;
for my $file (keys %files) {
open my $FH, '<', "file$file" or die "file$file: $!";
while (<$FH>) {
my @fields = split;
$hash{"@fields[$files{$file}[0], $files{$file}[1]]"}{$file}
= [ @fields[$files{$file}[2] .. $#fields] ];
}
}
for my $key (sort keys %hash) {
print $key, join(' ', q(),
grep defined, map {
@{ $hash{$key}{$_} }[@{ $files{$_}[-1] }]
} sort keys %files), "\n";
}
[あなたがこれまでに試してみました何](http://whathaveyoutried.com/)? – doublesharp