
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.