Mysql

在shell腳本中將字元串轉換為xml?

  • March 22, 2011

我編寫了一個從數據庫中獲取數據的腳本。

現在我想增強該腳本以創建一個包含由數據庫返回的數據的 xml 文件。

我如何將該字元串轉換為 shell 腳本中的 xml 文件。

script.sh

#!/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 文件。

我該怎麼做?處理這種情況的首選方法是什麼?

#!/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

你可以用 awk 做到這一點。awk -F\t 將告訴 awk 使用製表符作為欄位分隔符。 $ 1 would become Table Name, $ 2 將成為 Quant of Rows,依此類推。還, $ 0 refers to the entire line, while $ NF 始終是最後一個欄位。

cat data | awk -F\t '{printf("<xml-tag-1>%s</xml-tag-1>\n<xml-tag-2>%s</xml-tag2>\n", $1, $2 )}'

這將為前 2 個欄位手動創建 xml。

引用自:https://serverfault.com/questions/250290