$ awk 'FNR==NR{a[$1]=$2;next} ($1 in a) {print $1,a[$1],$2}' file2 file1
aa 45 32
bb 31 15
cc 50 78
Explicação:
awk implicitamente percorre cada arquivo, uma linha por vez. Como nós demos a file2 como o primeiro argumento, ele é lido primeiro. file1 é lido em segundo lugar.
-
FNR==NR{a[$1]=$2;next}NRé o número de linhas queawkleu até agora eFNRé o número de linhas queawkleu até o momento no arquivo atual. Assim, seFNR==NR, ainda estamos lendo o primeiro arquivo nomeado:file2. Para cada linha emfile2, atribuímosa[$1]=$2.Aqui,
aé uma matriz associativa ea[$1]=$2significa salvar a segunda coluna do arquivo2, denotada$2, como um valor na matrizausando a primeira coluna do arquivo2,$1como a chave.nextdiz aawkpara pular o restante dos comandos e recomeçar com a próxima linha. -
($1 in a) {print $1,a[$1],$2}Se chegarmos aqui, isso significa que estamos lendo o segundo arquivo:
file1. Se vimos o primeiro campo da linha emfile2, conforme determinado pelo conteúdo da matriza, então imprimimos uma linha com os valores do campo 2 de ambos os arquivos.