Это совершенно больное решение должно работать для файлов, которые содержат менее 10000 слов:
. <(echo -e 'uno due tre\nquattro\ncinque sei sette otto\nnove dieci undici dodici tredici' | sed -zE '
s/^/\x0/
:a
y/012345678/123456789/
s/\x0(([^ \n]+[ \n]+){4})/cat > file0 <<EOF\n\1\nEOF\n\x0/
ta
s/\x0(.*)/cat > file0 <<EOF\n\1\nEOF\n\x0/
s/\n+/\n/g')
По сути, оно перемежает некоторый код в точках, где разбиения должны происходить таким образом, что исходящий файл скрипт bash
, представляющий собой последовательность команд cat
, которые читают из heredocument и записывают в файл (допускается максимум 10 файлов!). Этот сценарий получен (. file
просто source file
, просто уродливее). Вы можете увидеть скрипт, удалив начальный . <(
и завершающий )
.
Приятно то, что он разбивает большой файл в середине строк, если это необходимо, без изменения строк, где нет разделения происходит.
Самое уродливое то, что он нумерует файлы в обратном порядке.
Ограничение количества слов связано с тем, что я применяю только одно-ди git дополнение к именам файлов; его можно удалить, внедрив дополнение аналогично тому, как это сделано здесь или здесь .