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?

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.


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.