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 bom começo... obrigado !!!
ResponderExcluir