使用 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
中的每一行,如果数组中存在第五列,则删除它周围的引号并打印该行。
我有一个具有以下模式的文件。
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
中的每一行,如果数组中存在第五列,则删除它周围的引号并打印该行。