AWK: как сопоставить запятую - PullRequest
1 голос
/ 07 июля 2019

Я хочу вернуть строки из awk с шаблоном "C" или ". , C" или ". , C,. *".Например:

Действительный

C,G
G,C
G,C,A

Недействительный

G,CC

Мой код указан ниже:

 echo G,CC | awk '$0 ~ /^C,+.*|.*,C,*.*/ {print $0}'

Выход:

G,CC

Надеюсь, мне это ничего не вернет.К сожалению, мне возвращается «G, CC».

Как мне решить эту проблему?

Редактировать:

На основе ответов @Emma и @perreal.Для решения своего вопроса я использовал более короткую командную строку:

awk '$0 ~ /^C,.*|.*,C,.*|.*,C$/ {print $0}'

До сих пор это работало хорошо.Спасибо за вашу помощь !!

Ответы [ 5 ]

3 голосов
/ 07 июля 2019

Не могли бы вы попробовать следующее.

awk '!/CC/ && /^C,+.*|.*,C,*.*/'  Input_file
3 голосов
/ 07 июля 2019
  • + необязательно в ^C,+.*, поскольку вы уже сопоставляете запятую, а также соответствует тому, что следует после.

  • *сразу после второй запятой не правильно в .*,C,*.*.Это делает запятую необязательной, поэтому она также может соответствовать G,CC (.*, соответствует G, и C,* соответствует CC).

Это должно работать:

awk '$0 ~ /^[GCA](,[GCA])*$/ && /C/ {print $0}'
2 голосов
/ 07 июля 2019
$ awk '/(^|,)C(,|$)/' file
C,G
G,C
G,C,A
1 голос
/ 07 июля 2019

Больше альтернатив

Другими словами, вы хотите выбрать строки с "C" в качестве слова?Если да, то есть 2 решения:

grep -w C
grep -E '\<C\>'

Первое рекомендует grep соответствовать только целым словам.Во второй строке используются шаблоны начальных и конечных слов.Эти шаблоны также можно использовать с awk:

awk '/\<C\>/ {print}'

Совершенно другое решение (и другие формы ответов тоже) состоит в добавлении запятых на обоих концах перед сравнением ,C,:

awk '"," $0 "," ~ /,C,/ {print}
1 голос
/ 07 июля 2019

Я предполагаю, что, возможно, это также будет работать:

awk '$0 ~ /^([A-Z],C,[A-Z]|[A-Z],C|C,[A-Z])$/ {print $0}'

Демо

Советы

Мистер.Ранкин рекомендует:

Это эквивалентно awk '/^([A-Z],C,[A-Z]|[A-Z],C|C,[A-Z])$/'.Вывод с печатью является операцией по умолчанию вместе с сопоставлением с записью.

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