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

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

file1を上から下に読み、2番目の列をfile2の3番目の列と一致させる必要があるプロジェクト要件があります。どちらのファイルもタブで区切られます。

レコードが一致する場合は、ファイル1のレコード全体を新しいファイル3に書き込む必要があり、一致しない場合は同じレコードをエラーファイル(ファイル4)に書き込む必要があります。ファイル1とファイル2には500から510のレコードが含まれています。 File1は最初から読み取る必要があり、file2の列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

file1の列3をfile2の列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にリダイレクトします。

関連情報