Найдите точное соответствие в файле шаблонов для другого файла, используя awk (шаблоны содержат символы регулярного выражения, которые следует игнорировать) - PullRequest
0 голосов
/ 27 мая 2019

У меня есть файл со следующими шаблонами.

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

Они должны точно соответствовать 5-му столбцу целевого CSV. Я пробовал:

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

Но || в файле шаблонов приводит к плохим совпадениям. 5-й столбец в целевой CSV выглядит примерно так:

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

Мне нужно извлечь 3-ю и 4-ю строки. Редактировать: мне нужно точное совпадение, такое как строки 3 и 4. Надеюсь, это решит проблему. Столбцы в csv имеют двойные кавычки, как показано, и кавычки вокруг пятого столбца должны быть удалены.

1 Ответ

1 голос
/ 27 мая 2019
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, если в массиве существует пятый столбец, удалите кавычки вокруг него и напечатайте строку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...