繁体   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