Como dividir um arquivo de strings com Awk
O comando awk do Linux (abreviado pelos nomes dos desenvolvedores; Aho, Weinberger e Kernighan) é uma ótima maneira de processar e analisar um arquivo de strings. Para que os arquivos sejam mais informativos, eles devem ser organizados na forma de linhas e colunas. Então, você pode usar o awk nesses arquivos para:
Examine os arquivos, linha por linha.
Divida cada linha em campos/colunas.
Especifique padrões e compare as linhas do arquivo com esses padrões
Execute várias ações nas linhas que correspondem a um determinado padrão
Neste artigo, explicaremos o uso básico do comando awk e como ele pode ser usado para dividir um arquivo de strings. Executamos os exemplos deste artigo em um sistema Debian 10 Buster, mas eles podem ser facilmente replicados na maioria das distribuições Linux.
O arquivo de amostra que usaremos
O arquivo de exemplo de strings que usaremos para demonstrar o uso do comando awk é o seguinte:
Isto é o que cada coluna do arquivo de exemplo indica:
A primeira coluna contém o nome dos funcionários/professores de uma escola
A segunda coluna contém a disciplina que o funcionário ensina
A terceira coluna indica se o funcionário é professor ou professor assistente
A quarta coluna contém o pagamento do funcionário
Exemplo 1: Use Awk para imprimir todas as linhas de um arquivo
Imprimir cada linha de um arquivo especificado é o comportamento padrão do comando awk. Na seguinte sintaxe do comando awk, não estamos especificando nenhum padrão que o awk deve imprimir, portanto, o comando deve aplicar a ação “print ” a todas as linhas do arquivo.
Sintaxe:
Exemplo :
Neste exemplo, estou dizendo ao comando awk para imprimir o conteúdo do meu arquivo de amostra, linha por linha.
Exemplo 2: Use awk para imprimir apenas as linhas que correspondem a um determinado padrão
Com o awk, você pode especificar um padrão e o comando imprimirá apenas as linhas correspondentes a esse padrão.
Sintaxe:
Exemplo :
Do arquivo de amostra, se eu quiser imprimir apenas a(s) linha(s) que contém a variável ‘B’, posso utilizar o seguinte comando:
Para tornar o exemplo mais significativo, deixe-me imprimir apenas as informações sobre os funcionários que são 'professores'.
O comando apenas imprime as linhas/entradas que contém a string “professor” assim temos informações mais valiosas derivadas dos dados.
Exemplo 3. Use awk para dividir o arquivo para que apenas campos/colunas específicos sejam impressos
Em vez de imprimir o arquivo inteiro, você pode fazer o awk imprimir apenas colunas específicas do arquivo. O awk trata todas as palavras, separadas por espaço em branco, em uma linha como um registro de coluna por padrão. Ele armazena o registro em uma variável $N. Onde $1 representa a primeira palavra, $2 armazena a segunda palavra, $3 a quarta e assim por diante. $0 armazena toda a linha para que a linha who seja impressa, conforme explicado no exemplo 1.
Sintaxe:
Exemplo :
O seguinte comando imprimirá apenas a primeira coluna (nome) e a segunda coluna (assunto) do meu arquivo de amostra:
Exemplo 4: Use Awk para contar e imprimir o número de linhas em que um padrão é correspondido
Você pode dizer ao awk para contar o número de linhas em que um padrão especificado é correspondido e, em seguida, exibir essa 'contagem'.
Sintaxe:
filename.txt
Exemplo :
Neste exemplo, quero contar o número de pessoas que lecionam a disciplina “inglês”. Portanto, direi ao comando awk para corresponder ao padrão “inglês” e imprimir o número de linhas em que esse padrão corresponde.
A contagem aqui sugere que 2 pessoas estão ensinando inglês a partir dos registros do arquivo de amostra.
Exemplo 5: Use awk para imprimir apenas linhas com mais de um número específico de caracteres
Para esta tarefa, usaremos a função interna do awk chamada “comprimento”. Esta função retorna o comprimento da string de entrada. Assim, se quisermos que o awk imprima apenas linhas com mais ou menos que o número de caracteres, podemos usar a função length da seguinte maneira:
Para imprimir linhas com caracteres maiores que um número:
Para imprimir linhas com caracteres menores que um número:
Onde n é o número de caracteres que você deseja especificar para uma linha.
Exemplo :
O comando a seguir imprimirá apenas as linhas do meu arquivo de amostra que possuem caracteres com mais de 30:
Exemplo 6: Use awk para salvar a saída do comando em outro arquivo
Ao usar o operador de redirecionamento '>', você pode usar o comando awk para imprimir sua saída em outro arquivo. Esta é a maneira que você pode usá-lo:
Exemplo :
Neste exemplo, usarei o operador de redirecionamento com meu comando awk para imprimir apenas os nomes dos funcionários (coluna 1) em um novo arquivo:
Verifiquei através dos comandos cat que o novo arquivo contém apenas os nomes dos funcionários.
Exemplo 7: Use awk para imprimir apenas linhas não vazias de um arquivo
O Awk possui alguns comandos integrados que você pode usar para filtrar a saída. Por exemplo, o comando NF é usado para manter uma contagem dos campos dentro do registro de entrada atual. Aqui, usaremos o comando NF para imprimir apenas as linhas não vazias do arquivo:
Obviamente, você pode usar o seguinte comando para imprimir as linhas vazias:
Exemplo 8: Use awk para contar o total de linhas em um arquivo
Outra função interna chamada NR mantém uma contagem do número de registros de entrada (geralmente linhas) de um determinado arquivo. Você pode usar esta função no awk da seguinte forma para contar o número de linhas em um arquivo:
Essa é a informação básica que você precisa para começar a dividir arquivos com o comando awk. Você pode usar a combinação desses exemplos para obter informações mais significativas de seu arquivo de strings por meio do awk.