【问题标题】:How do I enter the variable value of my bash command into MySQL?如何将 bash 命令的变量值输入 MySQL?
【发布时间】:2014-05-25 17:00:06
【问题描述】:

以下代码从网站中提取所有域名,并将它们设置为来自httrack 数据流的$domain 的值。

domain=$(httrack --skeleton http://www.ilovefreestuff.com -V "cat \$0" | grep -iEo '[[:alnum:]-]+\.(com|net|org)')

$domain 的值是这样的……

googlesyndication.com facebook.com facebook.com ilovefreestuff.com ilovefreestuff.com facebook.com facebook.com ilovefreestuff.com ilovefreestuff.com peadig.com facebook.net ilovefreestuff.com w3.org ilovefreestuff.com yoast.com ilovefreestuff.com

我的数据库设置好了,这个命令运行良好。

mysql -pPASSWORD -e "INSERT INTO domains.domains (domains) VALUES ($domain)”

我正在尝试将变量$domain 中的每个单独域从一个组合命令行中的httrack 数据流动态插入到我的MySQL 数据库中。所以在我疯狂的脑海里,它应该看起来类似于下面......不幸的是,这不起作用。我没有得到任何输出,只是另一个 bash 提示符。

domain=$(httrack --skeleton http://www.ilovefreestuff.com -V "cat \$0" | grep -iEo '[[:alnum:]-]+\.(com|net|org)') | mysql -pPASSWORD -e "INSERT INTO domains.domains (domains) VALUES ($domain)"

我不确定如何将$domain 变量分割成单独的域,以便我可以为每个 MySQL 数据单元输入一个域,并且我不确定如何将结果通过管道传输到 MySQL,因为该命令是数据流。也许我需要一个 for 循环和一个 cut 命令?

【问题讨论】:

    标签: mysql bash httrack


    【解决方案1】:

    也许我需要一个 for 循环和一个 cut 命令?

    你说的。它不会是单行的,但这应该可以:

    domain=$(httrack --skeleton http://www.ilovefreestuff.com -V "cat \$0" | grep -iEo '[[:alnum:]-]+\.(com|net|org)')
    
    for single_domain in $domain
    do
      mysql -pPASSWORD -e "INSERT INTO domains.domains (domains) VALUES ($single_domain)"
    done
    

    【讨论】:

    • 是的,这个作品。此解决方案的问题是 httrack 数据流非常大,并且 httrack 命令可能在某些网站上运行数小时和/或数天。有时它永远不会完成。因此,我希望在实时发现它们时导入这些域。有没有更好的方法让我完成我想要的结果?
    • @user3672303 够公平的。您基本上希望插入在每个域上实时而不是批量发生,对吗?
    • 是的,这就是我正在寻找的解决方案。
    • @user3672303 也许最好的解决方案是在抓取阶段将数据保存到文本文件或 CSV,然后在另一个阶段处理抓取的数据。
    • FWIW:也可以写成一行 ;-)
    猜你喜欢
    • 1970-01-01
    • 2011-12-19
    • 1970-01-01
    • 2016-05-28
    • 2012-07-16
    • 2011-01-19
    • 2011-06-06
    相关资源
    最近更新 更多