7

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

1

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

Я мог бы сделать это достаточно легко на Python, но интересует, существует ли какой-либо "ниндзя-способ" сделать это с использованием Bash и утилит Unix, вместо того чтобы вручную перебрать строки и разбить файл.

5 ответ(ов)

0

Да, существует команда split. Она позволяет разделить файл на части по строкам или байтам.

Пример использования команды:

$ split --help
Usage: split [OPTION]... [INPUT [PREFIX]]
Выводит части фиксированного размера из INPUT в файлы PREFIXaa, PREFIXab и т.д.; размер по умолчанию - 1000 строк, а префикс по умолчанию - `x`. Если INPUT не указан или равен -, читается стандартный ввод.

Обязательные аргументы для длинных опций являются обязательными и для коротких опций.
  -a, --suffix-length=N   использовать суффиксы длиной N (по умолчанию 2)
  -b, --bytes=SIZE        выводить SIZE байт в файл вывода
  -C, --line-bytes=SIZE   выводить не более SIZE байт строк в файл вывода
  -d, --numeric-suffixes  использовать числовые суффиксы вместо буквенных
  -l, --lines=NUMBER      выводить NUMBER строк в файл вывода
      --verbose           выводить диагностическую информацию перед тем,
                            как будет открыт каждый файл вывода
      --help     показать эту справку и выйти
      --version  вывести информацию о версии и выйти

SIZE может иметь суффикс множителя:
b 512, kB 1000, K 1024, MB 1000*1000, M 1024*1024,
GB 1000*1000*1000, G 1024*1024*1024 и так далее для T, P, E, Z, Y.
0

Чтобы разбить большой текстовый файл на меньшие файлы по 1000 строк каждый:

split <файл> -l 1000

Чтобы разбить большой бинарный файл на меньшие файлы по 10М каждый:

split <файл> -b 10M

Чтобы объединить разбитые файлы в один файл:

cat x* > <файл>

Разбить файл так, чтобы каждый отдельный файл содержал 10 строк (кроме последнего фрагмента):

split -l 10 имя_файла

Разделить файл на 5 частей. Файл разбивается так, чтобы каждая часть имела одинаковый размер (кроме последнего фрагмента):

split -n 5 имя_файла

Разделить файл, чтобы в каждом фрагменте было по 512 байт (кроме последнего фрагмента; используйте 512k для килобайт и 512m для мегабайт):

split -b 512 имя_файла

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

split -C 512 имя_файла

0

Чтобы разделить файл "file.txt" на части, содержащие по 10,000 строк каждая, вы можете воспользоваться командой split в Unix-подобных операционных системах. Вот как это можно сделать:

split -l 10000 file.txt

Эта команда создаст несколько файлов, названия которых будут начинаться с "xaa", "xab" и так далее. Если вы хотите использовать более понятные имена для выходных файлов, вы можете добавить префикс с помощью параметра -d и указать свой префикс. Например:

split -l 10000 -d -a 3 file.txt output_

В этом случае выходные файлы будут называться output_000, output_001 и так далее.

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

0

Вы можете использовать следующую команду sed, чтобы вывести строки с 1 по 100 из файла и сохранить результат в output.txt:

sed -n '1,100p' filename > output.txt

В этой команде 1 и 100 — это номера строк, которые вы хотите скопировать в файл output.txt. Опция -n подавляет автоматический вывод, а команда p заставляет sed печатать только указанные строки.

0

Вы можете разделить файл "toSplit.txt" на более мелкие файлы по 200 строк, используя команду split в Unix-подобных системах. Вот пример того, как это сделать:

split -l 200 --numeric-suffixes --additional-suffix=".txt" toSplit.txt splited

В этом примере -l 200 указывает количество строк в каждом создаваемом файле. Параметр --numeric-suffixes добавляет числовые суффиксы к именам выходных файлов, а --additional-suffix=".txt" добавляет расширение .txt к каждому из них. В результате, вы получите файлы с именами "splited00.txt", "splited01.txt", ..., "splited25.txt", в зависимости от общего количества строк в исходном файле.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь