Curta de usar uma biblioteca xml real e / ou awk / perl / python / ruby, isso é bem parecido com o que você quer (se eu entendi direito) apenas usando comandos bash comuns.
Por favor, note que isso é realmente específico para arquivos xml usados e não deve ser incentivado como um analisador / divisor xml de propósito geral.
Você precisará do diretório de saída dos arquivos divididos. Eu usei / tmp / out para este exemplo:
mkdir -p /tmp/out
Você terá que limpar /tmp/out
antes de cada execução. Caso contrário, você obterá resultados que não fazem sentido.
cat /path_to_xml_files/*.xml | \
egrep -v '<?xml version="1.0" \?>|<queries>|</queries>' | \
csplit -q -z - '/statement name/' '{*}' --prefix=/tmp/out/splitout- && \
for x in /tmp/out/splitout-* ; do \
[[ $(wc -l "$x"|cut -d" " -f 1) -gt 10 ]] && \
echo "$x" && \
cat "$x" ; \
done
- cat os arquivos xml
- Use egrep para remover linhas indesejadas
- divide a entrada em vários arquivos com base no seu exemplo "nome da instrução"
- resultados de loop
- conta linhas para cada arquivo e exige que ele seja maior que 10
- nome do arquivo de saída de impressão
- imprimir linhas de saída
Como eu disse, isso não deve ser um splitter xml geral, mas deve ser tratado como um exemplo de comandos de shell diferentes.
Nota: '\'
-sign seguido por quebra de linha significa que a linha continua sem quebras de linha.
Isso apenas facilita a leitura.