使用awk/grep提取mysql表列名,并使用awk打印xml

使用awk/grep提取mysql表列名,并使用awk打印xml,mysql,schema,awk,Mysql,Schema,Awk,我有一个mysql数据库,我希望最后有一个xml文件,如下所示: <user> <column>id</column> <column>name</column> <column>password</column> </user> <dept> <column>id</column> <column>name</column&g

我有一个mysql数据库,我希望最后有一个xml文件,如下所示:

<user>
  <column>id</column>
  <column>name</column>
  <column>password</column>
</user>
<dept>
  <column>id</column>
  <column>name</column>
  <column>code</column>
</dept>

身份证件
名称
密码
身份证件
名称
代码

不做输出格式化部分,我相信我可以用awk或其他东西,但是从模式文件中获取列名。我迷路了?

要获取表名:

Select `table_name` FROM `information_schema`.TABLES
然后从每个表中选择列:

DESCRIBE `table_name`;


这将生成一个包含两个字段的文本文件:表名和列名

SELECT TABLE_NAME, COLUMN_NAME 
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA='YourDatabase'
ORDER BY COLUMN_NAME;
然后您可以编写一个简单的AWK脚本:

BEGIN {table_name = -1;}
    { 
      if (table_name != $1) {
          if (table_name != -1)
              printf("</%s>\n", table_name);
          table_name = $1;
          printf("<%s>\n", table_name);
      }
      printf("\t<column>%s</column>\n",$2);
    }
END { printf("</%s>\n", table_name); }
BEGIN{table_name=-1;}
{ 
如果(表名称!=$1){
如果(表名称!=-1)
printf(“\n”,表格名称);
表_name=$1;
printf(“\n”,表格名称);
}
printf(“\t%s\n”,2美元);
}
结束{printf(“\n”,表名称);}

另一种方法是使用-输出与上面概述的内容不同,但没有什么是您以后无法转换的…下面是模式数据可能适合您的方式(如果您只需要模式,还可以使用--no data)


BEGIN {table_name = -1;}
    { 
      if (table_name != $1) {
          if (table_name != -1)
              printf("</%s>\n", table_name);
          table_name = $1;
          printf("<%s>\n", table_name);
      }
      printf("\t<column>%s</column>\n",$2);
    }
END { printf("</%s>\n", table_name); }
<?xml version="1.0"?>
<mysqldump xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<database name="example">
<table_structure name="user">
<field Field="id" Type="int(11)" Null="NO" Key="PRI" Extra="auto_increment" />
<field Field="name" Type="varchar(128)" Null="NO" Key="" Default="" Extra="" />
<field Field="password" Type="varchar(128)" Null="NO" Key="" Default="" Extra="" />
</table_structure>
</database>
</mysqldump>