O comando uniq (unique) é uma ferramenta essencial para o processamento de texto no Linux. Ele ajuda a filtrar e gerenciar linhas duplicadas dentro de um arquivo de texto, mas é importante entender como ele funciona para usá-lo de forma eficaz.
Remoção Básica de Duplicatas
A função principal do comando uniq é remover linhas adjacentes duplicadas. Imagine que você tem um arquivo chamado reading.txt com o seguinte conteúdo:
book
book
paper
paper
article
article
magazine
Para remover as linhas repetidas, você pode executar o comando uniq:
$ uniq reading.txt
book
paper
article
magazine
Como você pode ver, uniq exibe uma versão do arquivo com as linhas adjacentes duplicadas removidas.
Opções Avançadas de Filtragem
O comando uniq também fornece várias opções para uma análise mais detalhada.
Para contar as ocorrências de cada linha, use a flag -c (count):
$ uniq -c reading.txt
2 book
2 paper
2 article
1 magazine
Para exibir apenas as linhas que não são repetidas (ou seja, são únicas), use a flag -u (unique):
$ uniq -u reading.txt
magazine
Inversamente, para exibir apenas as linhas que são repetidas, use a flag -d (duplicated):
$ uniq -d reading.txt
book
paper
article
A Importância da Ordenação
Um detalhe crítico sobre o comando uniq linux é que ele só detecta linhas duplicadas se elas estiverem diretamente adjacentes uma à outra. Se as duplicatas estiverem espalhadas pelo arquivo, uniq não as identificará.
Considere esta versão de reading.txt onde as duplicatas não são adjacentes:
book
paper
book
paper
article
magazine
article
Executar uniq neste arquivo produzirá um resultado surpreendente:
$ uniq reading.txt
book
paper
book
paper
article
magazine
article
Nenhuma linha foi removida porque nenhuma linha idêntica estava lado a lado. Para resolver isso, você deve primeiro ordenar o conteúdo do arquivo. Ao canalizar (pipe) a saída de sort para uniq, você garante que todas as linhas idênticas se tornem adjacentes, permitindo que uniq funcione corretamente. Esta combinação é um padrão poderoso e comum em scripts de shell.
$ sort reading.txt | uniq
article
book
magazine
paper
Este comando primeiro ordena as linhas alfabeticamente e, em seguida, uniq filtra as duplicatas, fornecendo uma lista limpa de entradas exclusivas.