Eu tenho um arquivo de texto contendo linhas como esta:
This is a thread 139737522087680
This is a thread 139737513694976
This is a thread 139737505302272
This is a thread 139737312270080
.
.
.
This is a thread 139737203164928
This is a thread 139737194772224
This is a thread 139737186379520
Como posso ter certeza da singularidade de cada linha?
NOTA: O objetivo é testar o arquivo, não modificá-lo se houver linhas duplicadas.
Awk solução:
Usando
sort
/uniq
:Para verificar apenas linhas duplicadas, use a
-d
opção para uniq. Isso mostrará apenas as linhas duplicadas, se nenhuma, não mostrará nada:TLDR
A pergunta original não era clara e dizia que o OP simplesmente queria uma versão exclusiva do conteúdo de um arquivo. Isso é mostrado abaixo. Na forma atualizada da pergunta, o OP agora está afirmando que simplesmente quer saber se o conteúdo do arquivo é exclusivo ou não.
Teste se o conteúdo do arquivo é único ou não
Você pode simplesmente usar
sort
para verificar se um arquivo é único ou contém duplicatas da seguinte forma:Exemplo
Digamos que eu tenha esses dois arquivos:
arquivo de amostra duplicado arquivo de amostra exclusivoAgora, quando analisamos esses arquivos, podemos dizer se eles são únicos ou contêm duplicatas:
arquivo de duplicatas de teste testar arquivo únicoPergunta original (conteúdo exclusivo do arquivo)
Pode ser feito apenas com
sort
:Eu geralmente
sort
o arquivo, então usouniq
para contar o número de duplicatas, então eusort
mais uma vez vejo as duplicatas na parte inferior da lista.Eu adicionei uma duplicata aos exemplos que você forneceu:
Como não leio a página de manual há
uniq
algum tempo, dei uma olhada rápida em busca de alternativas. O seguinte elimina a necessidade da segunda classificação, se você quiser apenas ver duplicatas:Se não houver duplicatas, todas as linhas são exclusivas:
Descrição: Ordena as linhas do arquivo para tornar as linhas repetidas consecutivas (sort)
Extrai todas as linhas consecutivas que são iguais (uniq -d).
Se houver alguma saída do comando acima (
[...]
), então (&&
) imprima uma mensagem.Isso não estaria completo sem uma resposta Perl!
Isso imprimirá cada linha não exclusiva uma vez: portanto, se não imprimir nada, o arquivo terá todas as linhas exclusivas.
Usando
cmp
esort
embash
:ou
Isso classificaria o arquivo duas vezes, assim como a resposta aceita.