서로 다른 두 열의 일치하는 값을 기반으로 공백으로 구분된 두 파일을 결합합니다.

서로 다른 두 열의 일치하는 값을 기반으로 공백으로 구분된 두 파일을 결합합니다.

이러한 유형의 문제에 대해 이 웹사이트에서 제공하는 다양한 솔루션을 시도했지만 그 중 어느 것도 도움이 되지 않았습니다.

두 개의 파일이 있습니다(공백으로 구분되고 열이 포함되어 있음). 두 파일 모두 아래 예에 나와 있는 것과 동일한 수의 레코드를 포함합니다.

이 열을 A, B, C라고 부르겠습니다. (이것이 열 머리글입니다.)

파일 1:

A  B  C  D
-----------
a1 b1 c1 d1
a2 b2 c2 d2
a3 b3 c3 d3
a4 b4 c4 d4
a5 b5 c5 d5

파일 2:

E B  A  F
---------
1 b5 a5 f
2 b2 a2 f
1 a1 b1 f
1 a3 b3 f
2 a4 b4 f 

병합된 파일을 생성하고 싶습니다.

A  B  C  D  E
-------------
a1 b1 c1 d1 1
a2 b2 c2 d2 2
a3 b3 c3 d3 1
a4 b4 c4 d4 2
a5 b5 c5 d5 1

답변1

이것이 필요한 것과 비슷합니까(아직 포맷해야 할 부분이 남아 있습니다...)?

awk 'NR == FNR {T[$2,$3] = T[$3,$2] = $1; next} {print $0, T[$1,$2]}' file2 file1
A  B  C  D E
----------- 
a1 b1 c1 d1 1
a2 b2 c2 d2 2
a3 b3 c3 d3 1
a4 b4 c4 d4 2
a5 b5 c5 d5 1

답변2

지루한 연결 솔루션: 먼저 file1 col 1과 file2 col2를 연결한 다음 file1 col 1과 file2 col 3을 연결합니다.

{ 
    join -11 -22 -o 0,1.2,1.3,1.4,2.1 <(sed '1,2d' file1 | sort -k1,1) <(sed '1,2d' file2 | sort -k2,2) 
    join -11 -23 -o 0,1.2,1.3,1.4,2.1 <(sed '1,2d' file1 | sort -k1,1) <(sed '1,2d' file2 | sort -k3,3) 
} | sort -k 1,1 

산출

a1 b1 c1 d1 1
a2 b2 c2 d2 2
a3 b3 c3 d3 1
a4 b4 c4 d4 2
a5 b5 c5 d5 1

관련 정보