Как использовать Awk для фильтрации строк, используя значение столбца в двойных кавычках - PullRequest
0 голосов
/ 17 мая 2018
"A","B",123,"C","AAB"
"A","BB",234,"CC","BA"
"AA","B",123,"CC","CBB"
"AA","BB",213,"C","CCA"

Я хочу получить те строки, где $ 1 == AA

 awk 'BEGIN { FS = ","; OFS = FS;} {if ($1=="AA") print}'

, но это не работает.Это работает, если данные не в двойных кавычках.

Ответы [ 2 ]

0 голосов
/ 17 мая 2018

Просто сопоставьте литерал " с escape-символом. Это прямой фильтр , который соответствует литералу "AA" в первом столбце. Поскольку awk работает на pattern { action } основе, соответствие условия, чтобы увидеть, является ли первый столбец "AA", может быть выполнено напрямую, без необходимости использования явного { print }

Если условие выполняется для этой строки, awk остается с условием как awk 1 file, в этом случае строка печатается.

awk -v FS=, '$1=="\"AA\""' file

Кроме того, вы можете избежать побегов, поместив строку совпадения в переменную в одинарные кавычки и позволив ей соответствовать переменной

awk -v FS=, -v m='"AA"' '$1==m' file
0 голосов
/ 17 мая 2018

После awk может помочь вам в том же.

awk -F, '{val=$1;gsub(/\"/,"",val)} val=="AA"'  Input_file

Решение 2-е:

awk -F"[\",]" '$2=="AA"'  Input_file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...