두 개의 파일을 병합하고 싶습니다.
파일 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
어쩌면 사람들은 고양이 없이도 살 수 있을지도 모릅니다.