Поиск шаблона пользовательского ввода в файле в Unix с помощью awk

Поиск шаблона пользовательского ввода в файле в Unix с помощью awk

Я пытаюсь написать скрипт awk для поиска шаблона, который вводит пользователь, в файле.
Мой код выглядит так:
awk 'BEGIN{printf "Enter : ";getline input<"/dev/tty"} /'"$input"'/ {print}' <abc.txt
То, что я получаю на выходе, — это весь файл. Может кто-нибудь помочь мне найти, где я ошибаюсь?

решение1

Что вы делаете: вы считываете шаблон с tty, помещаете его в переменную awk (не оболочки), называемую input, затем вы сопоставляете строку содержимогооболочкапеременная с именем input. (Просто посмотрите на кавычки и попробуйте интерпретировать код самостоятельно.) Эта переменная пуста, поэтому awk сопоставляет строку с //, пустым регулярным выражением, которое всегда соответствует.

Все, что вам нужно сделать, это

$0 ~ input { print }

или

match( $0, input) { print }

На самом деле "{print}" можно опустить, поскольку действием по умолчанию для любого сопоставления является печать записи.

Связанный контент