2012-02-23 4 views
0

У меня есть огромный (примерно 4 ГБ) текстовый файл, который нужно сортировать. Он настолько огромен, что у него 6 тысяч кубов и тысяч строк. Очень просто сортировать скрипт bash. Тем не менее, мне нужна кросс-платформа java-программа для сортировки файла. Я использовал this, но я получил тот же файл результата, что и отсортированный выходной файл.Сортировка файла с разделителями табуляции на основе столбца в java

Часть входного файла для сортировки

SNP_ID Sub_0001 Sub_0002 Sub_0003 Sub_0004 ... 
cnv3p502 0 0 0 0 
rs3115860 1 0 1 1   
rs3131967 1 0 1 1   
rs3115850 1 0 1 1 
rs12124819 0 0 0 0 
rs2519031 1 0 1 1 
. 
. 
. 

Мне нужно сортировать эту вкладку разделителей файл по первой колонке в Java без использования системных команд, который выполняет команду Unix. Я буду благодарен за вашу помощь.

+0

Почему вы не делаете внешний вид? http://en.wikipedia.org/wiki/External_sorting –

ответ

0

Как говорится в комментарии Дхрува, одним из возможных подходов является использование внешней сортировки.

Что вы хотите сделать, это создать объект, который инкапсулирует каждую строку вашего файла и создавать собственный сопоставитель, который сортируется по необходимым критериям. Имейте в виду, что вам не нужно сопоставлять каждый столбец строки с объектом Object, вы можете просто иметь свойство, содержащее первый столбец каждой строки для использования в качестве свойства сравнения, и другое свойство, содержащее всю строку.

Загрузите фрагмент файла по строке в коллекцию указанного типа объекта. Сортируйте его, используя свой собственный компаратор. Напишите коллекцию во временный файл. Повторяйте до конца исходного файла.

В результате вы получите несколько файлов меньшего размера, отсортированные по отдельности. Теперь вы используете шаг «merge» для внешней сортировки для создания нового файла, содержащего все отсортированные строки. Прочитайте первую строку каждого файла, напишите наименьшее из них в отсортированном файле, прочитайте новую строку из файла с наименьшим. Повторяйте до тех пор, пока все временные файлы не будут пустыми.

Выполнено.

Смежные вопросы