Se você não puder classificar os arquivos, use o Awk, que é (como join
) projetado para manipular dados delimitados.
Nesse caso, passe primeiro o segundo arquivo para construir uma tabela de consulta e use a tabela de consulta para modificar cada linha do primeiro arquivo conforme você passa por ele.
$ cat file2
1 0.5
2 0.3
3 0.2
$ cat file1
1 X 1 1.0
2 X 1 1.0
3 X 1 1.0
4 Y 2 1.0
5 Y 2 1.0
6 Z 3 1.0
$ awk 'NR==FNR {a[$1] = $2; next} {$4 = a[$3]} 1' file2 file1
1 X 1 0.5
2 X 1 0.5
3 X 1 0.5
4 Y 2 0.3
5 Y 2 0.3
6 Z 3 0.2
$