Existe um comando unix que pode verificar se existem duas linhas em um arquivo são iguais?
Por exemplo, considere um arquivo sentences.txt
This is sentence X
This is sentence Y
This is sentence Z
This is sentence X
This is sentence A
This is sentence B
Vemos que a frase
This is sentence X
é repetido.
Existe algum comando que possa detectar isso rapidamente, para que eu possa executá-lo assim -
$ cat sentences.txt | thecommand
Line 1:This is sentence X
Line 4:This is sentence X
text-processing
search
Código Azul
fonte
fonte
sort sentences.txt | uniq -d | grep -nFxf - sentences.txt
seria um pouco mais eficiente e evitaria possíveisarg list too long
problemas.Não é exatamente o que você deseja, mas você pode tentar combinar
sort
euniq -c -d
:2
Aqui está o número de duplicações encontradas para a linha, deman uniq
:fonte
Se o conteúdo do arquivo couber na memória, isso
awk
é bom. O one-liner padrão em comp.lang.awk (não consigo pesquisar uma instância nesta máquina, mas há várias todos os meses) para detectar apenas que existe duplicação, é oawk 'n[$0]++'
que conta as ocorrências de cada valor de linha e imprime qualquer ocorrência diferente do primeiro, porque a ação padrão éprint $0
.Para mostrar todas as ocorrências, incluindo a primeira, em seu formato, mas possivelmente em ordem mista, quando mais de um valor for duplicado, fica um pouco mais complicado:
Mostrado em várias linhas para maior clareza, você geralmente executa em conjunto em uso real. Se você fizer isso com frequência, poderá colocar o
awk
script em um arquivoawk -f
ou, é claro, tudo em um script de shell. Como o mais simples,awk
isso pode ser feito de maneira muito semelhanteperl -n[a]
.fonte