Quando há tantos campos envolvidos, eu prefiro awk
:
$ awk 'NR==FNR{a[$1]=$2; next}{if($2 in a){$6=a[$2]}}1;' file1 file2
0 098 0 0 0 -9 x
0 099 0 0 0 -9 x
0 100 0 0 0 -9 x
0 101 0 0 0 -9 x
0 102 0 0 0 13.342 x
0 103 0 0 0 7.456 x
0 104 0 0 0 -9 x
0 105 0 0 0 6.453 x
0 106 0 0 0 -9 x
0 106 0 0 0 -9 x
0 107 0 0 0 3.567 x
0 108 0 0 0 4.210 x
Explicação
-
NR==FNR{a[$1]=$2; next}
:NR
é o número da linha atual eFNR
é o número da linha atual do arquivo atual. Ao processar mais de um arquivo, os dois serão iguais apenas enquanto o primeiro arquivo estiver sendo lido.a[$1]=$2
usa ost field as a key to an array whose value is the 2nd field. The
próximoskips to the next line. So, this will save all values from
arquivo1into the array
a '. -
if($2 in a){$6=a[$2]}
: agora estamos lendo o segundo arquivo. Se o segundo campo dessa linha estiver presente na matriza
, defina o 6º campo ($6
) como o que estava armazenado ema
para o segundo campo. -
1;
: esta é uma abreviação de "imprimir esta linha".