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.