![在 shell 脚本中将字符串转换为 xml?](https://linux22.com/image/543505/%E5%9C%A8%20shell%20%E8%84%9A%E6%9C%AC%E4%B8%AD%E5%B0%86%E5%AD%97%E7%AC%A6%E4%B8%B2%E8%BD%AC%E6%8D%A2%E4%B8%BA%20xml%EF%BC%9F.png)
我编写了一个从数据库获取数据的脚本。
现在我想增强该脚本以创建一个包含数据库返回数据的 xml 文件。
我如何在 shell 脚本中将该字符串转换为 xml 文件。
脚本
#!/bin/sh
echo 'SELECT TABLE_NAME AS "Table Name", table_rows AS "Quant of Rows", ROUND((data_length + index_length)/1024/1024,2) AS "Total Size Mb" FROM information_schema.TABLES WHERE information_schema.TABLES.table_schema="database_name";' | mysql -u root -pmysql
从数据库获取数据
"Table Name\tQuant of Rows\tTotal Size Mb\ntable_1\t2\t0.02\ntable_2\t1\t0.02\ntable_3\t142\t0.02\ntable_4\t50839\t5.03\ntable_5\t16573\t5.13\ndlr\t0\t0.02\ntable_6\t6\t0.02\ntable_7\t0\t0.03\ntable_8\t2\t0.08\ntable_9\t4\t0.02\n"
我想在脚本中写入一些逻辑,将该字符串转换为 xml 文件。
我该怎么做?处理这种情况的首选方法是什么?
答案1
您可以使用 awk 执行此操作。awk -F\t 将告诉 awk 使用制表符作为字段分隔符。$1 将成为表名称,$2 将成为行数,依此类推。此外,$0 表示整行,而 $NF 始终是最后一个字段。
cat data | awk -F\t '{printf("<xml-tag-1>%s</xml-tag-1>\n<xml-tag-2>%s</xml-tag2>\n", $1, $2 )}'
这将为前两个字段手动创建 xml。
答案2
#!/bin/sh
mysql -u root -pmysql --xml > /home/test/Desktop/temp.xml << eof
SELECT TABLE_NAME AS "Table Name", table_rows AS "Quant of Rows", ROUND((data_length + index_length)/1024/1024,2) AS "Total Size Mb" FROM information_schema.TABLES WHERE information_schema.TABLES.table_schema='database_name';
eof