Unix ファイルマッチングロジック

Unix ファイルマッチングロジック

プロジェクト要件では、ファイル 1 を上から下に読み取り、その列 2 をファイル 2 の列 3 と一致させる必要があります。両方のファイルはタブ区切りです。

レコードが一致する場合、ファイル 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

ファイル1の列3をファイル2の列4と一致させたい場合は、次のようにしますawk

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

これは最初に file2 を読み取り、配列の 4 番目のフィールドをarrインデックスとして保存します。
次に、 file1 とprint各レコードを読み取ります。配列に 3 番目のフィールドが存在する場合は、出力を file3 にリダイレクトし、存在しない場合は file4 にリダイレクトします。

関連情報