Como usar o AWK no Linux

Como usar o AWK no Linux

A oferta de linux de utilitários geralmente segue a filosofia do Unix of Design. Qualquer ferramenta deve ser pequena, usar texto simples para E/S e operar de maneira modular. Graças ao legado, temos algumas das melhores funcionalidades de processamento de texto com a ajuda de ferramentas como sed e awk.

No Linux, a ferramenta AWK é pré-instalada em todas as distritos Linux. O próprio Awk é uma linguagem de programação. A ferramenta AWK é apenas um intérprete da linguagem de programação AWK. Neste guia, confira como usar o AWK no Linux.

Uso awk

A ferramenta AWK é mais útil quando os textos são organizados em um formato previsível. É muito bom em analisar e manipular dados tabulares. Ele opera de linha a linha, em todo o arquivo de texto.

O comportamento padrão do AWK é usar espaços em branco (espaços, guias, etc.) para separar campos. Felizmente, muitos dos arquivos de configuração no Linux seguem este padrão.

Sintaxe básica

É assim que a estrutura de comando da AWK se parece.

$ awk '// ; ; '

As partes do comando são bastante auto-explicativas. Awk pode operar sem a parte de busca ou ação. Se nada for especificado, a ação padrão na partida será apenas imprimindo. Basicamente, o AWK imprimirá todas as correspondências encontradas no arquivo.

Se não houver padrão de pesquisa especificado, o AWK executará as ações especificadas em todas as linhas do arquivo.

Se ambas as partes forem dadas, o AWK usará o padrão para determinar se a linha atual reflete. Se correspondido, então awk executa a ação especificada.

Observe que o AWK também pode funcionar em textos redirecionados. Isso pode ser alcançado com o conteúdo do comando para se esgotar para agir em. Saiba mais sobre o comando Linux Pipe.

Para fins de demonstração, aqui está um arquivo de texto de amostra. Ele contém 10 linhas, 2 palavras por linha.

$ gat amostra.TXT

Expressão regular

Um dos principais recursos que tornam o AWK uma ferramenta poderosa é o suporte da expressão regular (regex, para abreviar). Uma expressão regular é uma corda que representa um certo padrão de caracteres.

Aqui está uma lista de algumas das sintaxes de expressão regular mais comuns. Essas sintaxes regex não são apenas exclusivas para estragar. Essas são sintaxes de regex quase universais, portanto, dominá -las também ajudará em outros aplicativos/programação que envolve expressão regular.

  • Caracteres básicos: Todos os caracteres alfanuméricos sublinham (_) etc.
    • Conjunto de personagens: para facilitar as coisas, existem grupos de personagens na regex. Por exemplo, dígitos uppercase (A-Z), minúsculas (A-Z) e Numérico (0-9).
  • Meta-caracteres: Estes são personagens que explicam várias maneiras de expandir os personagens comuns.
    • Período (.): Qualquer correspondência de personagem na posição é válida (exceto uma nova linha).
    • Asterisk (*): Zero ou mais existências do caráter imediato que precedem é válido.
    • Suporte ([]): A partida é válida se, na posição, qualquer um dos personagens do suporte for correspondido. Pode ser combinado com conjuntos de caracteres.
    • Caret (^): A partida terá que estar no início da linha.
    • Dólar ($): A partida terá que estar no final da linha.
    • Barragem (\): Se algum meta-caractere precisar ser usado no sentido literal.

Imprimindo o texto

Para imprimir todo o conteúdo de um arquivo de texto, use o comando de impressão. No caso do padrão de pesquisa, não há padrão definido. Então, impressiona todas as linhas.

$ awk 'print' amostra.TXT

Aqui, "Print" é um comando AWK que imprime o conteúdo da entrada.

Pesquisa de string

Awk pode executar uma pesquisa básica de texto no texto fornecido. Na seção de padrões, deve ser o texto para encontrar.

No comando a seguir, a AWK procurará o texto "rápido" em todas as linhas da amostra de arquivo.TXT.

$ awk '/rápido/' amostra.TXT

Agora, vamos usar algumas expressões regulares para ajustar ainda mais a pesquisa. O comando a seguir imprimirá todas as linhas que têm "marrom" no começo.

$ awk '/^brown/' amostra.TXT

Que tal encontrar algo no fim de uma linha? O comando a seguir imprimirá todas as linhas que têm "rápido" no final.

$ awk '/rápido $/' amostra.TXT

Padrão de curinga

O próximo exemplo vai mostrar o uso do caret (.). Aqui, pode haver dois caracteres antes do personagem "e".

