Fusionar dos archivos después de comprobar que algunas de las columnas coinciden

Fusionar dos archivos después de comprobar que algunas de las columnas coinciden

Supongamos que tengo dos archivos 912300001.file1.txt y file2.txt y contienen lo siguiente:

912300001.archivo1.txt

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

La primera columna no es importante, la segunda columna es el contador que está presente en ambos archivos, que es una de las columnas que quiero verificar al fusionar. Las columnas tercera y cuarta son las que quiero fusionar.

archivo2.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

Quiero usar la tercera columna, por ejemplo, "912300001" para comparar con el número en el nombre del primer archivo y el contador "1000" con el contador del primer archivo. Si ambos coinciden, quiero copiar el valor de las columnas 3 y 4 del primer archivo al segundo de modo que suceda esto:

salida.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

Si es posible también, me gustaría proporcionar la lista de archivos que debería verificar en un archivo externo, por ejemplo, "list.txt".

Gracias,


EDITAR: La solución fue proporcionada por usuarios de reddit: commandlineluser y ropid en estehilo. La solución es la siguiente:

#!/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

Gracias,

información relacionada