Busca padrão do usuário de entrada em um arquivo no Unix usando o awk

0

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

learner1
fonte

Respostas:

1

O que você faz é: você leu o padrão de tty, você coloca em uma variável do awk (não do shell) chamada input, então você combina a linha do conteúdo de um Concha variável chamada entrada. (Basta olhar para as aspas e tentar interpretar o código você mesmo.) Essa variável está vazia, então awk combina a 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 correspondência é imprimir o registro.

Gombai Sándor
fonte
Obrigado @ Sándor por classificar o erro. Eu estava puxando meu cabelo para isso. :)
learner1
Muito bem vindo. Eu posso imaginar. Às vezes, citando, até casos simples parecem mais difíceis, outras vezes faz eles mais difícil.
Gombai Sándor