
У меня есть проектное требование, в котором мне нужно прочитать файл 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.