Como funciona o awk

Bem, este post veio por causa deste comentário.

De forma simples o awk trata textos e streams assim:

awk [padrão] ação

Observe que o padrão pode ser omitido, caso queira usar o padrão pode usar expressões regulares

Vamos aos exemplos:

echo "um dois" | awk '{print $2}'

omitimos o padrão, ou seja pedimos apenas a ação, no caso imprimir a segunda coluna

echo "um dois" | awk '{print $2, $1}'

Acima pedimos ao awk que invertesse a posição das colunas

awk -F: '/sergio/ {print $1}' /etc/group

Acima algo novo (o separador de campos padrão do awk é o espaço) para indicar
um separador diferente usamos '-F' seguido do separador. Estamos pegando o campo 1 do
arquivo /etc/group, estamos pedindo que imprima somente as linhas que contém o padrão sergio. /sergio/

Para imprimir somente as linhas pares

seq 10 | awk '$1 % 2 == 0 {print}'

Como pegar o endereço IP?

ifconfig eth0 | awk '/inet addr/ {print $2}'

Se desejar limpar mais a saida pode usar o cut

Como pegar usuários com GID acima de 1000

awk -F: '$4 > 1000 {print}' /etc/passwd

Acima estou dizendo ao awk que o separador de campos é dois pontos e que
se o campo 4 for maior que 1000 o mesmo deve ser impresso

Como pegar a segunda coluna da quinta linha?
Considrando que o arquivo seja separado por espaços, faça:

awk 'NR==5 {print $2}' arquivo

Algon novo aqui --> NR significa número do registro, para o awk cada linha
é um registro, portanto 5ª linha é igua a NR==5

procura e mostra linhas com o terceiro campo igual a "peter" ou que contenham o string "marie":

cat nomedoarquivo | awk '$3 == "peter" || $3 ~ /marie/'

Variáveis do awk
NR Contém o número do registro atual
NF contém o número de registros por campo
FS indica o separador de campos
RS indica o separador de registros
OFS indica o separador de campo do arquivo de saida
ORS indica o separador de registros do arquivo de saida

indicando o separador de saída

awk -F: '{OFS="-"}{print $1,$6}' /etc/passwd

Imprimir o nome dos grupos que tiverem como membro o usuário sergio

awk -F":" '$4 ~ /sergio/ {print $1}' /etc/group

Imprimir cada registro (linha) numerada "NR" usando Número do Registro

awk -F":" '{ print NR " " $0 }' /etc/passwd

Um comentário:

Insira seu comentário - O mesmo será submetido à aprovação!

linux-cookbook

Grupos do Google
Participe do grupo linux-cookbook
E-mail:
Visitar este grupo