Awk несколько поисковых терминов с переменной и отрицанием
У меня есть небольшой тестовый файл, содержащий:
awk this
and not awk this
but awk this
so do awk this
И я пробовал следующие команды awk, в bash, но каждая не выводит:
f=awk; awk '/$f/ && !/not/' test.txt
f=awk; awk '/\$f/ && !/not/' test.txt
f=awk; awk '/"$f"/ && !/not/' test.txt
f=awk; awk -v f="$f" '/f/ && !/not/' gtest.txt
Использование двойных кавычек "
выдает ошибку "событие не найдено" в оболочке из-за !
,
Как я могу искать переменную и отменять другую строку в той же команде?
2 ответа
Решение
Использование awk
как это:
f='awk'
awk -v f="$f" -v n='not' '$0 ~ f && $0 !~ n' file
awk this
but awk this
so do awk this
Или если вы не хотите проходить n='not'
в awk
:
awk -v f="$f" '$0 ~ f && $0 !~ /not/' file
awk this
but awk this
so do awk this
awk указывает на gawk для меня, и следующее работает просто отлично:
awk -vf=awk '$0 ~ f && !/not/' file