伪XML到CSV
我有一个包含以下内容的文件:伪XML到CSV,xml,bash,xmlstarlet,Xml,Bash,Xmlstarlet,我有一个包含以下内容的文件: <AA> <BB>RANDOM TEXT1</BB> <BB>RANDOM TEXT2</BB> </AA> <AA> <BB>RANDOM TEXT3</BB> <BB>RANDOM TEXT4</BB> </AA> <AA> <BB>RANDOM TEXT5</BB>
<AA>
<BB>RANDOM TEXT1</BB>
<BB>RANDOM TEXT2</BB>
</AA>
<AA>
<BB>RANDOM TEXT3</BB>
<BB>RANDOM TEXT4</BB>
</AA>
<AA>
<BB>RANDOM TEXT5</BB>
<BB>RANDOM TEXT6</BB>
</AA>
解析XML的最佳方法是使用XML解析器 第一步,将伪XML“修复”为正确的XML:
$ { echo '<root>'; cat file; echo '</root>'; }
<root>
<AA>
<BB>RANDOM TEXT1</BB>
<BB>RANDOM TEXT2</BB>
</AA>
<AA>
<BB>RANDOM TEXT3</BB>
<BB>RANDOM TEXT4</BB>
</AA>
<AA>
<BB>RANDOM TEXT5</BB>
<BB>RANDOM TEXT6</BB>
</AA>
</root>
可以使用xmlstarlet的选项,而不使用粘贴,以牺牲可读性为代价:
... | xmlstarlet sel -t -m //AA -v 'BB[1]' -o ',' -v 'BB[2]' -n
RANDOM TEXT1,RANDOM TEXT2
RANDOM TEXT3,RANDOM TEXT4
RANDOM TEXT5,RANDOM TEXT6
$ { echo '<root>'; cat file; echo '</root>'; } | xmlstarlet sel -t -v //BB
RANDOM TEXT1
RANDOM TEXT2
RANDOM TEXT3
RANDOM TEXT4
RANDOM TEXT5
RANDOM TEXT6
... | xmlstarlet sel -t -v '//BB' | paste -d, - -
RANDOM TEXT1,RANDOM TEXT2
RANDOM TEXT3,RANDOM TEXT4
RANDOM TEXT5,RANDOM TEXT6
... | xmlstarlet sel -t -m //AA -v 'BB[1]' -o ',' -v 'BB[2]' -n
RANDOM TEXT1,RANDOM TEXT2
RANDOM TEXT3,RANDOM TEXT4
RANDOM TEXT5,RANDOM TEXT6