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

时间:2019-05-27 12:36:18

标签: awk text-processing

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

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[$0]=$0; next;} NR>FNR{if($5==a[$0])print $0}' 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行。希望这可以解决问题。如图所示,csv中的列用双引号引起来,应删除第五列周围的引号。

1 个答案:

答案 0 :(得分:1)

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

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