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