Pesquisa padrão da entrada do usuário em um arquivo no Unix usando awk

Pesquisa padrão da entrada do usuário em um arquivo no Unix usando awk

Estou tentando escrever um script awk para procurar um padrão que é fornecido pelo usuário em um arquivo.
Meu código é assim:
awk 'BEGIN{printf "Enter : ";getline input<"/dev/tty"} /'"$input"'/ {print}' <abc.txt
O que recebo como saída é o arquivo inteiro. Alguém pode me ajudar a descobrir onde estou errando?

Responder1

O que você faz é: você lê o padrão de tty, coloca-o em uma variável do awk (não do shell) chamada input, então combina a linha do conteúdo de umconchavariável chamada entrada. (Basta olhar as aspas e tentar interpretar o código você mesmo.) Essa variável está vazia, então awk corresponde à linha com //, um regexp vazio que sempre corresponde.

Tudo que você precisa fazer é

$0 ~ input { print }

ou

match( $0, input) { print }

Na verdade, "{print}" pode ser omitido porque a ação padrão para qualquer caso correspondente é imprimir o registro.

informação relacionada