
Awk: aprendendo scripts de shell usando o comando de terminal awk
O comando "awk" em Sistemas Operacionais Livres do tipo GNU / Linux é um comando muito poderoso, que nos ajuda a ter um maior controle no processamento de dados de outros comandos ou comandos de comando. O nome AWK deriva das iniciais dos sobrenomes de seus autores: Alfred Aho, peter Weinberger e Brian KErnighan.
Este comando fornece uma linguagem de script para processamento de texto com a qual podemos: Definir variáveis, usar strings e operadores aritméticos, usar controle de fluxo e ciclos e gerar relatórios formatados. Na verdade, Awk é mais do que apenas um comando de processamento de padrões, é uma linguagem de análise semântica completa.
Introdução ao comando "awk"
AWK foi um dos primeiros utilitários de console muito populares a gerenciar (manipular / extrair) dados maximizando a funcionalidade dos canais UNIX. A linguagem fornecida por este utilitário é atualmente um padrão em quase todos os sistemas operacionais do tipo UNIX modernos, tanto que faz parte das especificações básicas do UNIX, portanto, geralmente já está instalado na maioria deles por padrão.
Sua sintaxe mais comum é: awk 'programas' arquivos e onde 'programa' pode ser: padrão {ação} padrão {ação}. O comando lê a entrada do arquivo uma linha por vez. Cada linha é comparada a cada padrão em ordem; Para cada padrão que corresponde à linha, a ação correspondente é executada.
Um exemplo simples como:
awk -F: '$1=="root" {print}' /etc/passwd
ele pergunta pelo primeiro campo se ele é a raiz de cada linha em / etc / passwd e o imprime considerando o ":" com -F: como um separador de campo.
Exemplos práticos
Lista de comandos mais usados
Visualize uma lista com base no histórico do terminal do sistema ordenado do mais usado para o menos usado.
history | awk '{a[$2]++}END{for(i in a){print a[i] " " i}}' | sort -rn | head
Exemplo:
Gráfico (Tabela) com número de conexões para cada host
Crie um gráfico baseado em texto ASCII que mostra o número total de conexões do host para cada endereço IP.
netstat -an | grep ESTABLISHED | awk '{print $5}' | awk -F: '{print $1}' | sort | uniq -c | awk '{ printf("%s\t%s\t",$2,$1) ; for (i = 0; i < $1; i++) {printf("*")}; print "" }'
Exemplo:
Lista de diretórios por tamanho
Imprime na tela a lista de diretórios do caminho atual do maior para o menor exibindo os rótulos correspondentes ao seu tamanho usando as letras: g, m e k.
du --max-depth=1 | sort -r -n | awk '{split("k m g",v); s=1; while($1>1024){$1/=1024; s++} print int($1)" "v[s]"\t"$2}'
Exemplo:
Mostrar o tráfego de uma interface de rede
Visualize o consumo de dados de entrada e saída online em kilobytes (kb) para uma interface de rede especificada.
while [ /bin/true ]; do OLD=$NEW; NEW=`cat /proc/net/dev | grep eth0 | tr -s ' ' | cut -d' ' -f "3 11"`; echo $NEW $OLD | awk '{printf("\rin: % 9.2g\t\tout: % 9.2g", ($1-$3)/1024, ($2-$4)/1024)}'; sleep 1; done
Exemplo:
Obtenha uma série de números de Fibonacci
Crie uma lista de números de quantidade X seguindo um padrão de fibonacci com 2 números de base a serem construídos.
seq 50| awk 'BEGIN {a=1; b=1} {print a; c=a+b; a=b; b=c}'
Exemplo:
Lista gráfica da estrutura do arquivo por tamanho
Obtenha uma lista de todas as pastas na raiz do sistema operacional junto com o gráfico (barras) e a representação numérica como uma porcentagem de seu tamanho dentro dela.
t=$(df|awk 'NR!=1{sum+=$2}END{print sum}');sudo du / --max-depth=1|sed '$d'|sort -rn -k1 | awk -v t=$t 'OFMT="%d" {M=64; for (a=0;a<$1;a++){if (a>c){c=a}}br=a/c;b=M*br;for(x=0;x<b;x++){printf "\033[1;31m" "|" "\033[0m"}print " "$2" "(a/t*100)"% total"}'
Exemplo:
Liste um resumo dos tipos de arquivo em um diretório
Mostra uma lista dos tipos de arquivos contidos em um diretório junto com o número de arquivos que correspondem a ele.
find . -type f | awk -F'.' '{print $NF}' | sort| uniq -c | sort -g
Exemplo:
Esses exemplos de linhas de comando usando o comando awk Espero que sejam muito úteis. E servem para serem usados diretamente do console ou indiretamente inserindo-os em um script (tarefa automatizada).
Na próxima postagem sobre Shell Scripting, exploraremos outros comandos.
Se você quiser aprender um pouco mais sobre o comando "grep", visite este link "DEBIAN Wiki”E se você quiser aprender mais sobre Shell Scripting em nosso próprio Blog, você pode conferir nossas outras publicações sobre o assunto, clicando aqui: Scripting em FromLinux
Eu só entendi o primeiro exemplo, nada mais 🙁