Como dividir um arquivo de cordas com awk

Como dividir um arquivo de cordas com awk
O comando Linux Awk (abreviado dos 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 precisam ser organizados na forma de linhas e colunas. Em seguida, você pode usar AWK nesses arquivos para:
  • Digitalize 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. Realizamos os exemplos deste artigo em um sistema de 10 buster de Debian, mas eles podem ser facilmente replicados na maioria dos distritos Linux.

O arquivo de amostra que usaremos

O arquivo de amostra de strings que usaremos para demonstrar o uso do comando AWK é o seguinte:

É isso que cada coluna do arquivo de amostra indica:

  • A primeira coluna contém o nome de funcionários/professores em uma escola
  • A segunda coluna contém o assunto 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 todas as linhas de um arquivo especificado é o comportamento padrão do comando AWK. Na sintaxe a seguir do comando AWK, não estamos especificando nenhum padrão que awk deve imprimir; portanto, o comando deve aplicar a ação "impressa" a todas as linhas do arquivo.

Sintaxe:

$ awk 'print' nome do arquivo.TXT

Exemplo:

Neste exemplo, estou dizendo ao comando AWK para imprimir o conteúdo do meu arquivo de amostra, linha por linha.

$ awk 'print' sample_file.TXT

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 que correspondem a esse padrão.

Sintaxe:

$ awk '/ padrony_to_be_matched/ print' nome do arquivo.TXT

Exemplo:

A partir do arquivo de amostra, se eu quiser imprimir apenas as linhas que contêm a variável 'B', posso usar o seguinte comando:

$ awk '/ b/ print' sample_file.TXT

Para tornar o exemplo mais significativo, deixe -me imprimir apenas as informações sobre os funcionários que são 'Professor's.

$ awk '/ Professor/ print' sample_file.TXT

O comando imprime apenas as linhas/entradas que contêm a string "Professor", portanto, 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 com que imprimir apenas colunas específicas do arquivo. Awk trata todas as palavras, separadas pelo espaço branco, em uma linha como um registro de coluna por padrão. Ele armazena o recorde em uma variável $ n. Onde US $ 1 representa a primeira palavra, US $ 2 armazena a segunda palavra, US $ 3 no quarto e assim por diante. $ 0 armazena toda a linha, então a linha da OMS é impressa, conforme explicado no Exemplo 1.

Sintaxe:

$ awk 'print $ n,… .' nome do arquivo.TXT

Exemplo:

O comando a seguir imprimirá apenas a primeira coluna (nome) e a segunda coluna (sujeito) do meu arquivo de amostra:

$ awk 'print $ 1, $ 2' sample_file.TXT

Exemplo 4: use awk para contar e imprimir o número de linhas nas quais um padrão é correspondido

Você pode dizer ao AWK para contar o número de linhas nas quais um padrão especificado é comparado e depois a saída que 'contagem'.

Sintaxe:

$ awk '/padrony_to_be_matched/++ cnt end print "count =", cnt'
nome do arquivo.TXT

Exemplo:

Neste exemplo, quero contar o número de pessoas ensinando o assunto "inglês". Portanto, vou dizer ao comando AWK para corresponder ao padrão "inglês" e imprimir o número de linhas nas quais esse padrão é correspondido.

$ awk '/inglês/++ cnt end print "count =", cnt' sample_file.TXT

A contagem aqui sugere que 2 pessoas estão ensinando inglês a partir dos registros de arquivos de amostra.

Exemplo 5: Use Awk para imprimir apenas linhas com mais do que um número específico de caracteres

Para esta tarefa, usaremos a função AWK embutida chamada "Comprimento". Esta função retorna o comprimento da sequência de entrada. Assim, se queremos que o AWK imprima apenas linhas com mais do que ou até menos do que o número de caracteres, podemos usar a função de comprimento da seguinte maneira:

Para imprimir linhas com caracteres maiores que um número:

$ AWK 'Comprimento ($ 0)> Nome do arquivo.TXT

Para imprimir linhas com caracteres menores que um número:

$ awk 'comprimento ($ 0) < n' filename.txt

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 tem caracteres mais de 30:

$ awk 'comprimento ($ 0)> 30' sample_file.TXT

Exemplo 6: Use awk para salvar a saída de comando em outro arquivo

Ao usar o operador de redirecionamento '>', você pode usar o comando AWK para imprimir sua saída para outro arquivo. É assim que você pode usá -lo:

$ awk 'critério_to_print "nome do arquivo.txt> outputFile.TXT

Exemplo:

Neste exemplo, usarei o operador de redirecionamento com meu comando AWK para imprimir apenas os nomes dos funcionários (coluna 1) para um novo arquivo:

$ awk 'print $ 1' sample_file.txt> funcionário_names.TXT

Verifiquei através dos comandos do 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

Awk tem alguns comandos internos 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:

$ awk 'nf> 0' sample_file.TXT

Obviamente, você pode usar o seguinte comando para imprimir as linhas vazias:

$ awk 'nf < 0' sample_file.txt

Exemplo 8: Use Awk para contar as linhas totais 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 essa função no AWK como seguinte para contar o número de linhas em um arquivo:

$ awk 'end print nr' sample_file.TXT

Esta foi a informação básica necessária para começar com os arquivos de divisão com o comando AWK. Você pode usar a combinação desses exemplos para buscar informações mais significativas do seu arquivo de strings através do AWK.