Логика сопоставления файлов Unix

Логика сопоставления файлов Unix

У меня есть проектное требование, в котором мне нужно прочитать файл file1 сверху вниз и сопоставить его столбец 2 со столбцом 3 файла file2. Оба файла разделены табуляцией.

Если запись совпадает, мне нужно записать полную запись из файла 1 в новый файл 3, а если не совпадает, мне нужно записать ту же запись в файл ошибок (файл 4). Файл 1 и файл 2 содержат 500-510 записей. Нужно начать чтение файла 1 с начала и найти значение столбца 2 в столбце 3 файла 2 (полное сканирование сверху вниз, если требуется).

файл1

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

файл2

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

файл3

ZZA 01  LIST18
OOP 11  LIST56

файл4

ZZY 02  LIST38
UTW 80  LIST100

решение1

Если вы хотите сопоставить столбец 3 файла file1 со столбцом 4 файла file2, вы можете использовать awk:

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

Сначала считывается file2 и сохраняется четвертое поле в массиве arrкак индекс.
Затем считывается file1 и printкаждая запись. Если третье поле существует в массиве, перенаправить вывод в file3, в противном случае в file4.

Связанный контент