Bash Scripting

Removendo Linhas Duplicadas em Bash Eficientemente

Spread the love

Remover linhas duplicadas de um arquivo de texto é uma tarefa comum em scripts Bash. Este artigo explora dois métodos eficientes: usando sort e uniq, e aproveitando o poder do awk.

Sumário

Usando sort e uniq

Esta abordagem combina duas utilidades Unix fundamentais para uma solução simples. sort organiza as linhas alfabeticamente, um pré-requisito para uniq, que então elimina duplicatas consecutivas. A ordem da *primeira* ocorrência de cada linha é preservada.

Aqui está o comando:


sort file.txt | uniq > file_unique.txt

Isso direciona a saída ordenada de file.txt para uniq, salvando as linhas únicas em file_unique.txt. O arquivo original permanece intocado.

Exemplo:

Se file.txt contém:


apple
banana
apple
orange
banana
grape

file_unique.txt conterá:


apple
banana
grape
orange

Usando o comando awk

awk oferece uma solução mais flexível e poderosa, particularmente útil quando a preservação da ordem original das linhas é crucial. Ele emprega um array associativo para rastrear as linhas encontradas.

O comando é notavelmente conciso:


awk '!seen[$0]++' file.txt > file_unique.txt

Vamos analisar:

  • $0 representa toda a linha atual.
  • seen[$0] acessa um elemento no array seen, usando a linha como chave.
  • ++ pós-incrementa o valor (inicialmente 0).
  • ! nega o resultado; a linha é impressa apenas se for encontrada pela primeira vez (quando seen[$0] é 0).

Este método mantém a ordem original das linhas.

Exemplo:

Usando o mesmo file.txt, a saída em file_unique.txt será:


apple
banana
orange
grape

Conclusão:

Ambos os métodos removem linhas duplicadas efetivamente. sort | uniq é mais simples para cenários básicos, enquanto awk fornece flexibilidade e controle superiores, especialmente para preservar a ordem original ou lidar com necessidades mais complexas de remoção de duplicatas.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *