Como usar o AWK no Linux
Os utilitários que o Linux oferece geralmente seguem a filosofia de design do UNIX. 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 vem pré-instalada em todas as distribuições Linux. AWK em si é uma linguagem de programação. A ferramenta AWK é apenas um interpretador da linguagem de programação AWK. Neste guia, confira como usar o AWK no Linux.
uso de 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 linha por linha, em todo o arquivo de texto.
O comportamento padrão do awk é usar espaços em branco (espaços, tabulações, etc.) para separar os campos. Felizmente, muitos dos arquivos de configuração no Linux seguem esse padrão.
Sintaxe básica
É assim que a estrutura de comando do awk se parece.
As partes do comando são bastante auto-explicativas. O awk pode operar sem a parte de pesquisa ou ação. Se nada for especificado, a ação padrão na correspondência será apenas imprimir. Basicamente, o awk imprimirá todas as correspondências encontradas no arquivo.
Se não houver um padrão de pesquisa especificado, o awk executará as ações especificadas em cada linha do arquivo.
Se ambas as partes forem fornecidas, o awk usará o padrão para determinar se a linha atual o reflete. Se for correspondido, o awk executará a ação especificada.
Observe que o awk também pode funcionar em textos redirecionados. Isso pode ser obtido canalizando o conteúdo do comando para o awk para agir. Saiba mais sobre o comando pipe do Linux.
Para fins de demonstração, aqui está um arquivo de texto de amostra. Ele contém 10 linhas, 2 palavras por linha.
Expressão regular
Um dos principais recursos que tornam o awk uma ferramenta poderosa é o suporte a expressões regulares (regex, para abreviar). Uma expressão regular é uma string que representa um determinado 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 exclusivas do awk. Essas são sintaxes regex quase universais, portanto, dominá-las também ajudará em outros aplicativos/programação que envolvam expressões regulares.
Caracteres básicos: Todos os caracteres alfanuméricos sublinhados (_) etc.
Meta-caracteres: são caracteres que explicam várias maneiras de expandir os caracteres comuns.
Asterisco (*): zero ou mais existências do caractere imediato que o precede são válidas.
colchete ([]): a correspondência é válida se, na posição, qualquer um dos caracteres do colchete for correspondido. Pode ser combinado com conjuntos de caracteres.
Circuito (^): A correspondência terá que estar no início da linha.
Dólar ($): A partida terá que ser no final da linha.
Barra invertida (\): Se algum metacaractere tiver que ser usado no sentido literal.
Imprimindo o texto
Para imprimir todo o conteúdo de um arquivo de texto, use o comando print. No caso do padrão de busca, não há um padrão definido. Assim, o awk imprime todas as linhas.
Aqui, “print” é um comando AWK que imprime o conteúdo da entrada.
Pesquisa de strings
O AWK pode realizar uma pesquisa de texto básica no texto fornecido. Na seção de padrões, deve ser o texto a ser encontrado.
No comando a seguir, o awk irá procurar o texto “quick” em todas as linhas do arquivo sample.txt.
Agora, vamos usar algumas expressões regulares para ajustar ainda mais a pesquisa. O comando a seguir imprimirá todas as linhas que tiverem “marrom” no início.
Que tal encontrar algo no final de uma linha? O comando a seguir imprimirá todas as linhas que tiverem “quick” no final.
Padrão curinga
O próximo exemplo mostrará o uso do cursor (.). Aqui, pode haver quaisquer dois caracteres antes do caractere “e”.
Padrão curinga (usando asterisco)
E se puder haver qualquer número de personagens no local? Para corresponder a qualquer caractere possível na posição, use o asterisco (*). Aqui, o AWK corresponderá a todas as linhas que tiverem qualquer quantidade de caracteres após “o”.
expressão de colchetes
O exemplo a seguir mostrará como usar a expressão de colchetes. A expressão de colchetes informa que, no local, a correspondência será válida se corresponder ao conjunto de caracteres entre colchetes. Por exemplo, o comando a seguir corresponderá a “The” e “Tee” como correspondências válidas.
Existem alguns conjuntos de caracteres predefinidos na expressão regular. Por exemplo, o conjunto de todas as letras maiúsculas é rotulado como “A-Z”. No comando a seguir, o awk corresponderá a todas as palavras que contêm uma letra maiúscula.
Dê uma olhada no seguinte uso de conjuntos de caracteres com expressão de colchetes.
[0-9]: Indica um único dígito
[a-z]: Indica uma única letra minúscula
[A-Z]: Indica uma única letra maiúscula
[a-zA-z]: Indica uma única letra
[a-zA-z 0-9]: Indica um único caractere ou dígito.
Variáveis pré-definidas do Awk
O AWK vem com um monte de variáveis pré-definidas e automáticas. Essas variáveis podem facilitar a criação de programas e scripts com AWK.
Aqui estão algumas das variáveis AWK mais comuns que você encontrará.
FILENAME: O nome do arquivo de entrada atual.
RS: O separador de registro. 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 caractere de nova linha.
NR: O número do registro de entrada atual. Se o valor RS for definido como padrão, esse valor indicará o número da linha de entrada atual.
FS/OFS: O(s) caractere(s) usado(s) como separador de campo. Depois de lido, o AWK divide um registro em diferentes campos. O delimitador é definido pelo valor de FS. Ao imprimir, o AWK reúne todos os campos. No entanto, neste momento, o AWK usa o separador OFS em vez do separador FS. Geralmente, FS e OFS são iguais, mas não são obrigatórios.
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 registro para os dados de saída. O valor padrão é o caractere de nova linha.
Vamos verificá-los em ação. O comando a seguir usará a variável NR para imprimir a linha 2 à linha 4 de sample.txt. AWK também suporta operadores lógicos como lógico e (&&).
Para atribuir um valor específico a uma variável AWK, use a seguinte estrutura.
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 obscura regra POSIX. 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. No POSIX, uma linha em branco sem conteúdo está completamente vazia. No entanto, se a linha contiver espaços em branco, ela não será considerada "em branco".
Recursos adicionais
AWK é uma ferramenta poderosa com toneladas de recursos. Embora este guia abranja muitos deles, ainda é apenas o básico. Dominar o AWK exigirá 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 espaços em branco
Usando uma instrução condicional
Imprimir um intervalo de colunas
Regex com AWK
20 exemplos de AWK
Internet é um bom lugar para aprender alguma coisa. Existem muitos tutoriais incríveis sobre os fundamentos do AWK para usuários muito avançados.
Pensamento final
Esperançosamente, este guia ajudou a fornecer uma boa compreensão dos fundamentos do AWK. Embora possa demorar um pouco, dominar o AWK é extremamente gratificante em termos do poder que ele confere.
Feliz computação!