Unindo dois arquivos separados por espaços com base em valores correspondentes em duas colunas diferentes

0

Eu tentei várias soluções dadas neste site para este tipo de problema e nenhuma delas está me ajudando.

Eu tenho dois arquivos (separados por espaços, contém colunas). Ambos os arquivos contêm o mesmo número de registros que os meus exemplos abaixo.

Vou chamar as colunas como A, B, C ... (esses são os cabeçalhos das colunas.)

Arquivo 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

Arquivo 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 

Eu quero produzir o arquivo mesclado:

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
    
por Coder 01.11.2018 / 19:55

2 respostas

2

Isso chega perto do que você precisa (alguma formatação ainda precisa ser feita ...)?

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
    
por 01.11.2018 / 21:25
0

uma solução tediosa de junção: primeiro junte em file1 col 1 e file2 col2, depois junte em file1 col 1 e 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 

saídas

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
    
por 02.11.2018 / 02:44