Uma útil porta nativa do Win32 de sort
está em UnxUtils
Para significados mais complicados de "remover duplicatas", há Perl (et al).
Estou à procura de um editor de texto de janelas de código-fonte aberto (possivelmente de 64 bits) que me permita remover linhas duplicadas de um arquivo de texto extremamente grande (4 GB +).
O que você usa para remover linhas duplicadas de seus arquivos de texto grandes?
Uma útil porta nativa do Win32 de sort
está em UnxUtils
Para significados mais complicados de "remover duplicatas", há Perl (et al).
Se você tem o Cygwin ou o MinGW, você provavelmente poderia fazer isso com
cat file | sort | uniq >> outfile
assumindo que você deseja linhas exclusivas. Não sei como isso funcionará, pois classificar um conjunto de dados grande provavelmente levará muito tempo (ou se já estiver classificado, você pode simplesmente deixar essa parte para fora) ou como, exatamente, esses comandos funcionam (se eles consumirem 4 GB de ram ou não).
Você pode remover linhas duplicadas em um arquivo enorme com o PilotEdit.
Também postei essa resposta em uma pergunta duplicada sobre & gt ; Arquivos de 50 GB
Assumindo que todas as linhas sejam menores que 7kB e que você tenha o bash, o dd, o tail, o head, o sed e o sort instalados a partir do cygwin / unix:
{
i=0
while LANG= dd 2>/dev/null bs=1024 skip=${i}000 if=large_text_file count=1021 \
| LANG= sed -e '1d' -e '$d' | LANG= sort -u ;
do
i=$((1+$i))
done
LANG= dd 2>/dev/null bs=1024 skip=${i}000 if=large_text_file count=1021 \
| LANG= tail -n 1
LANG= head -n 1 large_text_file
} | LANG= sort -u > your_result
Isso divide o arquivo em blocos de 1024000 bytes e adiciona também 3 * 7 * 1024 bytes ("21" em 1021) do próximo bloco. Como as divisões podem cortar uma linha, as primeiras (1d) e últimas ($ d) linhas de cada cunk são destruídas (sed).
Então, para compensar, algo contendo o último pedaço é extraído novamente e apenas sua última linha é mantida (tail -n 1), e a primeira linha também é extraída novamente (head -n 1).
Quando o loop falha, o último fragmento foi extraído.
sort -u pode ser visto como um compressor, mas apenas ordena sua entrada e pula duplicatas.
O primeiro "sort" comprime todos os pedaços. O segundo sort
comprime novamente as concatenações de todos esses trechos (e esse segundo sort
está faltando no código acima desde a terceira edição, desculpe).
Você disse que arquivo de texto, mas eu assumo binário de qualquer maneira, daí o LANG = (fica tudo mais rápido também).
Eu encontrei uma ferramenta chamada PilotEdit que foi capaz de fazer isso.