Как разбить текстовый файл на несколько частей notepad

Обновлено: 06.07.2024

У меня есть большой (по количеству строк) простой текстовый файл, который я хотел бы разбить на более мелкие файлы, в том числе по количеству строк. Таким образом, если мой файл имеет около 2M строк, я бы хотел разделить его на 10 файлов, содержащих 200k строк, или 100 файлов, содержащих 20k строк (плюс один файл с остатком; быть равномерно делимым не имеет значения).

Я мог бы сделать это довольно легко в Python, но мне интересно, есть ли какой-нибудь способ ниндзя сделать это, используя утилиты bash и unix (в отличие от ручного зацикливания и подсчета / разбиения строк).

Из любопытства, после того, как они «разделены», как их «объединить»? Что-то вроде "кошка часть2 >> часть1"? Или есть еще одна утилита ниндзя? возражаете обновить свой вопрос? да, кошка коротка для конкатенации. В целом, урок полезен для поиска соответствующих команд. IE видит вывод: Кроме того, пользователи OS X должны убедиться, что их файл содержит разрывы строк / индикаторы конца строки (LF) в стиле LINUX или UNIX вместо MAC OS X - индикаторы конца строки (CR) в стиле - разделение и Команды csplit не будут работать, если ваши подобные разрывы - это возврат каретки вместо LineFeeds. TextWrangler от BareBones поможет вам в этом, если вы работаете в Mac OS. Вы можете выбрать, как вы хотите, чтобы ваши символы разрыва строки выглядели. когда вы сохраняете (или сохраняете как . ) ваши текстовые файлы.

Вы смотрели на команду split?

Вы могли бы сделать что-то вроде этого:

который создаст файлы каждый с 200000 строк с именем xaa xab xac .

Другой вариант, разделенный по размеру выходного файла (по-прежнему разбивается на разрывы строк):

создает файлы output_prefix01 output_prefix02 output_prefix03 . размером не более 20 мегабайт.

Вы также можете разделить файл по размеру: split -b 200m filename (м для мегабайт, к для килобайт или без суффикса для байтов) разделить по размеру и убедиться, что файлы разбиты на разрывы строк: разделить -C 200m имя файла split дает искаженный вывод с помощью ввода Unicode (UTF-16). По крайней мере, на Windows с версией, которую я имею. @geotheory, обязательно следуйте совету LeberMac ранее в теме о первом преобразовании концов строк CR (Mac) в окончания строк LR (Linux) с использованием TextWrangler или BBEdit. У меня была та же проблема, что и у вас, пока я не нашел этот совет. -d опция недоступна в OSX, используйте gsplit вместо этого. Надеюсь, что это полезно для пользователей Mac.

Как насчет команды split ?

Да, есть split команда. Он разделит файл на строки или байты.

$ split -l 100000 /cygdrive/P/2012/Job_044_DM_Radio_Propogation/Working/FinalPropogation/TRC_Longlands/trc_longlands.txt, но в каталоге нет разделенных файлов - где вывод?

Это должно быть в том же каталоге. Например , если я хочу разделить на 1000000 строк в файл, выполните следующие действия : split -l 1000000 train_file train_file. и в том же каталоге , я буду получать train_file.aa с первым миллионом, то trail_file.ab со следующим миллионом, и т.д. @GeorgeC и вы можете получить пользовательские выходные каталоги с префиксом: split input my/dir/ .

