Печать строки на основе шаблона

#awk #grep

#awk #grep

Вопрос:

У меня есть данные в формате

 A  ((!(A1 A2)))
B  (A1A2)
C  (A1 A2)
D  (!(A1 A2)B1)
E  (!A1 !A2)
F  ((A1 A2) A3 A4)
G  ((A1A2) (A3A4))
 

Я хочу выводить как

 C  (A1 A2)
F  ((A1 A2) A3 A4)
G  ((A1A2) (A3A4))

 

Я хочу получить ту строку, которая имеет только

Я использовал

 awk -F' ' '$2 ~ / /' file
 

Но это список всех строк, в которых есть ! вместе с ними

Ответ №1:

Вы должны добавить еще 1 условие в свой код, как показано ниже. Вы уже проверяете, есть ли в нем 2-е поле , добавьте дополнительную проверку, если ее ! тоже НЕТ, и тогда вы должны получить ожидаемый результат.

 awk '$2!~/!/ amp;amp; $2~/ /'  Input_file
 

Также вам не нужно использовать -F' ' option, потому что по умолчанию сам awk использует пробел в качестве разделителя полей для всех строк, поэтому я удалил его из предлагаемого кода.

Ответ №2:

Вы также можете попробовать этот awk, который допускает только другие ( , ) , _ и буквенно-цифровые символы:

 awk '$2 ~ /^[()_[:alnum:]]  [() _[:alnum:]] $/' file

C  (A1 A2)
F  ((A1 A2) A3 A4)
G  ((A1A2) (A3A4))