Как разделить текстовый файл на части с равным количеством строк?
Доброго времени суток.
Имеется текстовый файл, количество строк в исходном тексте неизвестно, может пятьдесят, а может тысыча.
Нужно разбить его на несколько частей, так, чтобы количество строк в выходных файлах было одинаково (ну ± одна строка). Количество частей задается в самом батнике.
Поскольку я плохо разбираюсь в CMD, навалял такую белиберду на пять частей:
spoiler
:movech for %%I in (list.txt) do if %%~zI==0 (goto exit) @echo off setlocal enabledelayedexpansion set file=list.txt set first=1 set second=1 set out=V_Obrabotku1.txt set counter=0 >"%out%" for /f "usebackq tokens=*" %%A IN ("%file%") DO ( set /a counter=!counter!+1 if !counter! GEQ %first% ( if !counter! LEQ %second% ( echo.%%A>>"%out%" ) ) ) set n=1 set File_Src=list.txt set file_Dest=textfile_out.txt more +%n% < "%File_Src%" >"%file_Dest%" move /y textfile_out.txt list.txt ::V_Obrabotku2 set file=list.txt set first=1 set second=1 set out=V_Obrabotku2.txt set counter=0 >"%out%" for /f "usebackq tokens=*" %%A IN ("%file%") DO ( set /a counter=!counter!+1 if !counter! GEQ %first% ( if !counter! LEQ %second% ( echo.%%A>>"%out%" ) ) ) set n=1 set File_Src=list.txt set file_Dest=textfile_out.txt more +%n% < "%File_Src%" >"%file_Dest%" move /y textfile_out.txt list.txt ::V_Obrabotku3 set file=list.txt set first=1 set second=1 set out=V_Obrabotku3.txt set counter=0 >"%out%" for /f "usebackq tokens=*" %%A IN ("%file%") DO ( set /a counter=!counter!+1 if !counter! GEQ %first% ( if !counter! LEQ %second% ( echo.%%A>>"%out%" ) ) ) set n=1 set File_Src=list.txt set file_Dest=textfile_out.txt more +%n% < "%File_Src%" >"%file_Dest%" move /y textfile_out.txt list.txt ::V_Obrabotku4 set file=list.txt set first=1 set second=1 set out=V_Obrabotku4.txt set counter=0 >"%out%" for /f "usebackq tokens=*" %%A IN ("%file%") DO ( set /a counter=!counter!+1 if !counter! GEQ %first% ( if !counter! LEQ %second% ( echo.%%A>>"%out%" ) ) ) set n=1 set File_Src=list.txt set file_Dest=textfile_out.txt more +%n% < "%File_Src%" >"%file_Dest%" move /y textfile_out.txt list.txt ::V_Obrabotku5 set file=list.txt set first=1 set second=1 set out=V_Obrabotku5.txt set counter=0 >"%out%" for /f "usebackq tokens=*" %%A IN ("%file%") DO ( set /a counter=!counter!+1 if !counter! GEQ %first% ( if !counter! LEQ %second% ( echo.%%A>>"%out%" ) ) ) set n=1 set File_Src=list.txt set file_Dest=textfile_out.txt more +%n% < "%File_Src%" >"%file_Dest%" move /y textfile_out.txt list.txt Goto movech :exit
Скрипт работает, но уж больно громоздкий, да и тысячу строк довольно долго обрабатывает.
Подскажите, пожалуйста, более изящное решение. Заранее спасибо.
- Вопрос задан более трёх лет назад
- 15099 просмотров
4 комментария
Средний 4 комментария
Разделить файл на части
Программа для онлайн деления любых файлов (Splitter), не требующая установки и не имеющая ограничение по размеру файла. Для разделения файла , просто задайте необходимое количество частей на которое нужно разделить. Затем нажмите «Разделить файл». После деления в нижней части интерфейса, появятся ссылки для сохранения, частей файла. Эта программа может работать офлайн, так как загрузки в облако не происходит. Для деления фалов размером в несколько гигабайт потребуются доли секунды. После этого вам может понадобится посмотреть файл большого размера.
Как разделить текстовый файл на несколько файлов определенного размера?
Бывает необходимо разделить текстовый файл большого размера на несколько маленьких файлов. Ниже представлены функции при помощи которых можно разделить файл:
Разделяет указанный файл на несколько частей (файлов) заданного размера. Имя каждой части образуется из имени исходного файла с прибавлением ему расширения в виде порядкового номера, включая лидирующие нули.
// для разделения файла на части, размером каждой равной одному мегабайту Код 1C v 8.х
РазделитьФайл("C:WindowsTempPresentation.ppt", 1024 * 1024 )
В результате получим несколько файлов:
А для объединения файлов в один используйте:
При объединении файлов по маске необходимо задать маску поиска файлов и имя файла, который требуется создать.
Например, в каталоге «C:\MySplittedData\» содержатся файлы:
Выполнение кода вида:
ОбъединитьФайлы("C:\MySplittedData\BigSplittedData.zip.*", "C:\MySplittedData\BigSplittedData.zip")
приведет к объединению вышеперечисленных файлов в файл с заданным именем.
Внимание! Файлы объединяются в порядке возрастания имен.
Код 1C v 8.3
МассивИмен = Новый Массив(3); МассивИмен.Добавить("C:\Windows\ \Presentation.ppt.1");МассивИмен.Добавить("C:\Windows\Temp\Presentation.ppt.2"); МассивИмен.Добавить("C:\Windows\Temp\Presentation.ppt.3"); ОбъединитьФайлы(МассивИмен,"C:\Windows\Temp\Presentation.ppt");
Как разделить большой файл на части
Иногда может потребоваться разделить большой файл на несколько маленьких частей. Например, если файл настолько большой, что не может быть записан на внешний диск или флешку, так как файловая система не поддерживает файлы такого размера.
Для того, чтобы разделить большой файл на несколько частей можно воспользоваться командой split .
После выполнения команды split , мы получим несколько файлов меньшего размера. Если их объединить, то снова получим исходный большой файл. Объединение файлов выполняется командой cat .
Рассмотрим, как разбить файл на несколько частей и как потом объединить файлы, чтобы получить исходный файл.
Как разделить файл на части

