簡體   English   中英

AWK - 在查找文件中查找數據並打印“成功”或“失敗”

[英]AWK - Lookup data in lookup file and Print "success" or "Failure"

無法確定我需要在 AWK 中實現的目標。 我有2個文件:

數據文件:-

XYZ:ABC:tab1:join_check:abc111:abc.tab1234
XYZ:ABC:tab2:join_check:abc112:abc.tab1234
XYZ:ABC:tab3:join_check:abc113:abc.tab1234
XYZ:NON-ABC:tab1:join_check:abc123:abc.tab1234
XYZ:NON-ABC:tab2:join_check:abc123:abc.tab1234
HQL:ABC:tab1:join_check:abc123:abc.tab1234
HQL:NON-ABC:tab2:join_check:abc123:abc.tab1234
HQL:NON-ABC:tab3:join_check:abc123:abc.tab1234

查找文件:-

XYZ:ABC:tab1
XYZ:ABC:tab2
XYZ:NON-ABC:tab1
HQL:ABC:tab1
HQL:NON-ABC:tab2

所需的輸出:-

XYZ:ABC:tab1:join_check:abc111:abc.tab1234:Verified
XYZ:ABC:tab2:join_check:abc112:abc.tab1234:Verified
XYZ:ABC:tab3:join_check:abc113:abc.tab1234:Failed
XYZ:NON-ABC:tab1:join_check:abc123:abc.tab1234:Verified
XYZ:NON-ABC:tab2:join_check:abc123:abc.tab1234:Failed
HQL:ABC:tab1:join_check:abc123:abc.tab1234:Verified
HQL:NON-ABC:tab2:join_check:abc123:abc.tab1234:Verified
HQL:NON-ABC:tab3:join_check:abc123:abc.tab1234:Failed

使用數據文件中的前 3 個字段,需要在 Lookup 文件中查找相同的三個字段。 如果找到記錄/條目(所有三個字段都匹配),則需要從數據文件中打印行並附加“已驗證”,否則如果未找到記錄/條目,則需要從數據文件中打印行並附加“失敗”。

非常感謝這方面的任何幫助

awk -F: -v OFS=: 'NR==FNR{lookup[$1":"$2":"$3]=1; next} {print $0, (lookup[$1":"$2":"$3] ? "Verified" : "Failed")}' lookup data

首先我們有兩個代碼塊,第一個只為查找文件(第一個文件)執行,第二個只為數據文件(第二個文件)執行。 這是通過檢查 FNR(文件記錄號)和 NR(總記錄號)來完成的。 這只對第一個文件是一樣的,所以 NR==FRN,然后我們使用next跳轉到下一行,以防止對第一個文件執行第二個塊。

然后對於第二個文件,我們在查找關聯數組中查找樹字段,並使用三元運算符選擇“已驗證”(如果找到)或“失敗”(如果未找到)。

然后我們用這個新字段打印整行 $0。 我們設置字段分隔符和輸出字段分隔符。 -F: -v OFS=:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM