将包含文本的多个文件加载到MySQL中

时间:2011-04-04 19:19:15

标签: mysql bash

我有几个文件夹,每个文件夹包含四个文本文件。我试图将每个文件中的数据加载到同一行的MYSQL表中的相应列中。我已经单独使用了LOAD DATA INFILE命令,但这最终会为每个文本文件创建新条目。有没有办法从多个文件加载数据并将每个文件分配给表中的特定列而不创建新条目?

我尝试过类似下面的命令,但我认为它不存在。

LOAD DATA INFILE'col1.txt','col2.txt','col3.txt','col4.txt'INTO TABLE testing(col1,col2,col3,col4);

我想过将这些文件合并到一个文件中并用逗号分隔。但是,我无法使用此选项,因为某些文件包含多行文本。

非常感谢任何帮助。

*更新*

我的文本文件就像这个name.txt,它只是单行文本文件的名字和姓氏。 Address.txt,它是文本文件中跨越4-5行/行的完整地址。我也有phone.txt这是一个单行文本文件。 Company.txt在单个带衬里的文本文件中包含公司名称。

当我运行粘贴-d“|” name.txt address.txt phone.txt company.txt

输出如下:

Joe Smith|123 Fake St|416-555-1212|ACME INC
|Toronto, ON||
|H0H 0H0||
|Canada||

如果我将其加载到我的数据库中,该行的地址将仅包含123 Fake St,然后下一行将包含Toronto,ON等等。我想将整个多行地址加载到我的数据库中的地址列中。关于如何解决这个问题的任何想法?

1 个答案:

答案 0 :(得分:0)

您正面临数据加载的基本问题。

您说得对,您需要合并列文件,以便创建一个文件。你最好使用tab char或其他不在数据中的char,通常是'|'会很好地工作。

paste -d "|" 1.txt 2.txt 3.txt. 4.tx

应该有用。

你的意思是多行文字。我们需要一个例子来解决这个问题。点击帖子下方的修改链接,并注意顶部的格式选项。粘贴您的示例问题数据,选择它,然后单击{}或``以使用固定宽度字符格式化数据。最后请注意,当您在输入框下方输入时,您可以看到消息的样子。

编辑:第4个文件,包含1列的多行值。

这是一项正在进行的工作,因为我们不知道实际数据是什么样的。 给出像

这样的数据
ACME INC
Toronto, ON
H0H 0H0
Canada

ACME INC
Toronto, ON
H0H 0H0
Canada

并且每个'记录'用空行分隔,您可以预过滤该文件以创建看起来像

的单行记录

ACME INC 多伦多,ON H0H 0H0 加拿大

ACME INC 多伦多,ON H0H 0H0 加拿大

使用以下awk代码

awk 'BEGIN{RS=""; FS="\n"; } { for (i=1;i<=NF;i++){ printf "%s ", $i; };printf "\n";} ' test4.txt > text4.txt.cln

修改paste命令以使用file4.txt.cln 让我们知道会发生什么。

如果您的数据被1个空白行分隔,那么我们就是好的。如果它们全部一起运行,那么我们需要一些样本数据。希望每个客户总是有N(4或5或?)行数据。这将很容易转换。如果没有,那么你将不得不回到创建file4的方式,并想出一种以这些格式之一生成文件的方法。

其他SO读者,请参阅下面的评论以获取完整的故事。

我希望这会有所帮助。

P.S。因为你似乎是一个新用户,如果你得到一个帮助你的答案,请记住将其标记为已接受,和/或给它一个+(或 - )作为一个有用的答案