Назад | Перейти на главную страницу

Преобразовать строку в xml в сценарии оболочки?

Я написал сценарий, который извлекает данные из базы данных.

Теперь я хочу улучшить этот сценарий, чтобы создать XML-файл с данными, возвращаемыми базой данных.

Как я могу преобразовать эту строку в 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 станет именем таблицы, $ 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 полей.