我正在尝试编写一个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
由于
答案 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)