De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.
Sort, dd e outros mais
Colaboração: Rubens Queiroz de Almeida
Data de Publicação: 01 de Julho de 2004
Tomemos um arquivo de nome nomes.txt
com o seguinte
conteúdo:
mAria@acme.com.br
maria@acme.com.br
Rubens@acme.com.br
Maria@acme.com.br
rubens@acme.com.br
sonia@acme.com.br
Sonia@acme.com.br
Eu estou interessado apenas nos endereços eletrônicos únicos. Para
efeito de envio de mensagens, endereços como <mAria (a) acme com br> e
<maria (a) acme com br> representam exatamente a mesma coisa. Sendo assim,
gostaria de eliminá-los de minha lista.
Para isto:
$ dd conv=lcase if=nomes.txt | sort -u
0+1 registros de entrada
0+1 registros de saída
128 bytes transferred in 0,001221 seconds (104838 bytes/sec)
maria@acme.com.br
rubens@acme.com.br
sonia@acme.com.br
Pronto, fico agora com apenas três nomes únicos.
Era assim que eu sempre fiz, por muitos anos. Entretanto, lendo
a documentação do programa sort, descobri que estava tomando
o caminho mais longo. Vejamos outra forma de se fazer isto:
$ sort -fu nomes.txt
mAria@acme.com.br
Rubens@acme.com.br
sonia@acme.com.br
O comando sort
possui a opção -f
que o instrui a ignorar a caixa
das letras e considerar nomes como mAria
e maria
como sendo a mesma
coisa. Obtemos o mesmo resultado final, três nomes, porém com a grafia
inalterada.
Caso não especifiquemos a flag -f
o sort irá exibir todos os nomes do
arquivo original ordenados, sem eliminar as duplicatas.
$ sort -u nomes.txt
maria@acme.com.br
mAria@acme.com.br
Maria@acme.com.br
rubens@acme.com.br
Rubens@acme.com.br
sonia@acme.com.br
Sonia@acme.com.br