使用 awk 从一个模式文件中找到另一个文件的完全匹配(模式包含要忽略的正则表达式符号)

Find an exact match from a patterns file for another file using awk (patterns contain regex symbols to be ignored)

我有一个具有以下模式的文件。

NO_MATCH
NO_MATCH||NO_MATCH
NO_MATCH||NO_MATCH||NO_MATCH
NO_MATCH||NO_MATCH||NO_MATCH||NO_MATCH

这些应该与目标 csv 的第 5 列完全匹配。我试过:

awk 'NR==FNR{a[[=11=]]=[=11=]; next;} NR>FNR{if(==a[[=11=]])print [=11=]}' pattern.csv input.csv > final_out.csv

但是模式文件中的 || 会导致错误匹配。目标 csv 中的第 5 列如下所示:

"AAAA||AAAA"
"BBBB||BBBB"
"NO_MATCH"
"NO_MATCH||NO_MATCH||NO_MATCH"
"NO_MATCH||BBBB"

我需要提取第 3 行和第 4 行。 编辑:我需要完全匹配,例如第 3 行和第 4 行。希望这可以解决问题。如图所示,csv 中的列被双引号括起来,第五列周围的引号应该被删除。

awk 'BEGIN{FS=OFS=","} NR==FNR{a["\""[=10=]"\""];next} ( in a){gsub(/^"|"$/,"",);print}' pattern.csv input.csv > final_out.csv

pattern.csv 的内容保存在一个数组中,并用引号将每一行括起来。对于 input.csv 中的每一行,如果数组中存在第五列,则删除它周围的引号并打印该行。