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.
Colaboração: Rubens Queiroz de Almeida
Data de Publicação: 19 de abril de 2026
No ecossistema Unix/Linux, a tarefa de identificar ou remover linhas duplicadas é um exemplo clássico de como pequenos utilitários trabalhando juntos resolvem problemas complexos. Se você lida com logs, listas de e-mails ou extração de dados, dominar o sort e o uniq é indispensável.
O comando principal para lidar com duplicatas é o uniq. No entanto, ele possui uma característica importante: o uniq só compara linhas adjacentes. Por isso, quase sempre o utilizaremos em conjunto com o sort.
Se você tem um arquivo e precisa saber quais entradas aparecem mais de uma vez, utilize a opção -d (duplicated):
$ sort arquivo.txt | uniq -d
Este comando exibirá apenas uma instância de cada linha que possui duplicatas.
Para uma análise mais profunda (como identificar IPs em um log ou palavras mais frequentes), a opção -c (count) é a ideal:
$ sort arquivo.txt | uniq -c | sort -nr
O que acontece aqui?
sort: Ordena o arquivo.
uniq -c: Conta as repetições e prefixa cada linha com o número de vezes que ela apareceu.
sort -nr: Ordena numericamente (-n) de forma reversa (-r), colocando as linhas mais frequentes no topo.
Se o seu objetivo é ver o conteúdo bruto das linhas que se repetem (todas as ocorrências, não apenas uma), utilize o -D:
$ sort arquivo.txt | uniq -D
Se você quer apenas um arquivo limpo, com entradas únicas, pode usar o uniq puro ou o próprio atalho do sort:
# Opção 1:
$ sort arquivo.txt | uniq > unico.txt
# Opção 2 (mais eficiente):
$ sort -u arquivo.txt > unico.txt
O problema do sort é que ele altera a sequência cronológica ou lógica do seu arquivo. Se você precisa remover ou encontrar duplicatas preservando a ordem original, o awk é a ferramenta certa:
Para remover duplicatas mantendo a ordem:
$ awk '!seen[$0]++' arquivo.txt
Para mostrar apenas as linhas que estão sobrando (as duplicatas):
$ awk 'seen[$0]++ == 1' arquivo.txt
Aqui, o awk usa um array associativo (seen) para indexar o conteúdo da linha e verificar se ele já passou pelo processamento antes.
Resumo de Opções do uniq
| Parâmetro | Função |
|---|---|
-d |
Mostra apenas linhas duplicadas (uma vez cada). |
-D |
Mostra todas as instâncias das linhas duplicadas. |
-u |
Mostra apenas as linhas únicas (ignora as que se repetem). |
-c |
Conta as ocorrências. |
-i |
Ignora case (case-insensitive). |
Conclusão: Para arquivos pequenos e médios, a combinação sort | uniq é imbatível pela simplicidade. Para arquivos gigantescos ou quando a ordem é sagrada, o awk assume o protagonismo.