Lógica de correspondência de arquivos Unix

Lógica de correspondência de arquivos Unix

Eu tenho um requisito de projeto no qual preciso ler o arquivo1 de cima para baixo e combinar a coluna 2 com a coluna 3 do arquivo2. Ambos os arquivos são delimitados por tabulações.

Se um registro corresponder, tenho que escrever o registro completo do arquivo 1 para o novo arquivo3 e, se não corresponder, tenho que escrever o mesmo registro no arquivo de erro (arquivo4). Arquivo1 e arquivo2 contêm 500-510 registros. É necessário começar a ler o arquivo1 desde o início e encontrar o valor da coluna 2 na coluna 3 do arquivo2 (verificação completa de cima para baixo, se necessário).

arquivo1

ZZA 01  LIST18
ZZY 02  LIST38
UTW 80  LIST100
OOP 11  LIST56

arquivo2

A1  21138   99999   LIST18
W1  20223   99999   LIST44
Z9  20355   99999   LIST56
O9  21002   21154   LIST11

arquivo3

ZZA 01  LIST18
OOP 11  LIST56

arquivo4

ZZY 02  LIST38
UTW 80  LIST100

Responder1

Se você quisesse combinar a coluna 3 do arquivo1 com a coluna 4 do arquivo2, você poderia usar awk:

awk -F'\t' '
  NR==FNR{ arr[$4]; next }
  { print > (($3 in arr) ? "file3" : "file4") }
' file2 file1

Isso lê o arquivo2 primeiro e salva o quarto campo na matriz arrcomo índice.
Em seguida, leia o arquivo1 e printcada registro. Se o terceiro campo existir na matriz, redirecione a saída para file3, caso contrário, para file4 .

informação relacionada