
Tengo un requisito de proyecto en el que necesito leer el archivo 1 de arriba a abajo y hacer coincidir la columna 2 con la columna 3 del archivo 2. Ambos archivos están delimitados por tabulaciones.
Si un registro coincide, tengo que escribir el registro completo del archivo 1 en el nuevo archivo 3 y si no coincide, tengo que escribir el mismo registro en el archivo de error (archivo4). Archivo1 y archivo2 contienen entre 500 y 510 registros. Debe comenzar a leer el archivo 1 desde el principio y encontrar el valor de la columna 2 en la columna 3 del archivo 2 (escaneo completo de arriba a abajo si es necesario).
archivo1
ZZA 01 LIST18
ZZY 02 LIST38
UTW 80 LIST100
OOP 11 LIST56
archivo2
A1 21138 99999 LIST18
W1 20223 99999 LIST44
Z9 20355 99999 LIST56
O9 21002 21154 LIST11
archivo3
ZZA 01 LIST18
OOP 11 LIST56
archivo4
ZZY 02 LIST38
UTW 80 LIST100
Respuesta1
Si quisiera hacer coincidir la columna 3 del archivo1 con la columna 4 del archivo2, podría usar awk
:
awk -F'\t' '
NR==FNR{ arr[$4]; next }
{ print > (($3 in arr) ? "file3" : "file4") }
' file2 file1
Esto lee el archivo2 primero y guarda el cuarto campo de la matriz arr
como índice.
Luego lea el archivo 1 y print
cada registro. Si el tercer campo existe en la matriz, redirija la salida a file3; de lo contrario, a file4.