Eu quero saber a diferença entre sort -u e uniq. Eu tentei o comando abaixo para obter a contagem das strings exclusivas em um arquivo, sort -u e uniq fornece a mesma saída do meu conhecimento. Então, por que forneceu duas contagens diferentes.
cat test.txt | sort -u | wc -l
351
cat test.txt | uniq | wc -l
370
Por que ele mostra duas contagens de linhas diferentes?
uniq
precisa que a entrada já esteja classificada. Duplicatas que não aparecem sequencialmente não serão eliminadas:Estritamente falando,
uniq
não precisa de entrada classificada - mas é verdade queuniq
apenas removerá linhas duplicadas consecutivas.A diferença é que:
sort
classifica um arquivo e (usando sua-u
opção) também pode eliminar linhas duplicadas, que agora serão todas consecutivas à medida que foram classificadas.uniq
exclui linhas duplicadas consecutivas. Ele também tem opções para gerar apenas linhas duplicadas ( uma de cada com-d
, ou todos os dupes com-D
), e pode gerar uma contagem de quantas vezes uma linha apareceu na entrada (-c
). Ele também tem outras opções para controlar como os dupes são detectados, como pular campos e comparar apenas N caracteres em uma linha.a saída de
sort
pode, é claro, ser canalizadauniq
se você quiser combinar os recursos de ambos.sort -u
é útil quando você não se preocupa em preservar a ordem do arquivo de entrada ou realmente deseja classificá-lo - mas não deseja duplicatas na saída.uniq
é útil quando é necessário preservar a ordem de entrada, ou quando você só se preocupa com dupes consecutivos - por exemplo, quando você deseja uniq um arquivo já classificado (não há necessidade de desperdiçar CPU e IOPS classificando-o novamente); ou remova todas as linhas consecutivas, exceto uma, entre parágrafos (por exemplo,pdftotext
muitas vezes produz muito espaço em branco entre linhas ou parágrafos -uniq
pode remover os extras, facilitando a leitura ou edição).