Comando awk - Linux
O comando awk é uma poderosa ferramenta para trabalhar com arquivos de texto, oferecendo diversas funcionalidades. O comando awk possui o seguinte formato:
awk '/pattern/{action}' filePrimeiramente, ao comando awk é passado o parâmetro pattern (padrão), que é uma expressão regular que o texto deve corresponder. Normalmente, os padrões são delimitados por barras. Em seguida, vem o parâmetro action, que define as ações a serem realizadas sobre as correspondências encontradas. As ações são delimitadas por chaves. Como awk trabalha com expressões regulares, é aconselhável colocar o padrão entre aspas simples para que o shell não os interprete incorretamente.
Por fim, o comando recebe o arquivo onde serão buscadas as correspondências.
Se o padrão não for especificado, a ação será executada em cada linha do arquivo. Se a ação não for especificada, awk simplesmente exibirá as linhas que correspondem ao padrão.
Por exemplo, suponha que no diretório pessoal do usuário exista o arquivo users.txt com o seguinte conteúdo:
Tom:39:Microsoft Bob:43:Google Sam:28:Jetbrains Alice:34:Microsoft Kate:25:Google Tim:23:- Tomas:31:Apple
Cada linha contém dados de um usuário - nome, idade e empresa - separados por dois-pontos. Ou seja, cada linha tem o formato nome:idade:empresa.
Suponha que queremos obter todas as linhas onde o nome do usuário é "Tom":
programicio@Programicio:~$ awk '/Tom/' users.txt Tom:39:Microsoft Tomas:31:Apple
A utilidade awk oferece várias funcionalidades interessantes, como a possibilidade de trabalhar com arquivos em estrutura tabular, como o nosso arquivo. Por padrão, awk utiliza espaço como delimitador de campo. No entanto, em nosso arquivo, o delimitador é o dois-pontos. Com a opção -F, podemos definir o símbolo que será usado como delimitador.
Por exemplo, para exibir apenas a empresa onde trabalham os usuários com o nome "Tom":
programicio@Programicio:~$ awk -F : '/Tom/{print $3}' users.txt
Microsoft
AppleAqui, a opção -F define o delimitador como dois-pontos. Além disso, adicionamos a ação print, uma função embutida do awk, que imprime o valor passado. Neste caso, passamos o valor $3, que representa o terceiro campo. Em nosso caso, o primeiro campo é o nome, o segundo é a idade e o terceiro é a empresa. O valor especial $0 representa a linha inteira.
Se quisermos exibir a empresa de todos os usuários, podemos omitir pattern (o padrão):
programicio@Programicio:~$ awk -F : '{print $3}' users.txt
Microsoft
Google
Jetbrains
Microsoft
Google
-
AppleComo awk pode se referir a campos específicos, também podemos comparar campos entre si. Para isso, estão disponíveis os seguintes operadores:
==: Igual (procura campo com o mesmo valor)!=: Diferente<: Menor que<=: Menor ou igual>: Maior que>=: Maior ou igual
Com esses operadores, é possível realizar algumas operações com arquivos de texto. Por exemplo, para exibir os usuários com idade maior que 30:
programicio@Programicio:~$ awk -F : '$2 > 30 {print $1}' users.txt
Tom
Bob
Alice
Tomas