У меня есть гигантский (4 ГБ) XML-файл, который я сейчас разбиваю на куски с помощью функции linux «split» (каждые 25 000 строк - не байтами). Обычно это прекрасно работает (у меня получается около 50 файлов), за исключением того, что некоторые описания данных имеют разрывы строк, и поэтому часто файлы чанков не имеют надлежащих закрывающих тегов - и мой анализатор прерывается на полпути в процессе обработки.
Файл примера: (примечание: обычно каждый XML-узел "перечисления" должен находиться в отдельной строке)
<?xml version="1.0" encoding="UTF-8"?>
<listings>
<listing><date>2009-09-22</date><desc>This is a description WITHOUT line breaks and works fine with split</desc><more_tags>stuff</more_tags></listing>
<listing><date>2009-09-22</date><desc>This is a really
annoying description field
WITH line breaks
that screw the split function</desc><more_tags>stuff</more_tags></listing>
</listings>
Тогда иногда мой сплит заканчивается как
<?xml version="1.0" encoding="UTF-8"?>
<listings>
<listing><date>2009-09-22</date><desc>This is a description WITHOUT line breaks and works fine with split</desc><more_tags>stuff</more_tags></listing>
<listing><date>2009-09-22</date><desc>This is a really
annoying description field
WITH line breaks ...
EOF
Итак - я читал о "csplit", и похоже, что он может решить эту проблему. Я не могу понять правильное выражение ...
В основном, я хочу такой же вывод для ~ 50-ых файлов
Что-то вроде:
*csplit -k myfile.xml '/</listing>/' 25000 {50}
Любая помощь будет отличной
Спасибо!