$ 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 queawk
leu até agora eFNR
é o número de linhas queawk
leu 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]=$2
significa salvar a segunda coluna do arquivo2, denotada$2
, como um valor na matriza
usando a primeira coluna do arquivo2,$1
como a chave.next
diz aawk
para 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.