
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,