AWK - Exemplos Básicos

Este capítulo descreve vários comandos AWK úteis e seus exemplos apropriados. Considere um arquivo de textomarks.txt a ser processado com o seguinte conteúdo -

1) Amit     Physics   80
2) Rahul    Maths     90
3) Shyam    Biology   87
4) Kedar    English   85
5) Hari     History   89

Imprimindo coluna ou campo

Você pode instruir AWK a imprimir apenas algumas colunas do campo de entrada. O exemplo a seguir demonstra isso -

Exemplo

[jerry]$ awk '{print $3 "\t" $4}' marks.txt

Ao executar este código, você obtém o seguinte resultado -

Resultado

Physics   80
Maths     90
Biology   87
English   85
History   89

No arquivo marks.txt, a terceira coluna contém o nome do assunto e a quarta coluna contém as notas obtidas em um determinado assunto. Vamos imprimir essas duas colunas usando o comando de impressão AWK. No exemplo acima,$3 and $4 representam o terceiro e o quarto campos, respectivamente, do registro de entrada.

Imprimindo todas as linhas

Por padrão, AWK imprime todas as linhas que correspondem ao padrão.

Exemplo

[jerry]$ awk '/a/ {print $0}' marks.txt

Ao executar este código, você obtém o seguinte resultado -

Resultado

2) Rahul    Maths     90
3) Shyam    Biology   87
4) Kedar    English   85
5) Hari     History   89

No exemplo acima, estamos pesquisando o padrão de formulário a. Quando uma correspondência de padrão é bem-sucedida, ele executa um comando do bloco do corpo. Na ausência de um bloco de corpo - a ação padrão é executada, que é imprimir o registro. Portanto, o seguinte comando produz o mesmo resultado -

Exemplo

[jerry]$ awk '/a/' marks.txt

Impressão de colunas por padrão

Quando uma correspondência de padrão é bem-sucedida, AWK imprime todo o registro por padrão. Mas você pode instruir o AWK a imprimir apenas alguns campos. Por exemplo, o exemplo a seguir imprime o terceiro e o quarto campos quando uma correspondência de padrão é bem-sucedida.

Exemplo

[jerry]$ awk '/a/ {print $3 "\t" $4}' marks.txt

Ao executar este código, você obtém o seguinte resultado -

Resultado

Maths    90
Biology  87
English  85
History  89

Impressão de coluna em qualquer ordem

Você pode imprimir colunas em qualquer ordem. Por exemplo, o exemplo a seguir imprime a quarta coluna seguida pela terceira coluna.

Exemplo

[jerry]$ awk '/a/ {print $4 "\t" $3}' marks.txt

Ao executar o código acima, você obtém o seguinte resultado -

Resultado

90   Maths
87   Biology
85   English
89   History

Contagem e impressão de padrão correspondente

Vamos ver um exemplo onde você pode contar e imprimir o número de linhas para as quais uma correspondência de padrão foi bem-sucedida.

Exemplo

[jerry]$ awk '/a/{++cnt} END {print "Count = ", cnt}' marks.txt

Ao executar este código, você obtém o seguinte resultado -

Resultado

Count = 4

Neste exemplo, incrementamos o valor do contador quando uma correspondência de padrão é bem-sucedida e imprimimos esse valor no bloco END. Observe que, ao contrário de outras linguagens de programação, não há necessidade de declarar uma variável antes de usá-la.

Imprimindo linhas com mais de 18 caracteres

Vamos imprimir apenas as linhas que contêm mais de 18 caracteres.

Exemplo

[jerry]$ awk 'length($0) > 18' marks.txt

Ao executar este código, você obtém o seguinte resultado -

Resultado

3) Shyam   Biology   87
4) Kedar   English   85

AWK fornece um built-in length função que retorna o comprimento da string. $0variável armazena a linha inteira e na ausência de um bloco de corpo, a ação padrão é executada, ou seja, a ação de impressão. Portanto, se uma linha tiver mais de 18 caracteres, a comparação resulta verdadeira e a linha é impressa.