Еще один вариант - загрузить файл в базу данных. Например, MySQL и MySQL Workbench.
Базы данных являются идеальными кандидатами для работы с большими файлами
Если ваш входной файл содержит только слова, разделенные новой строкой, это не должно быть сложно.
После того, как вы установили базу данных и MySQL Workbench, это то, что вам нужно сделать.
Сначала создайте схему (предполагается, что слова не будут длиннее 255 символов, хотя вы можете изменить это, увеличив значение аргумента).
Первый столбец "idwords" является первичным ключом.
CREATE SCHEMA `tmp` ;
CREATE TABLE `tmp`.`words` (
`idwords` INT NOT NULL AUTO_INCREMENT,
`mywords` VARCHAR(255) NULL,
PRIMARY KEY (`idwords`));
Во-вторых, импортируйте данные: EG Это импортирует все слова в таблицу (этот шаг может занять некоторое время. Я бы посоветовал сначала запустить тест с файлом небольших слов, и как только вы убедитесь, что формат такой же, как и у большего (укоротите таблицу .. IE очистить его и загрузить полный набор данных).
LOAD DATA LOCAL INFILE "C:\\words.txt" INTO TABLE tmp.words
LINES TERMINATED BY '\r\n'
(mywords);
Эта ссылка может помочь получить правильный формат для загрузки.
https://dev.mysql.com/doc/refman/5.7/en/load-data.html
Например, если вам нужно было пропустить первую строку, вы должны сделать следующее.
LOAD DATA LOCAL INFILE "H:\\words.txt" INTO TABLE tmp.words
-- FIELDS TERMINATED BY ','
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES
(mywords);
Наконец сохраните отсортированный файл. Это может занять некоторое время, в зависимости от вашего компьютера.
SELECT tmp.words.mywords
FROM tmp.words
order by tmp.words.mywords asc
INTO OUTFILE 'C:\\sorted_words.csv';
Вы также можете искать данные по своему усмотрению.
EG Это даст вам первые 50 слов в порядке возрастания (начиная с 0-го или первого слова).
SELECT tmp.words.mywords
FROM tmp.words
order by tmp.words.mywords asc
LIMIT 0, 50 ;
Удачи
Пит