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 並將陣列中的第四個欄位儲存arr為索引。
然後讀取file1和print每筆記錄。如果數組中存在第三個字段,則將輸出重定向到 file3 ,否則重定向到 file4 。

相關內容