22 Oct
Agora que além de aprendiz de cientista da computação, eu virei Engenheiro de Informática e Redes em treinamento, tenho aulas de Administração de Sistemas aqui em ESISAR.
Um dos exercícios de Trabalho Prático (Exercício Programa + Professor para quem é do IME) era escrever um script que listasse todos os usuários em /etc/passwd.
Rapidamente me lembrei de “Cadu punhos de aço” e dei minha resposta usando sed, entretanto, o que você vê abaixo é uma versão melhorada e corrigida por Tiago Peczenyj (obrigado thiago):
root@linux# sed -nr ‘/^([^:]+):x:([^0][0-9]{2,}).*$/{s//\2 - \1/;p}’ /etc/passwd
Feliz com a minha resposta, o professor mostrou o mesmo comando com awk:
root@linux# awk -F’:’ ‘{ if ($3 > 100) printf “%s - %s \n”,$3,$1}’ /etc/passwd
(nos comentários existem versões com melhorias :-)
Achei fantástico como awk pode ser mais verboso. Alguém ai conhece um ou outro e pode mostrar umas dicas?
Para quem quer aprender um dos dois, ficam aqui os links:
Sed - Un Introduction Tutorial by Bruce Brannet
Posts Relacionados:
Acompanhe-nos por
RSS, por Email ou via Twitter.
Veja como ter um desconto no Dreamhost: um excelente servidor web.
Email This Post
4 Responses for "Awk & Sed"
SED - para o seu exemplo ficar ‘correto’ vc deveria usar o comando p junto da opção -n pois vc imprime tanto o arquivo original quanto as novas linhas
sed -nr ‘/^([^:]+):x:([^0][0-9]{2,}).*$/{s//\2 - \1/;p}’ /etc/passwd
AWK - é possivel diminuir bastante :)
A) vc pode simplificar o if utilizando o pattern/match
awk -F’:’ ‘$3 > 100 { print $3 ” - ” $1}’ /etc/passwd
B) e aqui vc pode usar o print implicito ;-)
awk -F’:’ ‘$3 > 100 && $0= $3 ” - “$1 {print}’ /etc/passwd
C) brincar com OFS
awk -v OFS=’ - ‘ -F’:’ ‘$3 > 100 { print $3,$1}’ /etc/passwd
Wow. Obrigado pela correção e pelos exemplo Tiago. Eu já mudei o artigo para conter a sua correção.
Se é só pra listar, como o /etc/passwd está separado por “:”, daria para usar um simples cut.
Que tal:
cut -d : -f 1,3 < /etc/passwd
Claro que não ficou na mesma formatação, mas mostra os campos que você queria :)
Tenho um wiki para comandos linux e nele uma seção para awk: http://linuxdicas.wikispaces.com/awk
Eu apenas tiraria as aspas do delimitador de campos:
awk -F: ‘$3 > 1000 {print $1}’ /etc/passwd
Dá uma olhada no wiki citado tem muita coisa que pesquisei na web.
Leave a reply