Разбивает файл на части фиксированного размера, создает выходные файлы, содержащие последовательные разделы INPUT (стандартный ввод, если ничего не задано или INPUT равен `- ')

Syntax split [options] [INPUT [PREFIX]]

Здесь 1 и 100 - номера строк, которые вы будете записывать output.txt .

При этом получаются только первые 100 строк, вам нужно зациклить его, чтобы последовательно разбить файл на следующие 101..200 и т. Д. Или просто использовать, split как уже говорилось во всех верхних ответах.

разбить файл "file.txt" на 10000 строк файлов:

split (из GNU coreutils, начиная с версии 8.8 от 2010-12-22 ) включает в себя следующий параметр:

Таким образом, split -n 4 input output. сгенерирует четыре файла ( output.a ) с одинаковым количеством байтов, но строки могут быть разбиты посередине.

Если мы хотим сохранить полные строки (т.е. разделенные на строки), то это должно работать:

В случае, если вы просто хотите разделить на x количество строк в каждом файле, данные ответы split в порядке. Но мне интересно, чтобы никто не обращал внимания на требования:

  • "не считая их" -> используя wc + cut
  • "имея остаток в дополнительном файле" -> по умолчанию делает split

Я не могу сделать это без "wc + cut", но я использую это:

Это может быть легко добавлено к вашим функциям bashrc, так что вы можете просто вызывать его, передавая имя файла и чанки:

Если вам нужно только x кусков без остатка в дополнительном файле, просто измените формулу, чтобы суммировать ее (куски - 1) в каждом файле. Я использую этот подход, потому что обычно я просто хочу x количество файлов, а не x строк на файл:

Вы можете добавить это в скрипт и назвать его «ниндзя-путь», потому что, если ничего не соответствует вашим потребностям, вы можете создать его :-)

notepad++ , наверное, лучший выбор. имеет кучу плагинов.

уже был скачен Bred3.. при открытие пишет: " недостаточно памяти для завершения операции". Попробовал Bred2r - "ошибка в среде"
С notepad++ всё глухо. Может кто подскажет название программ с помощью которых можно разбить на части?

Microsoft Office Word или Microsoft Office SharePoint Designer попробуй.

Если религия не позволяет, то попробуй AkelPad..
Хотя может всё опять в оперативку упереться.

имеется файл .txt размером в 2Гб. Ни один текст редактор не открывает. Как можно его открыть или как разделить хотя бы на части

тотал коммандер позволяет резать вайл на части. если без кодирования — то тебе пойдёт.

Ни один редактор не открывает норм данный текст файл, хоть akelpad хоть bred да хоть что , всё перепробовал, word сразу отказался открывать. На данный момент нужно узнать как разбить файл на части хотя бы по 300 Мб чтоб без проблем потом их открыть. Ни один редактор не открывает норм данный текст файл, хоть akelpad хоть bred да хоть что , всё перепробовал, word сразу отказался открывать. На данный момент нужно узнать как разбить файл на части хотя бы по 300 Мб чтоб без проблем потом их открыть.

такие текстовые объемы руками не редактируют. используют тулзы/скрипты

более вероятно что там не текст (кто-то что-то скрывает )
возможно это лог - тогда cat|grep помогут.
или лучше python/perl

такие текстовые объемы руками не редактируют. используют тулзы/скрипты

более вероятно что там не текст (кто-то что-то скрывает )
возможно это лог - тогда cat|grep помогут.
или лучше python/perl

Cудя по постам бедолага в форточках мается так что греп не натравишь равно как и удава (без плясок. )

тотал коммандер позволяет резать вайл на части. если без кодирования — то тебе пойдёт.

Файл лога секретов нет никаких ) стоят не только форточки, спс попробую cat|grep .

EmEditor открывает файлы любого размера. Имеет дружелюбный интерфейс.
Вообще самый мощный текстовый редактор который мне встречался. (не процессор как Word, а именно редактор)

1 чел. читают эту тему (1 Гостей и 0 Скрытых Пользователей)

Подписаться на тему
Уведомление на e-mail об ответах в тему, во время Вашего отсутствия на форуме.

Доброго времени суток.
Имеется текстовый файл, количество строк в исходном тексте неизвестно, может пятьдесят, а может тысыча.
Нужно разбить его на несколько частей, так, чтобы количество строк в выходных файлах было одинаково (ну ± одна строка). Количество частей задается в самом батнике.

Поскольку я плохо разбираюсь в CMD, навалял такую белиберду на пять частей:


Скрипт работает, но уж больно громоздкий, да и тысячу строк довольно долго обрабатывает.
Подскажите, пожалуйста, более изящное решение. Заранее спасибо.

Средний 4 комментария

пробуй powershell или python.
cmd это для мазахистов

Slayer_nn

Radjah

забудьте про cmd
Powershell гораздо легче дастся вам в освоении.
пример для вашего случая

Нагромоздили кода вы не меряно, все это можно сделать гораздо компактнее.
Я не стал разбираться, т.к. реально много кода для такой задачи.

Из вашего описания не ясно как именно разбивать на строки:
1.брать первые несколько строк и писать в один файл, следующую порцию в другой и т.д.
2.берем одну строку кладем в первый файл, вторую - во второй и т.д., когда заканчиваются файлы начинаем снова с первого файла.

Пункт 2 реализовывается вообще элементарно в одном цикле чтения и с одним счетчиком файлов.
Пункт 1: нужно сначала подсчитать общее количество строк (можно циклом и счетчиком, а можно поиграть с find /c /v "" <имя файла>, понятно, что find будет работать гораздо быстрее, но не совсем понятно как find будет вести себя с пустыми строками, нужно поэксперименировать) и прикинуть по сколько строк будет приходиться на каждый из файлов. Затем с помощью for /f "skip=X" - читаем файл построчно с пропуском нужного количества строк, и подсчетом скопированных строк. Так же не сильно сложно. Я думаю, после ваших героических усилий вы сможете упростить ваш код.
Будут вопросы - кидайте сюда.

PS: PowerShell, конечно, гораздо мощнее, но его синтаксис кажется мне страшней, чем у батников, возможно это по тому, что то я язык cmd знаю, а пош до сих пор нет :-)

У меня есть большой (по количеству строк) текстовый файл, который я хотел бы разделить на файлы меньшего размера, также по количеству строк. Поэтому, если в моем файле около 2 млн строк, я хотел бы разделить его на 10 файлов, содержащих 200 тыс. строк, или 100 файлов, содержащих 20 тыс. строк (плюс один файл с остатком; равномерность деление не имеет значения).

Для этого можно написать скрипт на PHP или Python, но если вы используете Bash, то вы можете воспользоваться готовой утилитой split, которая умеет разбивать как текстовые, так и бинарные файлы на части указанного размера. Если это текстовый файл, то можно разбить большой файл на файлы равного размера с определённым количеством строк. Эта статья расскажет как пользоваться командой split.

Как разбить текстовый файл на файлы с определённым количеством строк

Чтобы разбить файл по числу строк, выполните команду вида:


Как разбить файлы на тома определённого размера

Если вы хотите разбить файлы по размеру, то используйте опцию -C (файлы будут разбиты по строкам, разрывов строк не будет)

Команда split обычно работает со строками ввода (то есть из текстового файла). Но если мы используем параметр -b, мы заставляем split рассматривать файл как двоичный ввод, а строки игнорируются. Мы можем указать размер файлов, которые мы хотим, вместе с префиксом, который мы хотим для выходных файлов. split также может использовать параметр -d, чтобы дать нам числовую нумерацию (*.01 , *.02 , *.03 и т. д.) для выходных файлов, а не алфавитную, которая применяется по умолчанию (*.aa , *.ab , *.ac, и т.д.). Параметр -a указывает длину суффикса. Команда выглядит так:

где ЧИСЛО — длина расширения (или суффикса), которое мы будем использовать, а РАЗМЕР — это размер результирующих файлов с модификатором единиц (K, M, G и т. д.). К примеру, разделим образ диска на файлы размером 4 ГБ с помощью следующей команды (размер последнего файла будет соответствовать оставшейся части тома, если он не является точно кратным выбранному вами размеру):

Это приведёт к созданию группы файлов (размером 4 ГБ), каждый из которых будет назван префиксом case1.split1, как указано в команде, за которым следует .000, .001, .002 и т. д. Параметр -a с 3 указывает, что мы хотим, чтобы расширение было не менее 3 цифр. Без -a 3 наши файлы будут называться .00 , .01 , .02 и т. д. братите внимание на конечную точку в имени нашего выходного файла. Мы делаем это так, чтобы суффикс добавлялся как расширение файла, а не в конец строки имени.

Как файл разделённый на части собрать в один файл

В приведённой выше команде мы повторно собрали разделённые части в новый файл образа размером 80 ГБ. Исходные разделённые файлы не удаляются.

Читайте также: