У меня есть большой (по количеству строк) простой текстовый файл, который я хотел бы разбить на более мелкие файлы, в том числе по количеству строк. Таким образом, если мой файл имеет около 2M строк, я бы хотел разделить его на 10 файлов, содержащих 200k строк, или 100 файлов, содержащих 20k строк (плюс один файл с остатком; быть равномерно делимым не имеет значения).
Я мог бы сделать это довольно легко в Python, но мне интересно, есть ли какой-нибудь способ ниндзя сделать это, используя утилиты bash и unix (в отличие от ручного зацикливания и подсчета / разбиения строк).
cat part* > original
Ответы:
Вы смотрели на команду split?
Вы могли бы сделать что-то вроде этого:
который создаст файлы каждый с 200000 строк с именем
xaa xab xac
...Другой вариант, разделенный по размеру выходного файла (по-прежнему разбивается на разрывы строк):
создает файлы
output_prefix01 output_prefix02 output_prefix03 ...
размером не более 20 мегабайт.источник
split -b 200m filename
(м для мегабайт, к для килобайт или без суффикса для байтов)-d
опция недоступна в OSX, используйтеgsplit
вместо этого. Надеюсь, что это полезно для пользователей Mac.Как насчет команды split ?
источник
Да, есть
split
команда. Он разделит файл на строки или байты.источник
split -l 1000000 train_file train_file.
и в том же каталоге , я буду получатьtrain_file.aa
с первым миллионом, тоtrail_file.ab
со следующим миллионом, и т.д.split input my/dir/
.использование
split
Syntax split [options] [INPUT [PREFIX]]
http://ss64.com/bash/split.html
источник
Использование:
Здесь 1 и 100 - номера строк, которые вы будете записывать
output.txt
.источник
split
как уже говорилось во всех верхних ответах.разбить файл "file.txt" на 10000 строк файлов:
источник
split
(из GNU coreutils, начиная с версии 8.8 от 2010-12-22 ) включает в себя следующий параметр:Таким образом,
split -n 4 input output.
сгенерирует четыре файла (output.a{a,b,c,d}
) с одинаковым количеством байтов, но строки могут быть разбиты посередине.Если мы хотим сохранить полные строки (т.е. разделенные на строки), то это должно работать:
Соответствующий ответ: https://stackoverflow.com/a/19031247
источник
В случае, если вы просто хотите разделить на x количество строк в каждом файле, данные ответы
split
в порядке. Но мне интересно, чтобы никто не обращал внимания на требования:Я не могу сделать это без "wc + cut", но я использую это:
Это может быть легко добавлено к вашим функциям bashrc, так что вы можете просто вызывать его, передавая имя файла и чанки:
Если вам нужно только x кусков без остатка в дополнительном файле, просто измените формулу, чтобы суммировать ее (куски - 1) в каждом файле. Я использую этот подход, потому что обычно я просто хочу x количество файлов, а не x строк на файл:
Вы можете добавить это в скрипт и назвать его «ниндзя-путь», потому что, если ничего не соответствует вашим потребностям, вы можете создать его :-)
источник
-n
опциюsplit
.Вы также можете использовать awk
источник
awk -v lines=200000 -v fmt="%d.txt" '{print>sprintf(fmt,1+int((NR-1)/lines))}'
HDFS getmerge небольшой файл и вылил в размер свойства.
Этот метод вызовет разрыв строки
Я пытаюсь объединить и разделить на 128 МБ каждый файл.
источник