Как разбить файл на n частей?

У меня есть файл, содержащий несколько строк. Я хочу разделить файл на n файлов. Неважно, сколько строк присутствует в каждом файле. Мне просто нужны конкретные файлы no.of(скажем, 5). здесь проблема заключается в том, что никакие строки в исходном файле не изменяются. Поэтому мне нужно рассчитать количество строк, а затем просто разделить файлы на 5 частей. Если возможно, мы должны отправить каждый из них в разные каталоги.

Ответы

Ответ 1

В bash вы можете использовать команду split, чтобы разбить ее на основе количества желаемых строк. Вы можете использовать команду wc для определения количества строк. Здесь wc в сочетании с split в одну строку.

Например, чтобы разделить onepiece.log на 5 частей

    split -l$((`wc -l < onepiece.log`/5)) onepiece.log onepiece.split.log -da 4

Это создаст такие файлы, как onepiece.split.log0000...

Примечание: разделение bash округляется, поэтому, если есть остаток, будет файл с 6-й частью.

Ответ 2

Предполагая, что вы обрабатываете текстовый файл, затем wc -l, чтобы определить общее количество строк и split -l для разделения на указанное количество строк (общее количество /5 в вашем случае). Это работает в UNIX/Mac и Windows (если у вас установлен cygwin)

Ответ 3

В linux существует команда split,

split --lines=1m /path/to/large/file /path/to/output/file/prefix

Вывести фрагменты фиксированного размера INPUT в PREFIXaa, PREFIXab,...; размер по умолчанию - 1000 строк, а по умолчанию PREFIX - "x". Без INPUT или INPUT - прочитайте стандартный ввод.

...

-l, --lines = NUMBER поместите NUMBER строки в выходной файл

...

Однако вам нужно было бы рассчитать фактический размер расколов заранее.

Ответ 4

Я могу придумать несколько способов сделать это. То, что вы будете использовать, сильно зависит от данных.

  • Строки фиксированной длины: найдите размер файла, прочитав его запись в каталоге и разделите его на длину строки, чтобы получить количество строк. Используйте это, чтобы определить, сколько строк в файле.

  • Файлы должны иметь примерно одинаковое количество строк. Снова прочитайте размер файла из записи в каталоге. Прочитайте первые N строк (N должно быть небольшим, но разумной частью файла) для вычисления средней длины строки. Вычислите приблизительное количество строк на основе размера файла и прогнозируемой средней длины строки. Это предполагает, что длина линии следует нормальному распределению. Если нет, настройте свой метод на случайные выборки строк (с помощью seek() или чего-то подобного). Перемотайте файл после вашего среднего значения, затем разделите его на основе прогнозируемой длины строки.

  • Прочитайте файл дважды. Первый раз подсчитывает количество строк. Второй раз разбивая файл на нужные части.

EDIT. Используя оболочку script (согласно вашим комментариям), рандомизированная версия # 2 будет сложной, если вы не написали небольшую программу для этого. Вы можете использовать ls -l для получения размера файла wc -l для подсчета точного количества строк и head -nNNN | wc -c для вычисления средней длины строки.