Bem, este post veio por causa
deste comentário.
De forma simples o awk trata textos e streams assim:
awk [padrão] açãoObserve 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/groupAcima 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/passwdAcima 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}' arquivoAlgon 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 awkNR 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/passwdImprimir o nome dos grupos que tiverem como membro o usuário sergio
awk -F":" '$4 ~ /sergio/ {print $1}' /etc/groupImprimir cada registro (linha) numerada "NR" usando Número do Registro
awk -F":" '{ print NR " " $0 }' /etc/passwd