awk - compara arquivos e imprime linhas de ambos os arquivos

0

Estou procurando uma maneira de comparar a coluna $ 2 e a coluna $ 1 de dois arquivos e, se forem iguais, imprima todas as colunas do primeiro arquivo com a coluna $ 2 do segundo arquivo.

arquivo_1.txt

apple    tree    5
great    see     10
see      apple   3
tree     bee     11
make     change  2

arquivo_2.txt

apple    5.21      
around   6.21      
great    2         
bee      1         
see      7.43      
tree     3         

A saída deve se parecer com:

apple    tree    5    3     
great    see     10   7.43
see      apple   3    5.21
tree     bee     11   1   

Eu tentei

awk 'NR==FNR{a[$2];next} ($1 in a) {print}' file_1.txt file_2.txt > output.txt

que obviamente apenas imprime as linhas correspondentes do arquivo_2.txt. Então, como eu adiciono a declaração print para as colunas do primeiro arquivo?

Eu tentei ler mais colunas em uma matriz como

awk 'NR==FNR{a[$2];b[$1];c[$3];next} ($1 in a) {print a, b c}' file_1.txt      file_2.txt > output.txt

que está obviamente errado;)

A ajuda é muito apreciada.

    
por dani_anyman 17.02.2017 / 11:54

1 resposta

2

Que tal

$ awk 'NR==FNR {a[$1]=$2; next} $2 in a {print $0, a[$2]}' OFS='\t' file_2.txt file_1.txt 
apple  tree   5   3
great  see    10  7.43
see    apple  3   5.21
tree   bee    11  1
    
por steeldriver 17.02.2017 / 12:09