ZaLinux.ru

Как разбить большой файл (текстовый или бинарный) на файлы меньшего размера (РЕШЕНО)

Инструкция по использованию split

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

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

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

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

split -l СТРОКИ ФАЙЛ

Например:

split -l 200000 filename

создаст файлы, в каждом из которых будет по 200000 строк с именами xaa xab xac …

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

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

split -C 20m --numeric-suffixes input_filename output_prefix

Это команда создаёт файлы вида output_prefix01 output_prefix02 output_prefix03 … каждый с максимальным размером в 20 мегабайт.

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

split -d -a ЧИСЛО -b РАЗМЕРG ФАЙЛ_ДЛЯ_РАЗБИВКИ ПРЕФИКС_ВЫХОДНЫХ_ФАЙЛОВ

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

split -d -a 3 -b 4G case1.disk1.raw case1.disk1.split.

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

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

Процесс можно повернуть вспять. Если мы хотим повторно собрать образ из разделённых частей, мы можем использовать команду cat и перенаправить вывод в новый файл. Помните, что cat просто выводит указанные файлы на стандартный вывод. Если вы перенаправите этот вывод, файлы будут собраны в один.

cat case1.disk1.split* > case1.disk1.new.raw

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

Рекомендуемые статьи:

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

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