合并2个或更多文件

时间:2013-11-04 10:40:06

标签: database bash merge

我有很多数据库。所有这些都包含一个表。表的名称未知。我需要的是将所有表放入一个大数据库中。

因此,如果我有3个带有table1,table2和table3的文件,我需要一个包含table1,table2和table3的文件。这些表本身不能合并到一起,我只需要它们在同一个文件中。

由于我不知道有多少个文件,我需要使用bash并解析一个文件列表。

非常感谢!

2 个答案:

答案 0 :(得分:0)

我正在粘贴这样做的逻辑(可能必须根据您的要求进行修改)

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`)   

这适用于所有db的

如果将所有数据库名称保留在文件中,则可以将该文件名作为外部while循环的输入

一对一从mysql提示复制就像这样

 CREATE TABLE db2.table LIKE db1.table;
INSERT INTO db2.table SELECT * FROM db1.table;

外部while循环给出数据库名称,而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

答案 1 :(得分:0)

您只需使用数据库的转储工具即可。使用sqlite3之类的东西:

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