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}' file
Primeiramente, 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 Apple
Aqui, 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 - Apple
Como 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