Lógica de coincidencia de archivos Unix

Lógica de coincidencia de archivos Unix

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 arrcomo índice.
Luego lea el archivo 1 y printcada registro. Si el tercer campo existe en la matriz, redirija la salida a file3; de lo contrario, a file4.

información relacionada