Ferramenta mais rápida 'uniq' no linux

7

Eu tenho um arquivo de texto grande (1,5 G),

Eu quero saber qual é a ferramenta mais rápida e confiável no Linux.

Eu costumo usar:

awk '!x[$0]++' file.txt

Mas quando eu uso o comando htop , vejo que o uso da minha memória está aumentando.

Eu quero saber qual é a mais rápida e confiável para arquivos grandes.

uniq?
sort?
sed?
awk?

Por quê?

    
por MLSC 10.05.2014 / 14:05

2 respostas

16

Vamos considerar como cada solução funciona.

  • uniq Isso requer que o arquivo já esteja classificado. Se não, você tem que passar por sort primeiro, o que significa que sort tem que ler todo o arquivo na memória, reordená-lo ( O(n log n) ) e, em seguida, gravá-lo no pipe. O trabalho de uniq é muito barato, pois só tem que comparar linhas adjacentes de sua entrada.

  • sort -u Isso combina o trabalho de sort | uniq . Isso tem que coletar todas as entradas únicas na memória como o script awk , mas também desperdiça tempo classificando-as antes de produzir a saída. Isso é O(n log n) , embora nesse caso n seja o número de itens exclusivos, não todos os insumos. Então é melhor que o tubo.

  • sed Não sei por que você listou isso, pois não consigo pensar em uma boa maneira de fazer isso com sed . Talvez se você primeiro classificar e canalizar para um script sed , há uma maneira de comparar linhas adjacentes. Portanto, sed estaria apenas fazendo o que o uniq faz e uniq provavelmente o faria da forma mais eficiente possível.

  • awk Esta é provavelmente a melhor, porque só faz a quantidade mínima de trabalho necessária. À medida que lê cada linha, faz uma pesquisa de hash eficiente para ver se a linha já está em sua memória e armazena apenas as linhas exclusivas como chaves hash e um contador como o valor. (Se a linha não estava presente anteriormente, a condição será verdadeira, então a linha será impressa. Caso contrário, não será.) Isso usa O(n) time e O(uniq n) memory.

Todo método usará uma quantidade considerável de memória, seja para ordenar a entrada ou para controlar quais entradas viram, para que possam remover duplicatas.

    
por 10.05.2014 / 14:59
0

Descobri que esse tipo parece ser a ferramenta uniq mais rápida mostrada aqui - > A maneira mais rápida de excluir duplicatas em grandes listas de palavras?

    
por 28.08.2015 / 01:00