Как отфильтровать только те строки, для которых все его поля удовлетворяют условию регулярного выражения - PullRequest
0 голосов
/ 22 декабря 2018

Я пытаюсь использовать условие в awk таким образом, чтобы отфильтровывать строки, для которых все его поля удовлетворяют условию регулярного выражения, за исключением циклического обхода полей по одному.Например, я хочу, чтобы в строках было только (да или нормально)

пример ввода:

yes yes yes no no ok nok
no yes yes whatever
yes yes ok
ok yes

пример вывода:

yes yes ok
ok yes

1 Ответ

0 голосов
/ 22 декабря 2018

Зависит от вашего разделителя, скажем, это пробел или табуляция, тогда вы можете сделать это:

awk '$0~/^((yes|ok)\s+)*(yes|ok)$/{print}' file

ps: \s - это функция GNU awk, вам может потребоваться изменить ее на [ \t]для другой версии.

И части $0~ и {print} фактически неявны, мы можем отбросить их, просто воспользовавшись этим:

awk '/^((yes|ok)\s+)*(yes|ok)$/' file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...