Aprenda a usar padrões especiais AWK 'Begin and End' - Parte 9

Aprenda a usar padrões especiais AWK 'Begin and End' - Parte 9

Em Parte 8 Dessa série AWK, apresentamos alguns poderosos recursos de comando AWK, que são variáveis, expressões numéricas e operadores de atribuição.

À medida que avançamos, neste segmento, abordaremos mais Awk Recursos, e esses são os padrões especiais: COMEÇAR e FIM.

Aprenda padrões estranhos começam e terminam

Esses recursos especiais serão úteis à medida que tentamos expandir e explorar mais métodos de construção do complexo Awk operações.

Para começar, vamos levar nossos pensamentos de volta à introdução do Awk Série, lembre -se de quando começamos esta série, apontei que a sintaxe geral de uma corrida de um Awk O comando é:

# nomes de arquivos de 'script' awk 

E na sintaxe acima, o Awk O script tem o formulário:

/ padrão/ ações 

Quando você considera o padrão no script, normalmente é uma expressão regular, além disso, você também pode pensar em padrão como padrões especiais COMEÇAR e FIM. Portanto, também podemos escrever um Awk comando no formulário abaixo:

awk 'begin ações / padrony / ações / padrão / ações… . Fim ações 'nomes de arquivos 

No caso de você usar os padrões especiais: COMEÇAR e FIM em um Awk Script, é isso que cada um deles significa:

  1. Começar o padrão: significa que a AWK executará as ações especificadas em COMEÇAR uma vez antes de qualquer linha de entrada ser lida.
  2. Padrão final: significa que a AWK executará as ações especificadas em FIM Antes de realmente sair.

E o fluxo de execução de um Awk O script de comando que contém esses padrões especiais é o seguinte:

  1. Quando o COMEÇAR O padrão é usado em um script, todas as ações para COMEÇAR são executados uma vez antes de qualquer linha de entrada ser lida.
  2. Em seguida, uma linha de entrada é lida e analisada nos diferentes campos.
  3. Em seguida, cada um dos padrões não especiais especificados é comparado com a linha de entrada para uma correspondência, quando uma correspondência é encontrada, as ações para esse padrão são executadas. Este estágio será repetido para todos os padrões que você especificou.
  4. Em seguida, os estágios 2 e 3 são repetidos para todas as linhas de entrada.
  5. Quando todas as linhas de entrada são lidas e tratadas, caso você especifique o FIM padrão, as ações serão executadas.

Você sempre deve se lembrar dessa sequência de execução ao trabalhar com os padrões especiais para alcançar os melhores resultados em um Awk Operação.

Para entender tudo, vamos ilustrar usando o exemplo da Parte 8, sobre a lista de domínios de propriedade de Tecmint, conforme armazenado em um arquivo chamado domínios.TXT.

notícias.Tecmint.com Tecmint.com Linuxsay.com janelas.Tecmint.com Tecmint.com notícias.Tecmint.com Tecmint.com Linuxsay.com Tecmint.com notícias.Tecmint.com Tecmint.com Linuxsay.com janelas.Tecmint.com Tecmint.com 
$ cat ~/domínios.TXT 
Visualizar o conteúdo do arquivo

Neste exemplo, queremos contar o número de vezes o domínio Tecmint.com está listado no arquivo domínios.TXT. Por isso, escrevemos um pequeno script de shell para nos ajudar a fazer isso usando a idéia de variáveis, expressões numéricas e operadores de atribuição, que possui o seguinte conteúdo:

#!/BIN/BASH para arquivo em [email protegido]; faça se [-f $ arquivo]; Em seguida, o arquivo #print out filename echo "é: $ arquivo" #print um número incrementalmente para cada linha que contém o tecmint.com Awk '/^Tecmint.com/ contador+= 1; printf "%s \ n", contador;  '$ arquivo else #Print Error Info Incase A entrada não é um arquivo de eco "$ não é um arquivo, especifique um arquivo."> & 2 && Sair 1 fi feito #script de terminação com o código de saída 0 no caso de saída de execução bem -sucedida 0 

Vamos agora empregar os dois padrões especiais: COMEÇAR e FIM no Awk comando no script acima da seguinte forma:

Vamos alterar o script:

Awk '/^Tecmint.com/ contador+= 1; printf "%s \ n", contador;  '$ arquivo 

Para:

estranho COMEÇAR print "O número de vezes Tecmint.com aparece no arquivo é: "; /^Tecmint.com/ contador+= 1;  FIM printf "%s \ n", contador;  '$ arquivo 

Depois de fazer as alterações no Awk Comando, o script completo do shell agora se parece com o seguinte:

#!/BIN/BASH para arquivo em [email protegido]; faça se [-f $ arquivo]; Então #Print Out FileName Echo "O arquivo é: $ arquivo" #Print O número total de vezes Tecmint.com aparece no arquivo Awk ' COMEÇAR print "O número de vezes Tecmint.com aparece no arquivo é: "; /^Tecmint.com/ contador+= 1;  FIM printf "%s \ n", contador;  '$ arquivo else #Print Error Info Incase A entrada não é um arquivo de eco "$ não é um arquivo, especifique um arquivo."> & 2 && Sair 1 fi feito #script de terminação com o código de saída 0 no caso de saída de execução bem -sucedida 0 
Awk Begin and End Patterns

Quando executamos o script acima, ele será primeiro imprimirá a localização do arquivo domínios.TXT, então o Awk O script de comando é executado, onde o COMEÇAR padrão especial nos ajuda a imprimir a mensagem “O número de vezes Tecmint.com aparece no arquivo é:”Antes de qualquer linha de entrada ser lida no arquivo.

Então nosso padrão, /^Tecmint.coma é comparado com cada linha de entrada e a ação, contador+= 1; é executado para cada linha de entrada, que conta o número de vezes Tecmint.com aparece no arquivo.

finalmente, o FIM padrão imprimirá o total do número de vezes o domínio Tecmint.com aparece no arquivo.

$ ./roteiro.sh ~/domínios.TXT 
Script para contar o número de vezes a string aparece

Para concluir, passamos por mais Awk Recursos explorando os conceitos de padrão especial: COMEÇAR e FIM.

Como eu apontei antes, esses recursos AWK nos ajudarão a criar operações de filtragem de texto mais complexas, há mais para cobrir Awk recursos e in Parte 10, Abordaremos a idéia de variáveis ​​embutidas awk, então fique conectado.