gpt4 book ai didi

bash - Unix:从 .dat 文件中提取数据并插入到 SQL 数据库中?

转载 作者:行者123 更新时间:2023-11-29 09:52:00 38 4
gpt4 key购买 nike

您好,我有大约 1000 个 .dat 文件需要处理,每个文件包含大约 1,000 个用户的数据。文件格式如下(实际上,数据当然是填写的:John, 18, john@email.com 例如——我只是给它们编号以突出排序问题):

<Name> Name_1
<Age> Age_1
<Email> Email_1

<Name> Name_2
<Age> Age_2
<Email> Email_2

(...etc...)

假设我有一个数据库表,有两个列(名称和电子邮件),我使用 Unix/Shell/Bash 提取数据并填充数据库的最佳方法是什么?目前我正在使用以下方法来尝试提取数据:

for file in $1/*;
do
grep "<Name>" $file |
sed 's/<Name>//g' >> temp.txt

grep "<Email>" $file |
sed 's/<Email>//g'>> temp.txt
done

虽然这提取了正确的数据,但输出如下:

(--File 1--)
Name_1
Name_2
Email_1
Email_2
(--File 2--)
Name_1001
Name_1002
Email_1001
Email_1002
(etc)

实际上,我在想如果我能以这个顺序提取数据会更好,尽管我不知道使用 grep 是否可以做到这一点。

Name_1
Email_1

Name_2
Email_2

(etc)

因为如果数据是这样提取的,那么我可以将值存储在 shell 变量中,然后使用以下命令添加到数据库中:

sqlite db.sql INSERT INTO users VALUES ($name, $email);

或者类似的东西,如果可行的话。

无论如何,希望我已经半清楚地解释了自己,但如果有人能帮助我解决这个问题,我将不胜感激。实际上,我问的是是否可以先提取一个用户,然后是一封电子邮件,然后是另一个用户和相应的电子邮件……与 grep 的工作方式相反,它先提取所有用户,然后提取所有电子邮件。也许还有另一个功能可以很好地完成这项工作?

干杯!

最佳答案

这对 grepsed 来说不是个好问题。我推荐 awk未经测试的第一次剪辑:

awk '
/<Name>/ {name=$1}
/<Email>/ {emails[name] = $1}

END {for (n in emails) {print n, print email[n]}}
' *.dat

你也可以试试

END {for (n in emails) {print "sqlite db.sql INSERT INTO users VALUES (" n "," email");"}}

关于bash - Unix:从 .dat 文件中提取数据并插入到 SQL 数据库中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36751585/

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