gpt4 book ai didi

mysql - 如何使用shell脚本将一个文件的内容插入到mysql数据库的不同字段中?

转载 作者:行者123 更新时间:2023-11-29 07:39:01 26 4
gpt4 key购买 nike

我正在尝试扫描文件夹中的新文件并读取这些文件并将其内容插入数据库,然后从文件夹中删除文件。直到这里它的工作,但问题是整个内容被插入到数据库的一个字段中。下面是代码:

   inotifywait -m /home/a/b/c -e create -e moved_to |
while read path action file; do
for filename in `ls -1 /home/a/b/c/*.txt`
do
while read line
do
echo $filename $line
mysql -uroot -p -Bse "use datatable; INSERT INTO
table_entries (file,data ) VALUES ('$filename','$line'); "
done <$filename
done
find /home/a/b/c -type f -name "*.txt" -delete
done

基本上这些文件包含:姓名、地址、联系方式、电子邮件。我想将文件中的名称插入数据库中的名称字段,地址中的地址。在 php 中我们使用 explode 来拆分数据,我在 shell 脚本中使用什么?

最佳答案

如果使用 LOAD DATA INFILE 会容易得多(有关语法和选项的完整说明,请参阅手册)。

类似这样的东西(虽然我还没有测试过):

inotifywait -m /home/a/b/c -e create -e moved_to |
while read path action file; do
for filename in `ls -1 /home/a/b/c/*.txt`
do
mysql datatable -e "LOAD DATA LOCAL INFILE '$filename'
INTO TABLE table_entries (name, address, contact_no, email)
SET file='$filename'"
done
find /home/a/b/c -type f -name "*.txt" -delete
done

编辑:我指定了 mysql datatable,这就像使用 USE datatable; 来设置默认数据库。这应该可以解决有关“未选择数据库”的错误。

您列为 (name, address, contact_no, email) 的列命名表中的列,它们必须与输入文件中的列匹配。如果您的表中有另一列要设置,但不是来自输入文件中的数据,则使用额外子句 SET file='$filename'

在删除 *.txt 文件之前,您还应该使用一些错误检查来确保导入成功。

请注意,LOAD DATA INFILE 假定行以换行符 (\n) 结尾,并且字段由制表符 (\t) 分隔。如果您的文本文件使用逗号或其他一些分隔符,您可以将语法添加到 LOAD DATA INFILE 语句以自定义它读取文件的方式。文档通过许多示例展示了如何执行此操作:https://dev.mysql.com/doc/refman/5.7/en/load-data.html我建议你花一些时间阅读它。真的不是很长。

关于mysql - 如何使用shell脚本将一个文件的内容插入到mysql数据库的不同字段中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47418184/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com