使用文本文件和bash脚本填充MySQL表

时间:2012-08-14 12:52:49

标签: mysql bash sed awk

我正在尝试编写一个bash脚本,它将获取一个文本文件并使用其内容来填充MySQL表。

文本文件包含我需要添加到表格中的众多条目。

文本文件内容示例:

Firstname=bob
Surname=ross
Age=9
Firstname=gary
Surname=graeme
Age=19
Firstname=henry
Surname=harry
Age=23

文本文件的结构与上面的示例类似,同样的3个变量会不断为每个进入mysql表的唯一条目分配新值。

我使用sed删除了我不想处理的文本文件中以“#”开头的所有空行和行。

我的问题是如何使用bash使用textfile中的内容每隔三行生成一个sql插件来生成mysql查询。我知道我需要一次循环文件3行,直到文本文件的末尾到达并以某种方式解析“=”之后的每个值 并将其分配给循环迭代中的变量以插入mysql数据,但我不知道如何执行此操作。

我知道每3行需要一个新的表项。

echo "INSERT INTO $table (Firstname, Surname, Age) VALUES ('$Firstname', '$Surname', '$age');" | mysql $db

由于

2 个答案:

答案 0 :(得分:1)

我在=的输入中拆分每一行并使用第二部分 然后我将它传递给while - 循环,我使用read fname sname age来填充循环内的变量。我使用NR % 3==0 {print("")}每三行在输出中引入一个换行符。

awk -F"=" '{printf("%s ", $2)}; NR % 3==0 {print("")}' input_file | \
while read fname sname age; do
    echo "INSERT INTO $table (Firstname, Surname, Age)
      VALUES ('$fname', '$sname', '$age');" | mysql $db
done

<强>更新:
输入:

Firstname=bob
Surname=ross
Age=9
Activity=1 2 3 4 5
Firstname=gary
Surname=graeme
Age=19
Activity=1 2 3 4 5
Firstname=henry
Surname=harry
Age=23
Activity=1 2 3 4 5

使用此代码:

awk -F"=" '{printf("%s ", $2)}; NR % 4==0 {print("")}' input | \
while read fname sname age act; do
    echo "'$fname', '$sname', '$age', '$act');" 
done

给出:

'bob', 'ross', '9', '1 2 3 4 5');
'gary', 'graeme', '19', '1 2 3 4 5');
'henry', 'harry', '23', '1 2 3 4 5');

答案 1 :(得分:0)

如果可以更改文件结构,只需尝试使用LOAD DATA INFILE ...指令即可。详细规范为here。它比你自己写的要快得多:)

如果没有,请尝试this