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

1 ответ1

1

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

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

$0 ~ input { print }

или же

match( $0, input) { print }

На самом деле «{print}» может быть опущено, потому что действие по умолчанию для любого соответствующего вопроса - это печать записи.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .