Uma outra opção é carregar o arquivo em um banco de dados. EG MySQL e MySQL Workbench.
Os bancos de dados são candidatos perfeitos para trabalhar com arquivos grandes
Se o seu arquivo de entrada contiver apenas palavras separadas por uma nova linha, isso não deve ser difícil.
Depois de instalar o banco de dados e o MySQL Workbench, é isso que você precisa fazer.
Primeiro, crie o esquema (isso pressupõe que as palavras não terão mais que 255 caracteres, embora você possa alterá-lo aumentando o valor do argumento). A primeira coluna "idwords" é uma chave primária.
CREATE SCHEMA `tmp` ;
CREATE TABLE `tmp`.`words` (
`idwords` INT NOT NULL AUTO_INCREMENT,
`mywords` VARCHAR(255) NULL,
PRIMARY KEY (`idwords`));
Em segundo lugar, importe os dados: EG Isso importará todas as palavras para a tabela (essa etapa pode demorar um pouco para ser concluída. Meu conselho seria executar um teste com um arquivo de palavras pequenas primeiro e depois de ter certeza de que o formato é o mesmo que o maior (truncar a tabela. IE Limpe-o e carregue o conjunto de dados completo).
LOAD DATA LOCAL INFILE "C:\\words.txt" INTO TABLE tmp.words
LINES TERMINATED BY '\r\n'
(mywords);
Esse link pode ajudar a obter o formato correto para o carregamento.
https://dev.mysql.com/doc/refman/5.7/en/load-data.html
EG Se você precisou pular a primeira linha, faria o seguinte.
LOAD DATA LOCAL INFILE "H:\\words.txt" INTO TABLE tmp.words
-- FIELDS TERMINATED BY ','
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES
(mywords);
Por fim, salve o arquivo classificado. Isso pode demorar um pouco, dependendo do seu PC.
SELECT tmp.words.mywords
FROM tmp.words
order by tmp.words.mywords asc
INTO OUTFILE 'C:\\sorted_words.csv';
Você também pode pesquisar os dados conforme desejar. Por exemplo, as 50 primeiras palavras serão exibidas em ordem crescente (a partir da 0ª ou da primeira palavra).
SELECT tmp.words.mywords
FROM tmp.words
order by tmp.words.mywords asc
LIMIT 0, 50 ;
Boa sorte
Pete