Pesquisa de site

Como permitir que o Awk use variáveis do Shell - Parte 11


Quando escrevemos scripts de shell, normalmente incluímos outros programas ou comandos menores, como operações Awk em nossos scripts. No caso do Awk, temos que encontrar maneiras de passar alguns valores do shell para as operações do Awk.

Isso pode ser feito usando variáveis shell dentro dos comandos do Awk e, nesta parte da série, aprenderemos como permitir que o Awk use variáveis shell que podem conter valores que queremos passar para os comandos do Awk.

Existem possivelmente duas maneiras de permitir que o Awk use variáveis shell:

1. Usando cotação de shell

Vamos dar uma olhada em um exemplo para ilustrar como você pode realmente usar aspas do shell para substituir o valor de uma variável do shell em um comando do Awk. Neste exemplo, queremos procurar um nome de usuário no arquivo /etc/passwd, filtrar e imprimir as informações da conta do usuário.

Portanto, podemos escrever um script test.sh com o seguinte conteúdo:

#!/bin/bash

#read user input
read -p "Please enter username:" username

#search for username in /etc/passwd file and print details on the screen
cat /etc/passwd | awk "/$username/ "' { print $0 }'

Depois disso, salve o arquivo e saia.

Interpretação do comando Awk no script test.sh acima:

cat /etc/passwd | awk "/$username/ "' { print $0 }'

"/$username/ " – aspas do shell usadas para substituir o valor da variável shell username no comando Awk. O valor de username é o padrão a ser pesquisado no arquivo /etc/passwd.

Observe que as aspas duplas estão fora do script Awk, ‘{ print $0 }’.

Em seguida, torne o script executável e execute-o da seguinte maneira:

chmod  +x  test.sh
./text.sh 

Depois de executar o script, você será solicitado a inserir um nome de usuário, digite um nome de usuário válido e pressione Enter. Você verá os detalhes da conta do usuário no arquivo /etc/passwd conforme abaixo:

2. Usando a atribuição de variáveis do Awk

Este método é muito mais simples e melhor em comparação ao método acima. Considerando o exemplo acima, podemos executar um comando simples para realizar o trabalho. Neste método, usamos a opção -v para atribuir uma variável shell a uma variável Awk.

Primeiramente, crie uma variável shell, username e atribua a ela o nome que queremos pesquisar no arquivo /etc/passswd:

username="aaronkilik"

Em seguida, digite o comando abaixo e pressione Enter:

cat /etc/passwd | awk -v name="$username" ' $0 ~ name {print $0}'

Explicação do comando acima:

  1. -v – Opção Awk para declarar uma variável
  2. nome de usuário – é a variável do shell
  3. nome – é a variável Awk

Vamos dar uma olhada cuidadosa em $0 ~ name dentro do script Awk, ' $0 ~ name {print $0}'. Lembre-se, quando abordamos os operadores de comparação do Awk na Parte 4 desta série, um dos operadores de comparação era o valor ~ padrão, que significa: verdadeiro se o valor corresponder ao padrão.

O output($0) do comando cat canalizado para o Awk corresponde ao padrão (aaronkilik) que é o nome que estamos procurando em /etc/passwd , como resultado, a operação de comparação é verdadeira. A linha contendo as informações da conta do usuário é então impressa na tela.

Conclusão

Cobrimos uma seção importante dos recursos do Awk, que podem nos ajudar a usar variáveis shell dentro dos comandos do Awk. Muitas vezes, você escreverá pequenos programas ou comandos Awk em scripts de shell e, portanto, precisará ter um entendimento claro de como usar variáveis de shell em comandos do Awk.

Na próxima parte da série Awk, mergulharemos em outra seção crítica dos recursos do Awk, que são as instruções de controle de fluxo. Então fique ligado e vamos continuar aprendendo e compartilhando.