2つのファイルをマージしたいです。
ファイル1
C 45 897
E 76 348
G 78 456
ファイル2
A 54 987
B 34 986
C 67 340
E 46 987
F 34 567
以下のようにファイル3にマージする必要があります。
A 0 0 54 987
B 0 0 34 986
C 45 897 67 340
E 76 348 46 987
F 0 0 34 567
G 78 456 0 0
答え1
男性が参加し、いくつかは試みる
join -e 0 -a 1 a b
A 0 0 54 987
B 0 0 34 986
C 45 897 45 897 67 340
E 76 348 76 348 46 987
F 0 0 34 567
G 78 456 78 456 0 0
-e 0
不足している列を埋める-a 2
ファイル1にデータを保持
答え2
各レコードの4要素配列であるハッシュ配列(%L)に文字値の各行を格納します。すべてのファイルを読み取ったら、未定義の各値を0に設定し、%Lに各文字の配列を印刷します。
アルゴリズムはより多くの入力ファイルに拡張されます(各追加ファイルは元の4列配列の列数を2ずつ増やします)。
#! /usr/bin/perl
use strict;
my %L=();
my @files = ('file1', 'file2');
my $fcount = 0;
foreach my $f (@files) {
open(F,"<",$f) || die "couldn't open $f: $!\n";
while(<F>) {
my($l, $x, $y) = split;
$L{$l}[$fcount * 2] = $x;
$L{$l}[$fcount * 2 + 1] = $y;
};
close(F);
$fcount++;
};
foreach my $l (sort keys %L) {
foreach (0..3) { $L{$l}[$_] = 0 if !defined($L{$l}[$_])};
print join("\t",$l,@{ %L{$l} }), "\n";
}
出力は次のとおりです。
$ ./merge.pl
A 0 0 54 987
B 0 0 34 986
C 45 897 67 340
E 76 348 46 987
F 0 0 34 567
G 78 456 0 0
答え3
修正する: 質問を誤って読みましたが、これは問題の解決策ではありません。
次のようにする必要があります。
cat file1 file2 | sort > newfile
たぶん人々は猫なしで生きることができるかもしれません。