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