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.
text-processing
snr
fonte
fonte
Respostas:
fonte
uniq
em vez desort -u
uniq
seria um grande erro; apenas desduplica as linhas adjacentes!sort <file> | uniq -d
imprimirá as duplicatas.Solução Awk:
fonte
echo
para dentroEND
?&& echo
ou|| echo
é uma convenção nas respostas para indicar que um comando faz a coisa certa com o código de status de saída. O importante é oexit(1)
. Idealmente, você usaria isso comoif has_only_unique_lines file; then ...
, nãoif [[ $(has_only_unique_lines file) = "no dupes" ]]; then ...
, isso seria bobo.sort
will também, independentemente de haver dupes ou não, certo? Como isso está economizando memória?Usando
sort
/uniq
:Para verificar apenas linhas duplicadas, use a
-d
opção uniq. Isso mostrará apenas as linhas duplicadas; caso contrário, não mostrará nada:fonte
TLDR
A pergunta original não era clara e lia-se que o OP simplesmente desejava uma versão exclusiva do conteúdo de um arquivo. Isso é mostrado abaixo. Na forma atualizada da pergunta, o OP agora está declarando que ele / ela simplesmente deseja saber se o conteúdo do arquivo é único ou não.
Teste se o conteúdo do arquivo é único ou não
Você pode simplesmente usar
sort
para verificar se um arquivo é exclusivo ou contém duplicatas como:Exemplo
Digamos que eu tenho 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 arquivo exclusivo de testePergunta original (conteúdo exclusivo do arquivo)
Pode ser feito com apenas
sort
:fonte
Eu costumo
sort
usar o arquivo, depois usouniq
para contar o número de duplicatas e, depois,sort
vejo as duplicatas no final da lista.Adicionei uma duplicata aos exemplos que você forneceu:
Como não li a página do manual por
uniq
um tempo, dei uma olhada rápida em qualquer alternativa. O seguinte elimina a necessidade do segundo tipo, se você deseja apenas ver duplicados:fonte
Se não houver duplicatas, todas as linhas serão exclusivas:
Descrição: classifique as linhas do arquivo para tornar as linhas repetidas consecutivas (classificar)
Extraia todas as linhas consecutivas iguais (uniq -d).
Se houver alguma saída do comando acima (
[...]
), (&&
) imprima uma mensagem.fonte
Isso não seria 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.
fonte
Usando
cmp
esort
embash
:ou
Isso ordenaria o arquivo duas vezes, assim como a resposta aceita.
fonte