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



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

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

文本文件内容示例:

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

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

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

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

我知道我需要每 3 行有一个新的表条目。

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

谢谢

我将输入中的每一行拆分为=并使用第二部分。
然后我用管道将其传送到 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');

如果可以更改文件的结构,请尝试使用LOAD DATA INFILE ...指令。详细规格在这里。这比你自己写要快得多:)

如果没有,请尝试此操作。

最新更新