Opções Avançadas do uniq e Aplicações Práticas
Agora que você entende o uso básico do uniq e como combiná-lo com sort, vamos explorar algumas opções adicionais do comando uniq que o tornam ainda mais poderoso para tarefas de processamento de dados.
Contando Ocorrências com -c
A opção -c conta o número de ocorrências de cada linha. Isso é útil quando você deseja saber quantas vezes cada linha única aparece em seu arquivo:
sort ~/project/duel_log.txt | uniq -c
Você deve ver uma saída como esta:
2 potion
2 shield
2 sword
Isso mostra que cada item aparece duas vezes em nosso arquivo original.
Encontrando Apenas Linhas Duplicadas com -d
Se você estiver interessado apenas em encontrar linhas duplicadas (linhas que aparecem mais de uma vez), pode usar a opção -d:
sort ~/project/duel_log.txt | uniq -d
Saída:
potion
shield
sword
Como todos os itens em nosso arquivo têm duplicatas, todos eles são listados na saída.
Criando um Arquivo com Apenas Entradas Únicas
Vamos criar um novo arquivo com conteúdo mais variado para demonstrar melhor o comando uniq:
echo -e "apple\napple\napple\nbanana\ncherry\ncherry\ngrape" > ~/project/fruits.txt
Vamos examinar este arquivo:
cat ~/project/fruits.txt
Saída:
apple
apple
apple
banana
cherry
cherry
grape
Agora, vamos usar a opção -u para encontrar entradas que aparecem exatamente uma vez:
sort ~/project/fruits.txt | uniq -u
Saída:
banana
grape
Isso mostra que "banana" e "grape" aparecem apenas uma vez em nosso arquivo.
Aplicação no Mundo Real: Análise de Logs
Vamos criar um arquivo de log simples para simular uma aplicação do mundo real:
echo -e "INFO: System started\nERROR: Connection failed\nINFO: User logged in\nWARNING: Low memory\nERROR: Connection failed\nINFO: System started" > ~/project/system.log
Agora, vamos analisar este arquivo de log para descobrir quais tipos de mensagens aparecem e quantas vezes:
cat ~/project/system.log | sort | uniq -c
A saída deve ser semelhante a:
2 ERROR: Connection failed
2 INFO: System started
1 INFO: User logged in
1 WARNING: Low memory
Isso fornece uma visão geral rápida dos tipos de eventos em seu arquivo de log e suas frequências.
Você também pode extrair apenas os tipos de mensagens (INFO, ERROR, WARNING) usando o comando cut:
cat ~/project/system.log | cut -d: -f1 | sort | uniq -c
Saída:
2 ERROR
3 INFO
1 WARNING
Esta análise mostra que, de 6 entradas de log, 3 são mensagens INFO, 2 são mensagens ERROR e 1 é uma mensagem WARNING.
Esses exemplos demonstram como a combinação de comandos simples como sort, uniq e cut pode criar pipelines de processamento de dados poderosos no Linux.