- How to split large files by line or by file size in Linux
- Syntax
- Options
- split example(mac)
- linux split by line
- linux split by size
- linux split by delimiter
- linux split by line number
- Как разбить файл на части Linux
- Синтаксис и опции split
- Как разбить файл на части Linux
- 1. Разбить по размеру
- 2. Разбить по количеству строк
- 4. Настройка имени частей файла
- Как объединить части файла
- Выводы
- How can I split a large text file into smaller files with an equal number of lines?
- 12 Answers 12
How to split large files by line or by file size in Linux
In the daily development process, we occasionally encounter situations in which large files are processed.
At this time, in order to improve the processing efficiency, we often divide large files into several small files for processing according to certain rules.
In this linux command tutorial, I mainly introduce how to use the linux split command to cut large files.
linux split command — split a file into pieces
Syntax
split [-b byte_count[k|m]] [-l line_count] [file [name]]
Options
- -b byte_count[k|m]
Create smaller files byte_count bytes in length.
If “k” is appended to the number, the file is split into byte_count kilobyte pieces.
If “m” is appended to the number, the file is split into byte_count megabyte pieces. - -l line_count
Create smaller files n lines in length.
split example(mac)
linux split by line
➜ split -a 2 -l 100000 test.log t1-
linux split by size
➜ split -a 2 -b 1m test.log t2-
Of course, when you split the file, you will also need to use the split of the string.
The linux awk command will be used here.
linux split by delimiter
➜ echo "adsf:ffff:2343:4444:444sfsafadsff" | awk -F":" ''
linux split by line number
Export all odd line contents, use awk NR(ordinal number of the current record)
Best linux commands articles:
Как разбить файл на части Linux
В некоторых случаях один файл нужно разбить на несколько частей, например, для более удобного хранения или для загрузки в случае слишком большого размера. Проще всего это сделать с помощью утилиты split в терминале Linux.
В данной статье мы расскажем о том, как работает команда split Linux. А затем разберемся с конкретными сценариями использования, например, как разбить файл на части Linux по определенным критериям. А затем рассмотрим как объединить обратно получившиеся части.
Синтаксис и опции split
Данная команда разбивает один большой файл на несколько маленьких. У неё достаточно понятный синтаксис. Для запуска следует указать опции, путь к большому файлу и путь создания новых файлов с общим префиксом имени:
$ split опции /местоположение/исходного/файла /путь/к/конечной/папке/префикс_имени
- -a, —suffix-length – задать длину суффикса (количество символов) в имени части файла. По умолчанию это 2 символа.
- —additional-suffix – указать дополнительный суффикс.
- -b, —bytes – разбить файл на части равного указанного размера. Единица измерения – 1 байт, 1000 байт записывается как KB, 1024 как K. По аналогии есть MB (M), GB (G) и так далее.
- -C, —line-bytes – разбить файл на части не более указанного размера, не разделяя строки/записи внутри него.
- -d – использовать числовой суффикс в имени конечного файла вместо алфавитного. Отсчет начинается с нуля.
- —numeric-suffixes – то же самое, что и -d, но еще задаётся начальное число для отсчета.
- -x – использовать hex-префикс вместо алфавитного. Начальное значение – 0.
- —hex-suffixes – то же самое, что и -x, но начальное значение задаётся вручную.
- -e, —elide-empty-files – не создавать пустые файлы при выполнении опции -n.
- -l, —lines – установить максимальное количество строк/записей итогового файла. По умолчанию команда split разбивает файл на 1000 строк.
- -n, —number – разбить файл на чанки (указанное количество частей).
- -t, —separator – установить свой разделительный символ вместо новой строки.
- —verbose – выводить информацию о новых файлах перед их созданием.
- —version – посмотреть версию утилиты.
В список включены не все опции. Чтобы посмотреть полную информацию, выполните в терминале команду:
Как разбить файл на части Linux
Теперь перейдем к практической части статьи и на конкретных примерах посмотрим, как используется команда split Linux для разбивания файлов по размеру, по количеству строк и на заданное количество частей. Заодно мы упомянем нюансы выбора имени для частей файла.
1. Разбить по размеру
В данном случае поможет опция -b, определяющая максимальный размер конечного файла. За основу возьмем архив в 5.3 Мб, который находится по пути ~/Archives/archive.tar.gz. Его нужно разбить на несколько файлов по 1 Мб, например, чтобы потом переслать по почте. Для удобства зададим ему префикс имени split-archive.part_, а после нижнего подчеркивания будет идти суффикс, обозначающий номер конечного файла. Команда выглядит следующим образом:
split -b 10M ~/Archives/archive.tar.gz ~/Archives/split-archive.part_
Вот как будет выглядеть конечная папка:
Помимо самого архива, в ней есть еще 6 файлов. Вы можете пропустить ввод конечного местоположения и префикса. Тогда файлы автоматически создадутся в текущей папке.
2. Разбить по количеству строк
Иногда нужно разбить один текстовый документ на несколько, например, с количеством строк не больше установленного числа. В этом вопросе полезной окажется опция -l. Команда для разбития будет выглядеть следующим образом:
split -l 1000 ~/Logs/log ~/Logs/Split/divided-log_
Возьмем большой log-файл с данными на 219 тысяч строк. Для более удобной работы его нужно разбить на документы по 10 тысяч строк в каждом и поместить во вложенный каталог.
Еще одна достаточно интересная задача, в решении которой поможет опция -n. Достаточно прописать для неё итоговое количество файлов и запустить команду:
split -n 3 ~/Archives/archive.tar.gz ~/Archives/archive/split-archive.part_
Вот как это выглядит для рассмотренного ранее архива:
Если вы хотите разбить файл на несколько частей, не разделяя строки/записи внутри него, то понадобится модификатор l. Например, для того чтобы разбить файл на три части выполните такую команду:
split -n l/3 ~/Logs/Log ~/Logs/Split/divided-log_
4. Настройка имени частей файла
Как мы уже писали ранее, для команды split префикс определяет название части файла. А после него по умолчанию идет суффикс из двух латинских букв. С помощью дополнительных опций можно изменить его длину (опция -a), переключиться на числа (опция -d) или hex-символы (опция -x). В последних двух сценариях получится выбрать начальную точку отчета (опция —numeric-suffixes для чисел и —hex-suffixes для hex-символов).
Возьмем такую задачу – разделить текстовый документ на 3 файла равного размера, чтобы каждый из них имел префикс split-text.part_ и числовой суффикс из одного символа, начиная с единицы:
split -a 1 —numeric-suffixes=1 -n 3 ~/Docs/text ~/Docs/Split/split-text.part_
Как объединить части файла
Теперь вы знаете как разбить файл на части в Linux с помощью команды split. Следующий шаг – объединение нескольких частей в единый файл. Для этих целей отлично подойдет утилита cat. Сначала нужно задать имена самых частей, а потом итоговый файл:
$ cat /путь/к/1/части /путь/ко/2/части … > /местоположение/объединенного/файла
Поскольку все части имеют схожее имя, и различается только суффикс, можно упростить команду до такого вида:
cat ~/Archive/split-archive.part_* > ~/Archives/cat-archive.tar.gz
Рассмотрим объединение ранее разбитого на части архива.
Выводы
Утилита split в некоторых ситуациях окажется очень полезной. Она позволяет разбить один большой файл на несколько маленьких, указав при этом определенные критерии разделения. Мы рассмотрели несколько популярных сценариев для её использования. Но на деле их гораздо больше. Разбитый файл можно объединить, например, с помощью утилиты cat. Мы упомянули ее ближе к концу статьи.
Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.
How can I split a large text file into smaller files with an equal number of lines?
I’ve got a large (by number of lines) plain text file that I’d like to split into smaller files, also by number of lines. So if my file has around 2M lines, I’d like to split it up into 10 files that contain 200k lines, or 100 files that contain 20k lines (plus one file with the remainder; being evenly divisible doesn’t matter). I could do this fairly easily in Python, but I’m wondering if there’s any kind of ninja way to do this using Bash and Unix utilities (as opposed to manually looping and counting / partitioning lines).
Out of curiousity, after they’re «split», how does one «combine» them? Something like «cat part2 >> part1»? Or is there another ninja utility? mind updating your question?
yes cat is short for concatenate. In general apropos is useful for finding appropriate commands. I.E. see the output of: apropos split
As an aside, OS X users should make sure their file contains LINUX or UNIX-style Line breaks/End-Of-Line indicators (LF) instead of MAC OS X — style end-of-line indicators (CR) — the split and csplit commands will not work if your like breaks are Carriage Returns instead of LineFeeds. TextWrangler from BareBones software can help you with this if you’re on Mac OS. You can choose how you want your line break characters look. when you save (or Save As. ) your text files.
12 Answers 12
Have a look at the split command:
$ split --help Usage: split [OPTION] [INPUT [PREFIX]] Output fixed-size pieces of INPUT to PREFIXaa, PREFIXab, . ; default size is 1000 lines, and default PREFIX is `x'. With no INPUT, or when INPUT is -, read standard input. Mandatory arguments to long options are mandatory for short options too. -a, --suffix-length=N use suffixes of length N (default 2) -b, --bytes=SIZE put SIZE bytes per output file -C, --line-bytes=SIZE put at most SIZE bytes of lines per output file -d, --numeric-suffixes use numeric suffixes instead of alphabetic -l, --lines=NUMBER put NUMBER lines per output file --verbose print a diagnostic to standard error just before each output file is opened --help display this help and exit --version output version information and exit
You could do something like this:
which will create files each with 200000 lines named xaa xab xac .
Another option, split by size of output file (still splits on line breaks):
split -C 20m --numeric-suffixes input_filename output_prefix
creates files like output_prefix01 output_prefix02 output_prefix03 . each of maximum size 20 megabytes.
you can also split a file by size: split -b 200m filename (m for megabytes, k for kilobytes or no suffix for bytes)
split produces garbled output with Unicode (UTF-16) input. At least on Windows with the version I have.
@geotheory, be sure to follow LeberMac’s advice earlier in the thread about first converting CR (Mac) line endings to LR (Linux) line endings using TextWrangler or BBEdit. I had the exact same problem as you until I found that piece of advice.
split -l 200000 mybigfile.txt
And can we set the maximum number of outputs? for example split that big file but don’t exceed 50 output; even if there are remained lines in the big file
Yes, there is a split command. It will split a file by lines or bytes.
$ split --help Usage: split [OPTION]. [INPUT [PREFIX]] Output fixed-size pieces of INPUT to PREFIXaa, PREFIXab, . ; default size is 1000 lines, and default PREFIX is `x'. With no INPUT, or when INPUT is -, read standard input. Mandatory arguments to long options are mandatory for short options too. -a, --suffix-length=N use suffixes of length N (default 2) -b, --bytes=SIZE put SIZE bytes per output file -C, --line-bytes=SIZE put at most SIZE bytes of lines per output file -d, --numeric-suffixes use numeric suffixes instead of alphabetic -l, --lines=NUMBER put NUMBER lines per output file --verbose print a diagnostic just before each output file is opened --help display this help and exit --version output version information and exit SIZE may have a multiplier suffix: b 512, kB 1000, K 1024, MB 1000*1000, M 1024*1024, GB 1000*1000*1000, G 1024*1024*1024, and so on for T, P, E, Z, Y.