Используем команду split , чтобы разделить файл на несколько более маленьких:
split --bytes=1024M file.mkv file.part.
- file.mkv — имя исходного большого файла, который необходимо разбить на части.
- file.part. — префикс (название) имен файлов, на которые будет разбит исходный файл. То есть в нашем случае мы разобьём исходный файл на файлы file.part.aa , file.part.ab , file.part.ac , .
- —bytes=1024M — задает размер файлов, на которые разбивается исходный файл. В данном случае мы разбиваем исходный большой файл на файлы размером 1024 мегабайта. Для задания размера можно использовать символы:
- K или k — килобайты
- M или m — мегабайты
- G или g — гигабайты
Как объединить файлы в один

После того, как мы разбили файл на части, их можно объединить, чтобы получить исходный файл. Для этого используем команду:
cat file.part.* > file.mkv- file.part.* — маска имени файлов кусочков, которые мы объединяем.
- file.mkv — название (путь) до файла, в который мы объединяем наши файлы-кусочки.
Как разбить текстовый файл по строкам
Если вам нужно разделить текстовый файл, на несколько файлов по количеству строк, то мы можем использовать команду split с опцией -l , которая задает количество строк в каждом файле, на которые мы разбиваем исходный файл.
split -l 1000 textfile.txt textfile.part.Мы разделили исходный текстовый файл, на файлы по 1000 строк в каждом. Объединение файлов выполняется также, как описано в предыдущем параграфе.
Заключение
Мы рассмотрели простейшие способы разделения файла на несколько частей с использованием командной строки.
Для разделения файлов используется команда split . Для объединения файлов мы использовали команду cat .
Чтобы получить более подробную информацию по команде split , выполните в терминале:
man splitОписанный выше способ можно использовать как в Linux, так и в MacOS.