1.Используйте специфичные для XML утилиты
Я думаю, что любой инструмент командной строки, предназначенный для работы с XML, лучше, чем пользовательские хаки awk / sed.Сценарии, использующие такие инструменты, являются более надежными и не ломаются, когда ввод XML немного переформатирован (например, не имеет значения, где разрывы строк и как отступ документа).Мой инструмент выбора для запросов XML из командной строки: xmlstarlet .
2.Исправьте ваш XML
Затем вам нужно исправить свой XML: правильно закрыть теги и добавить корневой элемент.Примерно так:
<root>
<CONTEXT_1>aaaa</CONTEXT_1>
<CONTEXT_2>bb</CONTEXT_2>
<CONTEXT_2>dfgh</CONTEXT_2>
<CONTEXT_6>bb</CONTEXT_6>
<CONTEXT_1>bbbb</CONTEXT_1>
</root>
3.Используйте XPath и XSLT
Выберите нужные элементы в XPath и обработайте их с помощью выражений XSLT.В вашем примере вы можете посчитать длину элементов с помощью
$ xmlstarlet sel -t -m '//root/*' -v "name(.)" -o ": " -v "string-length(.)" -n test.xml
//root/*
, чтобы выбрать все дочерние узлы root
.name(.)
печатает имя элемента выбранного в данный момент элемента, а string-length(.)
печатает длину его содержимого.
и получает вывод:
CONTEXT_1: 4
CONTEXT_2: 2
CONTEXT_2: 4
CONTEXT_6: 2
CONTEXT_1: 4
Группируйте результаты как вам нравится1026 * или аналогичные инструменты.