使用bash将xml字典转换为csv

ggazkfy8  于 2023-07-31  发布在  其他
关注(0)|答案(2)|浏览(117)

我有一个var $ENTRIES

ENTRIES="<entry key="key-one">value</entry> <entry key="key-two">value/two</entry>"

字符串
需要转换为csv:

convertToCSV() {
    # Do stuff with $ENTRIES
} >> dict.csv


导致:

cat dict.csv
key-one,value
key-two,value/two


如何从$ENTRIES中提取键和值?会说我们需要某种sed命令吗?我们在以下两个位置之间取密钥:

key=" and ">


并取以下值:

> and </entry>


并以某种方式循环遍历$ENTRIES中的所有条目...

h22fl7wq

h22fl7wq1#

试着跟随一次,让我知道这是否对你有帮助。一旦你对结果满意,你可以将这个值重定向到.csv输出文件。

  • 方案一:*
echo "$ENTRIES" | awk -v RS=" " '{sub(/.*=/,"");sub(/<.*/,"");sub(/>/,",");if($0){print}}'

字符串

  • 解决方案2:* 此处也添加一个解决方案。
ENTRIES="<entry key=\"key-one\">value</entry> <entry key=\"key-two\">value/two</entry>"
echo "$ENTRIES" | awk -v RS='<entry key=|</entry>' 'NF{sub(/>/,",");gsub(/\"/,"");print}'
key-one,value
key-two,value/two

wsewodh2

wsewodh22#

另一种选择是使用XPath和xmlstarlet

ENTRIES='<entry key="key-one">value</entry> <entry key="key-two">value/two</entry>'

echo "<doc>$ENTRIES</doc>" | \
    xmlstarlet sel -t \
    -m "/doc/entry" \
    -v "concat(@key,',',normalize-space())" \
    -n \
    > dict.csv

字符串
备注:

  • 我需要用另一个元素(doc) Package $ENTRIES变量,以使XML格式良好。
  • 我需要通过删除$并将外部引号更改为撇号来更改ENTRIES变量。

相关问题