Как разрезать огромный текстовый файл на куски

Попал мне в руки один интересный текстовый файл, размером около 100Гб. В файле присутствуют уникальные строки, дубли отсутствуют. Захотелось сделать скрипт для поиска по содержимому данного txt-файла. Написал небольшой код на питоне, но возникла проблема: скрипт работает некоторое время, после чего оперативная память пожирается полностью, комп начинает медленно, но верно ложиться. Поиск по текстовому файлу получается «тяжелым», видимо, потому что я не программист, а говнокодер. Покурил форумы, несколько сообществ питонистов в телеге, в итоге пришла мысль конвертировать файл в формат sqlite (хотя бы) — это, в теории, позволит ускорить поиск нужных строк в разы. Для конвертации txt-файлов в sqlite нашлась небольшая утилита termsql. Но при попытке конвертировать большой файл целиком, за один раз — комп снова нагибается.

В итоге мною было решено разрезать имеющийся исходный текстовый файл на куски (а уже после этого каждый кусок добавлять в базу sqlite). Как это сделать? В windows для похожей задачи я как-то использовал KeyWord Keeper, но тогда и файл был меньше, и сидел я на форточках, а не на линуксе, загружать вторую операционку (любимая семерочка) лень. Пришлось искать утилиту именно под Linux — и я её нашел! Родная линукс утилита split. Для того чтобы разрезать файл на куски можно использовать такие команды:

Чтобы разрезать txt-файл на 100 файлов:

split -n 100 sourcefile.txt

Чтобы разделить файл на файлы по 1 000 000 000 строк:

split -l 1000000000 sourcefile.txt

Другие варианты можно увидеть вызвав меню помощи/help:

split --help

Надеюсь, кому-нибудь данная информация будет полезной.

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *