Высокопроизводительная утилита командной строки, написанная на Rust, для эффективного перемешивания строк в очень больших текстовых файлах.
Этот инструмент разработан для работы с файлами, которые не помещаются в оперативную память, используя систему чанков (частей) для обработки данных с минимальным потреблением RAM.
- Эффективность по памяти: Обрабатывает гигантские файлы (многогигабайтные) с низким потреблением памяти благодаря разделению на чанки.
- Высокая производительность: Оптимизирован для скорости с использованием буферизованного ввода-вывода и многопоточной обработки.
- Удобство использования: Интерактивное меню для выбора файла в текущей директории.
- Качественное перемешивание: Реализует двухэтапное перемешивание: сначала строки перемешиваются внутри каждого чанка, а затем чанки случайным образом объединяются в итоговый файл.
Для сборки и запуска проекта вам понадобится установленный Rust toolchain.
-
Клонируйте репозиторий:
git clone https://github.com/lonesomestranger/file-shuffler-rust.git cd file-shuffler-rust -
Поместите ваш файл в директорию проекта: Скопируйте большой текстовый файл, который вы хотите перемешать, в ту же папку, где находится проект.
-
Запустите приложение: Для максимальной производительности рекомендуется запускать в release-режиме.
cargo run --release
-
Выберите файл: В терминале появится меню со списком файлов в текущей директории. Используйте стрелки для выбора нужного файла и нажмите
Enter.? Select input file ❯ my_large_dataset.txt another_file.log -
Дождитесь завершения: Программа начнет обработку. В консоли будет отображаться прогресс перемешивания каждого чанка и общее время выполнения.
-
Найдите результат: Перемешанный файл будет сохранен в той же директории с именем
shuffled_ИМЯ_ВАШЕГО_ФАЙЛА.txt.
Процесс перемешивания разделен на несколько этапов для обеспечения высокой производительности и низкого потребления памяти:
- Разделение на чанки: Входной файл читается и делится на чанки заданного размера (по умолчанию 512 МБ).
- Перемешивание чанков: Строки внутри каждого чанка перемешиваются в памяти и записываются во временный файл в папке
temp_chunks. - Слияние: Временные файлы-чанки объединяются в один итоговый файл. Процесс слияния также рандомизирован: утилита случайным образом выбирает, из какого чанка взять следующую строку.
- Очистка: Временная директория
temp_chunksудаляется после успешного завершения.
Вы можете настроить производительность, изменив константы в верхней части файла src/main.rs:
CHUNK_SIZE: Размер каждого чанка в байтах. Увеличение может ускорить процесс на системах с большим количеством RAM.BUF_CAPACITY: Размер буфера для операций чтения/записи.
Вклад в проект приветствуется! Не стесняйтесь открывать issue или отправлять pull request.
Также доступен на Codeberg.
Этот проект распространяется под лицензией MIT. Подробности смотрите в файле LICENSE.