Pesquisa de site

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:

  1. Nenhuma compilação é necessária em awk

  2. Frequentemente usado para extração de dados

  3. Comumente usado para realizar manipulação de texto

  4. 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:

  1. 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()) }'
  1. 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!"
  1. 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
  1. 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
  1. 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}'
  1. 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.
  1. 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
  1. 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
  1. 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!" }'
  1. 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
  1. 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  }'
  1. 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 ""
    }
  1. 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 } }'
  1. 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) }'
  1. 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"}'

Artigos relacionados: