AWK - Manipulação de arquivos de texto

Nesse artigo quero mostrar como trabalhar com manipulação de arquivos de texto. Para isso vou utilizar uma linguagem desenvolvida especificamente para esse tipo de trabalho. Essa linguagem é a AWK, ela foi criada em 1977 pelos cientistas Alfred Aho, Peter J. Weinberger e Brian Kernighan no laboratório Bell Labs.

[ Hits: 15.723 ]

Por: Paulo Dias em 03/03/2015 | Blog: http://naotenhosite.eu.nao.tenho


Em forma de script



O exemplo anterior já ficou bem grande, e obviamente, quanto mais complexo, maior o comando. Para facilitar a escrita e a legibilidade, é possível utilizar a AWK em forma de script, para isso, basta criar um arquivo que inicie com a linha "#!/usr/bin/awk -f" e escrever os comandos nas linhas seguintes.

O exemplo anterior escrito em forma de script fica assim:

#!/usr/bin/awk  -f

BEGIN {
        FS=":";
}

{
     if( $7 == "/bin/bash") {
        printf "%s usa o shell %s \n", $1, $7;
        total++;
     }
}

END {
     printf "Total de registros %d \n", total
}

Nesse exemplo foi utilizada a variável padrão FS no lugar no parâmetro "-F". Nessa variável é armazenado o delimitador que será utilizado no script, ela deve ser definida no bloco BEGIN.

Para executar esse script, é necessário que o arquivo tenha permissão de execução. O comando chmod +x teste.awk marca o script com permissão de execução para todos os usuários. Para executar basta escrever no terminal:

./teste.awk $HOME/passwd

Seguindo com os exemplos, agora vou mostrar apenas as linhas onde o login tenha menos de 4 letras:

#!/usr/bin/awk  -f

BEGIN {
        FS=":";
}

{
     if( length( $1 ) < 4) {
        printf "%s \n", $1;
        total++;
     }
}

END {
     printf "Total de registros %d \n", total
}

Nesse exemplo utilizei a função "length", que retorna o tamanho de uma string. Veja outras funções do AWK:
  • index( s1, s2 ) - retorna a posição da string s1 na string s2
  • gsub( sO, sS, s ) - substitui a string original sO pela a string substituta sS na string s
  • length( s ) - retorna o tamanho da string s
  • split( s, v, d ) - quebra a string s usando o delimitador d e coloca no vetor v
  • substr( s, i, f ) - retorna a parte da string s que inicia na posição i e termina na posição f

AWK também têm funções para trabalhar com números, alguma delas são:
  • sqrt( n ) - raiz quadrada
  • sen( n ) - seno
  • cos( n ) - cosseno
  • int( n ) - a parte inteira de n

No próximo exemplo, vou redirecionar a saída para um arquivo e vou alterar o shell de todos os usuários que usam o /bin/sh para o /bin/bash, afinal, o bash é o melhor. :)

#!/usr/bin/awk  -f

BEGIN {
        FS=":";
}

{
     if( $7 == "/bin/sh") $7 = "/bin/bash";

     for( i = 1; i < 8; i++ ) printf "%s:", $i  >> "bkp";

     print "" >> "bkp"; #pra quebrar a linha
}

Obs. 1: a AWK também possui uma instrução while, que assim como o for tem uma sintaxe idêntica a do C.

Obs. 2: os comentários em AWK são feitos com #.

O exemplo anterior, foi escrito ao estilo C propositalmente, para mostrar como utilizar a instrução for... O jeito AWK de fazer isso é utilizando a função gsub, veja:

#!/usr/bin/awk  -f
{
    gsub( "/bin/sh", "/bin/bash", $0 )

    print $0 > "bkp"
}

Bem melhor, não acham?

Conclusão

Pessoal, por agora é isso.

Tem muito mais para mostrar sobre o AWK, mas espero que isso seja o suficiente para ajudar alguém.

Artigo também publicado em:
Página anterior    

Páginas do artigo
   1. Em forma de comando
   2. Em forma de script
Outros artigos deste autor

JavaScript - Programação orientada a objetos

Zoneminder: Substituindo um Unifi NVR

MathML - Mathematical Markup Language

Como criar um box para o Vagrant

Programação com Shell Script

Leitura recomendada

O que é Shell Script

Pipelines (Canalizadores)

Explorando a entrada de dados com READ em Bash Shell

Mostrando dicas ao iniciar o terminal

Variáveis, if, else e unless em Ruby

  
Comentários
[1] Comentário enviado por fabio em 03/03/2015 - 13:24h

Muito bom artigo, meus parabéns!

[2] Comentário enviado por sk4d1nh4 em 03/03/2015 - 15:06h

Sou da área de infra e sempre que preciso criar alguma coisa com códigos recorro a esse tipo de artigo pra dar um "help".
Muito bom. Parabéns!


[3] Comentário enviado por junior em 04/03/2015 - 16:27h

Quanto Deus criou o mundo, ele usou alguns truques de AWK e SED.
Certeza.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts