15 comandos interessantes do awk
Este artigo mostrará alguns comandos interessantes do awk e quando usá-los. Continue lendo para descobrir!
Introdução ao awk
AWK é uma linguagem popular em UNIX e Linux. Recebeu o nome de seus autores: Alfred Aho, Peter Weinberger e Brian Kernighan. O comando awk permite o acesso à linguagem de programação AWK, projetada para processar dados em fluxos de texto.
Popularmente usado para escanear padrões e simplificar operações complexas, o awk ajuda você a escrever instruções eficazes para definir padrões de texto em um arquivo. O comando awk processa essas instruções lendo uma linha por vez e executa uma ação com base na condição fornecida.
Simplificando, o awk localiza e substitui o texto e ajuda a classificar, validar ou indexar os dados fornecidos.
Características do AWK
O awk vem com muitos recursos exclusivos:
-
Nenhuma compilação é necessária em awk
Frequentemente usado para extração de dados
Comumente usado para realizar manipulação de texto
Ajuda a gerar resultados conforme necessário.
Agora vamos explorar o poder dos comandos awk.
15 comandos interessantes do awk
Aqui está uma lista compilada de alguns comandos awk interessantes:
Imprimindo números aleatórios em um conjunto – Suponha que você queira imprimir alguns números aleatórios de um pool selecionado. Você pode especificar a quantidade de números aleatórios deste pool e pedir ao awk para imprimir isso. Veja um exemplo: vamos imprimir 10 números de 0 a 1000. Então o comando awk para isso será o seguinte:
awk 'BEGIN { for (i = 1; i <= 10; i++)
print int(1001 * rand()) }'
Procurando por foo ou bar – E se você quiser escrever uma linha na qual deseja realizar uma pesquisa simples por foo ou bar? Aqui está um comando que permitirá que você faça exatamente isso:
if (/foo/ || /bar/)
print "Found!"
Reorganizando um campo – Se você deseja imprimir um campo específico em uma ordem específica, o awk pode fazer isso por você. Suponha que você queira imprimir os 5 primeiros campos de um determinado conjunto em um campo por linha, você pode usar o seguinte comando:
awk ’{ i = 1
while (i <= 3) {
print $i
i++
}
}’ inputfile
Dividindo uma linha – Em qualquer conjunto de arquivos, o awk pode ajudar a dividir uma linha em campos, onde x é o nome do campo:
$ awk '{print $x,$x}'xyz.txt
-
Executando vários comandos ao mesmo tempo – Para executar vários comandos ao mesmo tempo, você pode usar um ponto-e-vírgula para especificar ambos os comandos:
$ echo "Good morning! Jack" | awk '{$2="Jill"; print $0}'
Executando um script awk – Se você deseja executar um script awk de um arquivo específico, pode criar um arquivo sum_column e colar o script abaixo nesse arquivo:
#!/usr/bin/awk -f
BEGIN {sum=0}
{sum=sum+$x}
END {print sum}No script acima, x é igual à coluna que você precisa inserir no arquivo. Após a conclusão bem-sucedida desta tarefa, você pode usar o seguinte comando para exibir a soma da coluna x no arquivo de entrada:
awk -f sum_column input_file.
Usando –f – Ao codificar, muitas vezes pode parecer impraticável referir-se ao terminal. awk usa –f para realizar a pesquisa de um arquivo:
awk -f script.awk inputfile
Realizando funções matemáticas – Você também pode usar o awk para funções matemáticas simples:
awk ’{ sum = $2 + $3 + $4 ; avg = sum / 3
> print $1, avg }’ grades
Hello World em awk – Você pode imprimir um Hello World simples em awk usando o seguinte comando:
awk "BEGIN { print "Hello World!!" }"Você também pode criar um programa Hello World. O código a seguir não apenas imprimirá a onipresente mensagem de saudação, mas também gerará informações de cabeçalho:
$ awk 'BEGIN { print "Hello World!" }'
Imprimindo o número total de bytes – Você pode descobrir o total de bytes usados pelos arquivos usando o seguinte comando:
ls -l . | awk '{ x += $5 } ; END \
{ print "total bytes: " x }'
total bytes: 7449362
Anonymizing an Apache log – Você pode usar o seguinte código para anonimizar um log Apache:
cat apache-anon-noadmin.log | \
awk 'function ri(n) \
{ return int(n*rand()); } \
BEGIN { srand(); } { if (! \
($5 in jack)) { \
jack[$5] = sprintf("%d.%d.%d.%d", \
ri(255), ri(255)\
, ri(255), ri(255)); } \
$5 = jack[$5]; print __g5_token5b610ba53dbe4 }'
Operando em linhas – Se você tiver um endereço que gostaria de classificar em linhas, poderá fazê-lo usando o seguinte comando:
BEGIN { RS = "" ; FS = "\n" }
{
print "Name is:", $1
print "Address is:", $2
print "City and State are:", $3
print ""
}
-
Usando o loop while – O loop while continua executando a ação dada a ele em um processo repetido até que a condição seja verdadeira. Por exemplo, para imprimir números de 1 a 100, você pode usar o seguinte código:
awk 'BEGIN {i = 1; while (i < 100) { print i; ++i } }'
Usando o loop do-while – Nesse loop, a condição é executada no final do loop, mesmo que a instrução seja falsa. Por exemplo, para imprimir números de 1 a 100 usando um loop do-while, você pode usar o seguinte código:
awk 'BEGIN {i = 1; do { print i; ++i } while (i < 100) }'
Usando BEGIN e END – A palavra-chave BEGIN é usada para criar um cabeçalho para processar seu registro:
$ awk 'BEGIN {print "XXX"}Da mesma forma, a palavra-chave END é usada após o processamento dos dados:
END {print "File footer"}'