2013-07-12 2 views
2

я уже перепутал некоторые XML-файлы, и теперь есть что-то вродеSplit файл XML на основе строки

<Schema> 
stuff 
</Schema><Schema> 
stuff 
</Schema><Schema> 
.. 

мне нужно разделить их все так, чтобы иметь от <Schema> к </Schema> в каждом файле

ответ

3

One используя . Он разбивает регистры с закрывающим тегом, и если есть символы, прежде чем печатать все:

awk -c ' 
    BEGIN { RS = "</Schema>" } 
    $0 ~ /[^[:blank:]\n]/ { 
     printf "%s\n", $0 RS >> FILENAME "_" ++i ".xml" 
    } 
' infile 

Предполагая infile с содержанием:

<Schema> 
stuff 
</Schema><Schema> 
more stuff 
</Schema><Schema> 
and more stuff 
</Schema> 

Это дает:

==> infile_1.xml <== 
<Schema> 
stuff 
</Schema> 

==> infile_2.xml <== 
<Schema> 
more stuff 
</Schema> 

==> infile_3.xml <== 
<Schema> 
and more stuff 
</Schema> 
+0

удивительно. одна холодная вещь должна была иметь выход вроде этого «infile_1.xml» «infile_2.xml» и т. д. – mfirry

+0

@mfirry: просто добавьте переменную 'FILENAME' в выходное перенаправление' printf'. Я обновил ответ. – Birei

+0

потрясающий! еще одна вещь, прежде чем объявить вас, моего спасителя, мне придется положить его в файл sh и внутри «для файла». любопытная вещь. он, надеюсь, будет работать, не так ли? – mfirry

Смежные вопросы