У меня есть поток (от умиротворяющего инструмента mytool) журналов в формате xml, и мне нужно, чтобы они выглядели читаемыми в одну строку. У меня нет инструмента синтаксического анализа xml на этом узле, поэтому я использовал perl и awk.
Мне удалось получить желаемый результат, но я хотел уменьшить количество каналов / awk / perl до минимально возможного.
Пример входного потока:
./mytool
<ALERT>
<Time>2018-10-24T16:03:00.128-05:00</Time>
<Alert>0;2018-10-24T16:02:37.739-05:00;NODE_LOCATION=19;11193;ID=5636122;Temp is on critical range;000;CRITICAL;Recovery=Shutting down the node;100</Alert>
</ALERT>
<ALERT>
<Time>2018-10-24T16:03:03.053-05:00</Time>
<Alert>0;2018-10-24T16:02:40.264-05:00;NODE_LOCATION=17;11293;ID=5636124;Temp is on Major range;000;MAJOR;Recovery=Shutdown the node or it will auto shutdown,processes stopped;99</Alert>
</ALERT>
Мой желаемый результат:
2018-10-24T16:02:37.739-05:00 5636122 Temp is on critical range CRITICAL Shutting down the node
2018-10-24T16:02:40.264-05:00 5636124 Temp is on Major range MAJOR Shutdown the node or it will auto shutdown,processes stopped
Текущая команда, которую я использовал для получения результата:
./mytool | perl -000 -lnpe 's/<.*?>|NODE_LOCATION=|Recovery=|ID=//g' | awk -vRS= '{$1=$1}1' |awk -F';' '{print $2,$$4,$5,$6,$8,$9}'
2018-10-24T16:02:37.739-05:00 5636122 Temp is on critical range CRITICAL Shutting down the node
2018-10-24T16:02:40.264-05:00 5636124 Temp is on Major range MAJOR Shutdown the node or it will auto shutdown,processes stopped
Примечание. Понимайте, что использование awk perl - не лучший способ работы с xmls, но это наилучший из возможных вариантов, поэтому приходится идти на компромисс с ним.