#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))