Database 合并2个或多个文件

Database 合并2个或多个文件,database,bash,merge,Database,Bash,Merge,我有很多数据库。它们都包含一个表。表的名称未知。我需要的是,把所有的表放到一个大数据库中 如果我有3个文件,分别是table1、table2和table3,我需要一个文件,其中有table1、table2和table3。表本身不能合并在一起,我只需要它们在同一个文件中 因为我不知道我有多少个文件和表,所以我需要用bash来解析文件列表 多谢各位 我正在粘贴操作逻辑,可能需要根据您的要求进行修改 while read line do count=0 while read fine do

我有很多数据库。它们都包含一个表。表的名称未知。我需要的是,把所有的表放到一个大数据库中

如果我有3个文件,分别是table1、table2和table3,我需要一个文件,其中有table1、table2和table3。表本身不能合并在一起,我只需要它们在同一个文件中

因为我不知道我有多少个文件和表,所以我需要用bash来解析文件列表


多谢各位

我正在粘贴操作逻辑,可能需要根据您的要求进行修改

while read line
do
count=0
 while read fine
   do
   if [ $count -gt 1 ] #as first line is tablename heading by sql
     then
     mysql -uuser -ppasword -s -e 'CREATE TABLE newdb.$fine  LIKE $line.$fine;'
     mysql -uuser -ppasword -s -e 'INSERT INTO newdb.$fine SELECT * FROM $line.$fine;;'
   done < $(mysql -uuser -ppassword -s -D$line -e 'show databases')
  fi
  count=$(($count+1));

done < $(mysql -uuser -ppassword -s -e `show databases`)   
外部while循环给出数据库名,内部while循环给出表名

如果您使用所需的数据库名称保存文件,则

 while read line
do
count=0
 while read fine
   do
   if [ $count -gt 1 ] #as first line is tablename heading by sql
     then
     mysql -uuser -ppasword -s -e 'CREATE TABLE newdb.$fine  LIKE $line.$fine;'
     mysql -uuser -ppasword -s -e 'INSERT INTO newdb.$fine SELECT * FROM $line.$fine;;'
   done < $(mysql -uuser -ppassword -s -D$line -e 'show databases')
  fi
  count=$(($count+1));

done < dbnames.txt
您可以简单地使用数据库的转储工具。使用sqlite3类似于:

sqlite3 mergeDB.sqlite3 < <( sqlite3 db1.sqlite3 <<< ".dump" && sqlite3 db2.sqlite3 <<< ".dump" && sqlite3 db3.sqlite3 <<< ".dump" )

这是一个非常一般的问题,请添加表结构和所需输出的详细信息。请添加到目前为止您调查过的方法,以及这些方法如何不适用于您。这个问题以stackoverflow问题策略的当前形式提交给general。bash如何知道文件列表?它存储在哪里/如何存储?好的,这里有一些更多的信息:我有一个巨大的perl脚本,它进行了几个测试,并将每个测试的输出存储在一个db文件中。测试有名称,例如test1和test2-因此在测试结束时,我将有两个db文件。第一个文件将有一个名为test1的表,第二个文件将有一个名为test2的表。表的结构都相同,列的名称也相同。问题是,我不知道这些,因为用户可以更改它们,甚至可以为测试结果添加另一列。这就是我尝试的:sqlite3 mergedDB.db,但问题是,我不知道列名。这就是为什么我问,是否有一个通用的方法将这些文件合并成一个文件。我认为这应该不难做到,但由于我对sql非常陌生,我不知道如何做到这一点。我可以很容易地生成一个db_文件列表。如何在脚本中实现此文件列表?也是几年前,我与bash合作过,所以我可能也需要一些帮助..mysql-uuser-ppassword-s--e'show databases'>>dbnames.txt,编辑文件并删除不需要的系统数据库名称,如information\u schema test,按照逻辑更改语法非常感谢!我试过了,但是我在第13行发现了一个语法错误,因为我已经完成了。。我更正了,你现在可以检查一次
sqlite3 mergeDB.sqlite3 < <( sqlite3 db1.sqlite3 <<< ".dump" && sqlite3 db2.sqlite3 <<< ".dump" && sqlite3 db3.sqlite3 <<< ".dump" )