Есть файл размером 50 ГБ и 2 ГБ оперативной памяти. Как найти все строки с определённым паттерном и вывести только уникальные, отсортированные строки, не уронив систему?

Читайте файл потоково, отбирайте совпадения и используйте внешнюю сортировку с удалением дублей. Все 50 ГБ и множество уникальных строк нельзя одновременно загружать в 2 ГБ RAM.

Короткий ответ

Что ответить на собеседовании

Читайте файл потоково, отбирайте совпадения и используйте внешнюю сортировку с удалением дублей. Все 50 ГБ и множество уникальных строк нельзя одновременно загружать в 2 ГБ RAM.

Подробный разбор

Ответ с пояснениями

Читайте файл потоково, отбирайте совпадения и используйте внешнюю сортировку с удалением дублей. Все 50 ГБ и множество уникальных строк нельзя одновременно загружать в 2 ГБ RAM.

Для обычных текстовых строк и буквального паттерна пример GNU-инструментов:

set -o pipefail
LC_ALL=C grep -F -- 'pattern' input.txt |
    LC_ALL=C sort -u -S 256M --parallel=1 > unique-sorted.txt

sort создаёт временные отсортированные части и сливает их. Нужен достаточный свободный диск; -S задаёт основной буфер, а не жёсткий предел всей памяти процесса. LC_ALL=C выбирает побайтовый порядок. Для регулярного выражения нужен другой режим grep. Если одна строка сама превышает RAM, стандартные построчные инструменты требуют отдельного решения с ограничением длины или дисковым представлением.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее