Это действительно похоже на классическое использование join . Утилита join
используется для объединения файлов в определенных полях (файлы должны быть отсортированы). Этот ответ не использует awk
, не знаю, если это проблема.
cat <<EOF >file1
air 0.1 0.2
soil 0.9 0.7
water 0.4 0.6
EOF
cat <<EOF >file2
temp1 0.1 0.2 air
temp2 0.5 0.6 .
temp3 0.6 0.3 water
EOF
# separator is space
# join on the first field from first file
# join on the firth field from the second file
# in case the lines are not matched, print the line from second file
# output - first output 4 fields from file 2 and second field from file 2
# it is the same as 3 fields from file 2 and 2 fields from file 1
join -t' ' -11 -24 -a2 -o 2.1,2.2,2.3,2.4,1.2 file1 file2
выведет:
temp1 0.1 0.2 air 0.1
temp2 0.5 0.6 .
temp3 0.6 0.3 water 0.4
проверено на repl .
Если ваши входные файлы не отсортированы, вам необходимо предварительно отсортировать их по определенным полям:
join -t' ' -11 -24 -a2 -o 2.1,2.2,2.3,2.4,1.2 <(<file1 sort -t' ' -k1) <(<file2 sort -t' ' -k4)
Если ваши входные файлы не отсортированы, и вам необходимо сохранить порядок сортировки из файла 2, пронумеровать строки в файле 2, объединить их, отсортировать выходные данные, используя номера строк из файла 2, и удалить эти номера строк:
join -t' ' -11 -25 -a2 -o 2.1,2.2,2.3,2.4,2.5,1.2 <(<file1 sort -t' ' -k1) <(<file2 nl -w1 -s' ' | sort -t' ' -k5) | sort -t' ' -k1 | cut -d' ' -f2-