$ awk '/… e/' amostra.TXT

Padrão de curinga (usando asterisco)

E se houver algum número de caracteres no local? Para corresponder a qualquer personagem possível na posição, use o asterisco (*). Aqui, o AWK corresponderá a todas as linhas que têm qualquer quantidade de caracteres após "o".

$ awk '/the*/' amostra.TXT

Expressão do suporte

O exemplo a seguir vai mostrar como usar a expressão do suporte. A expressão de suporte diz que, no local, a partida será válida se corresponder ao conjunto de caracteres fechados pelos colchetes. Por exemplo, o comando a seguir corresponderá a "The" e "Tee" como correspondências válidas.

$ awk '/t [ele] e/'.TXT

Existem alguns conjuntos de personagens predefinidos na expressão regular. Por exemplo, o conjunto de todas as letras maiúsculas é rotulado como "A-Z". No comando a seguir, a AWK corresponderá a todas as palavras que contêm uma letra de maiúsculas.

$ awk '/[a-z]/' amostra.TXT

Dê uma olhada no seguinte uso de conjuntos de personagens com expressão de suporte.

  • [0-9]: indica um único dígito
  • [A-Z]: indica uma única letra minúscula
  • [A-Z]: indica uma única letra de maiúsculas
  • [A-ZA-Z]: indica uma única letra
  • [A-ZA-Z 0-9]: indica um único caractere ou dígito.

Variáveis ​​predefinidas awk

Awk vem com um monte de variáveis ​​predefinidas e automáticas. Essas variáveis ​​podem facilitar os programas e scripts de escrita com awk.

Aqui estão algumas das variáveis ​​mais comuns que você encontrará.

  • NOME DO ARQUIVO: O nome do arquivo do arquivo de entrada atual.
  • Rs: O separador de registros. Devido à natureza do AWK, ele processa dados um registro por vez. Aqui, esta variável especifica o delimitador usado para dividir o fluxo de dados em registros. Por padrão, esse valor é o personagem Newline.
  • Nr: O número de registro de entrada atual. Se o valor RS estiver definido como padrão, esse valor indicará o número da linha de entrada atual.
  • FS/OFS: O (s) personagem (s) usado como separador de campo. Uma vez lido, a AWK divide um recorde em diferentes campos. O delimitador é definido pelo valor de FS. Ao imprimir, Awk se junta a todos os campos. No entanto, neste momento, a AWK usa o separador OFS em vez do separador FS. Geralmente, ambos os Fs e OFs são os mesmos, mas não obrigatórios para serem tão.
  • Nf: O número de campos no registro atual. Se o valor padrão "Whitespace" for usado, ele corresponderá ao número de palavras no registro atual.
  • Ors: O separador de registros para os dados de saída. O valor padrão é o personagem Newline.

Vamos verificá -los em ação. O comando a seguir usará a variável NR para imprimir a linha 2 para a linha 4 da amostra.TXT. A AWK também suporta operadores lógicos como lógico e (&&).

$ awk 'nr> 1 && nr < 5' sample.txt

Para atribuir um valor específico a uma variável AWK, use a seguinte estrutura.

$ awk '// ; ; ' =,

Por exemplo, para remover todas as linhas em branco do arquivo de entrada, altere o valor de Rs para basicamente nada. É um truque que usa uma regra Posix obscura. Ele especifica que, se o valor de rs for uma string vazia, os registros serão separados por uma sequência que consiste em uma nova linha com uma ou mais linhas em branco. Em Posix, uma linha em branco sem conteúdo está completamente vazia. No entanto, se a linha contiver espaços em branco, não será considerada "em branco".

$ awk 'print' rs = "amostra.TXT

Recursos adicionais

Awk é uma ferramenta poderosa com toneladas de recursos. Enquanto este guia cobre muitos deles, ainda é apenas o básico. Dominar o Awk vai levar mais do que apenas isso. Este guia deve ser uma boa introdução à ferramenta.

Se você realmente deseja dominar a ferramenta, aqui estão alguns recursos adicionais que você deve conferir.

  • Aparar o espaço em branco
  • Usando uma declaração condicional
  • Imprima uma variedade de colunas
  • Regex com Awk
  • 20 exemplos AWK

A internet é um bom lugar para aprender algo. Existem muitos tutoriais incríveis sobre o básico do AWK para usuários muito avançados.

Pensamento final

Felizmente, este guia ajudou a fornecer uma boa compreensão dos princípios básicos. Embora possa demorar um pouco, dominar o Awk é extremamente gratificante em termos do poder que concede.

Computação feliz!