Если вы не можете отсортировать файлы, используйте Awk, который (как join
) предназначен для обработки данных с разделителями.
В этом случае сначала передайте второй файл, чтобы построить таблицу поиска, а затем используйте таблицу поиска для изменения каждой строки первого файла по мере прохождения через него.
$ 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
$