Aprenda a usar padrões especiais AWK 'Begin and End' - Parte 9
- 3748
- 158
- Leroy Lebsack
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
.
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:
- 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.
- 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:
- 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. - Em seguida, uma linha de entrada é lida e analisada nos diferentes campos.
- 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.
- Em seguida, os estágios 2 e 3 são repetidos para todas as linhas de entrada.
- 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.TXTVisualizar 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 0Awk 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.TXTScript 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.
- « Como trabalhar com grupos de pacotes DNF
- Como usar o comando 'find' para pesquisar vários nomes de arquivos (extensões) no Linux »