Я сортирую огромный файл, около 400 гигабайт. У меня заканчивается свободное место на диске, и я должен что-то сделать быстро.

Давайте предположим, что оригинальный файл называется original_file. Таким образом, я выполняю (упрощенно) это как «sort original_file | gzip -c> output_file»

Я использую /home /tmp как временный каталог. Из того, что я вижу, есть много промежуточных файлов, например:

tmpA465

tmpB154

...

и так далее.

Самые маленькие имеют размер 12 мегабайт.

Самые большие имеют ~ 182 мегабайта.

Итак, похоже, что команда "sort" уже разбила исходный файл на маленькие части и отсортировала их, а теперь объединяет их в более крупные части (которые, в конечном итоге, будут также отсортированы). Пожалуйста, поправьте меня, если я ошибаюсь.

Могу ли я удалить исходный файл прямо сейчас, не прерывая процесс сортировки? Я ждал этого несколько дней, и важно, чтобы команда "sort" не потерпела неудачу, и я, наконец, получу файл результатов.

ОС Ubuntu server 13.04, x64.

Спасибо!

1 ответ1

0

Если у вас есть последняя версия sort (8.11+), вы можете ускорить процесс с sort --parallel=N : вы поделитесь работой с N ядрами. Это действительно может повысить вашу работу.

sort --parallel=N 

Что касается того, что касается алгоритма сортировки, вы должны увидеть, например, Алгоритмические подробности команды сортировки UNIX.
Он использует вариацию сортировки Merge: это означает, что она сортирует в блоке разделение всей работы, а после объединения сортирует блоки. Вы можете найти кусочки на /tmp .

Это читает части, которые вписываются в память. Если вы попытаетесь суммировать размер всех найденных фрагментов tmp , вы получите необязательное значение, связанное с процентом выполненной работы. Но если это намного меньше, вы можете сделать вывод, что вам все равно нужен файл.

Я боюсь, что вы не можете знать размер обработанного вывода до последнего прохода. Ключевой момент должен быть в последнем фрагменте сортировки, когда он объединит 2 только что отсортированные части. Можно приступить к созданию первой половины и после второй. Или он может продолжить обработку параллельно двух половин. Но в 1-м случае он будет занимать меньше места на жестком диске. Итак, я полагаю, вы не можете удалить файл.

Чтобы получить окончательный ответ на ваши сомнения, вы должны увидеть код, загружающий вашу версию sort из gnu или взгляд из git.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .