Будьте осторожны, что вы хотите. Подумайте о последствиях того, что вы делаете. Если это очень большой XML-файл, как вы заявили, это создаст очень большое количество маленьких файлов в вашем каталоге. Это может быть плохо во многих отношениях. Каждый из них будет занимать как минимум наименьший размер блока, который может быть большим в современных массивных файловых системах. Каждый будет использовать inode в linux, который является ограниченным ресурсом, используйте df -i, чтобы определить, достаточно ли у вас доступно Наконец, некоторые файловые системы имеют ограничение или начинают работать плохо, если в одном каталоге создано слишком много файлов.
Далее будет указано, сколько файлов будет создано:
perl -e '$/="</logmessage>";while(<>) {$i++};print $i,"\n"' log.xml
Следующее создаст новый файл, используя дату и время для имени файла с расширением .xml. Если несколько сообщений имеют одинаковую метку времени, они будут добавлены.
perl -e '$/="</logmessage>";while(<>) {m{([\d:\. ]+)};open(fh,">>","$1.xml");s{^.*?(?=<logmessage>)}{}sm;print fh $_,"\n";close fh}' log.xml
Также помните, что многие библиотеки XML будут пытаться открыть полный файл в памяти, что может быть проблемой для очень большого файла XML. Эта процедура не будет пытаться открыть весь файл в памяти. Если ваш файл слишком велик, чтобы поместиться в памяти, не принимайте решения, использующие синтаксический анализатор XML, который не является SAX или потоковым. Использование анализатора DOM потребует памяти, равной размеру вашего документа, умноженному на накладные расходы.