Слияние двух файлов после проверки соответствия некоторых столбцов

Предположим, что у меня есть два файла 912300001.file1.txt и file2.txt, и они содержат следующее:

912300001.file1.txt

VALUE 1000 -21 -21 VALUE 1001 -23 -22 VALUE 1002 -23 -21 

Первый столбец не важен, второй столбец – это счетчик, присутствующий в обоих файлах, который является одним из столбцов, который я хочу проверить при слиянии. Третий и четвертый столбцы – это те, которые я хочу объединить.

file2.txt

 -123456.12 -1234567.12 912300001 1000 123.1 123.1 ab 1 3 -123466.12 -1234667.12 912300001 1001 133.1 124.1 ab 2 2 -123476.12 -1234767.12 912300001 1002 143.1 125.1 ab 3 1 -123486.12 -1234867.12 922300001 1000 153.1 126.1 ab 3 1 -123496.12 -1234967.12 922300001 1001 163.1 127.1 ab 2 2 -123446.12 -1234367.12 922300001 1002 173.1 128.1 ab 1 3 

Я хочу использовать третий столбец, например «912300001», для сравнения с номером в имени первого файла и счетчиком «1000» счетчику в первом файле. Если оба совпадают, я хочу скопировать значение из столбцов 3 и 4 в первом файле во второе, чтобы это произошло:

output.txt

 -123456.12 1234567.12 912300001 1000 123.1 123.1 ab 1 3 -21 -21 -123466.12 1234667.12 912300001 1001 133.1 124.1 ab 2 2 -23 -22 -123476.12 1234767.12 912300001 1002 143.1 125.1 ab 3 1 -23 -21 -123486.12 1234867.12 922300001 1000 153.1 126.1 ab 3 1 Values from -123496.12 1234967.12 922300001 1001 163.1 127.1 ab 2 2 other files -123446.12 1234367.12 922300001 1002 173.1 128.1 ab 1 3 will come in here 

Если возможно, я хотел бы предоставить список файлов, которые он должен проверить во внешнем файле, например, «list.txt».

Благодаря,


EDIT: решение было предоставлено пользователями reddit: commandlineluser и ropid в этом потоке . Решение состоит в следующем:

 #!/bin/bash { read -r line read -r _ _ prev_name prev_count _ <<< "$line" declare -A lookup while read -r _ key value do lookup[$key]=$value done < <( sed '$a\' "$prev_name.file1.txt" ) echo "$line ${lookup[$prev_count]}" while read -r line do read -r _ _ name count _ <<< "$line" [[ $name != $prev_name ]] && { lookup=() while read -r _ key value do lookup[$key]=$value done < "$name.file1.txt" } prev_name=$name prev_count=$count echo "$line ${lookup[$prev_count]}" done } < file2.txt 

Благодаря,

Linux и Unix - лучшая ОС в мире.