猛击、切割和插入

猛击、切割和插入

我正在尝试使用 bash 脚本从冒号分隔文件中输入数据,并将这些值插入 mysql 数据库。到目前为止,我能够适当地剪切这些值并打印出来,但我不知道如何在每次剪切时操作数据。

IE。

cut -d: -f1 input.txt | \
while read firstVal;
do 
   echo firstVal;
done

从这里看来,我似乎能够在我回显名称的位置放置一个 mysql 插入行来实现我想要做的事情。所以我可以通过用 f2 替换 f1 对第二个值执行相同的操作,但我不知道如何同时使用多个值,然后插入 f1、f2、f3 等。有什么想法吗?

答案1

为什么不使用更强大的脚本语言?(php,python等)

echo "test1:test2:test3" | \
awk -F: '{print "INSERT INTO `tableName` (`column1`, `column2`, `column3`) \
VALUES('\''"$1"'\'', '\''"$2"'\'', '\''"$3"'\'' ) " }'

生成:

INSERT INTO `tableName` (`column1`, `column2`, `column3`) \
VALUES('test1', 'test2', 'test3' )

awk 使用 -F 标志来设置分隔符。值的添加的单引号是通过将其括\'在一组自己的单引号中来实现的。(您可以在此处阅读有关魔法的内容:https://stackoverflow.com/questions/9899001/how-to-escape-single-quote-in-awk-inside-printf),但最终导致:'\''

整合起来

  1. 一次读取输入文件的每一行,并对每一行运行 awk 命令。
  2. 将命令的输出保存到variable
  3. echo "$variable; " | mysql -u username -pPASSWORDHERE databaseName

您必须建立连接并对每一行运行查询。如果这是个问题,您可以划定;插入命令列表,将它们全部组合起来,然后在一个连接中运行它们(即:一次调用 mysql 命令)

答案2

如果可用的话,我建议使用 phpmyadmin 的导入 CSV 功能,其中包括更改分隔符等功能。

相关内容