Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用awk、bash、grep创建sql查询_Sql_Bash_Awk_Grep - Fatal编程技术网

使用awk、bash、grep创建sql查询

使用awk、bash、grep创建sql查询,sql,bash,awk,grep,Sql,Bash,Awk,Grep,我一直在尝试解析一封贝宝电子邮件,并将结果信息插入我的数据库。我的大部分代码都正常工作,但我无法在awk代码中插入变量来创建sql insert查询 if [ -f email-data.txt ]; then { grep -e "Transaction ID:" -e "Receipt No: " email-data.txt \ >> ../temp cat ../temp \ | awk 'NR == 1 {printf("%s\t

我一直在尝试解析一封贝宝电子邮件,并将结果信息插入我的数据库。我的大部分代码都正常工作,但我无法在awk代码中插入变量来创建sql insert查询

if [  -f email-data.txt ]; then {
    grep  -e "Transaction ID:" -e "Receipt No: " email-data.txt \
      >> ../temp
    cat ../temp \
      | awk 'NR == 1 {printf("%s\t",$NF)}  NR == 2 {printf("%s\n",$NF)}' \
      >> ../temp1
    awk '{print $1}' $email-data.txt \
      | grep @ \
      | grep -v \( \
      | grep -v href \
      >> ../address
    email_addr=$(cat ../address)
    echo  $email_addr 
    cat ../temp1 \
      | awk '{print "INSERT INTO users (email,paid,paypal_tran,CCReceipt) VALUES"; print "(\x27"($email_addr)"\x27,'1',\x27"$2"\x27,\x27"$3"\x27);"}' \
      > /home/linux014/opt/post-new-member.sql
输出如下所示

INSERT INTO users (email,paid,paypal_tran,CCReceipt) VALUES('9MU013922L4775929  9MU013922L4775929',1,'9MU013922L4775929','');
应该像

INSERT INTO users (email,paid,paypal_tran,CCReceipt) VALUES('dogcat@gmail.com',1,'9MU013922L4775929','1234-2345-3456-4567');
(更改名称以保护无辜)
我使用的试验数据如下所示

Apr 18, 2014 10:46:17 GMT-04:00 | Transaction ID: 9MU013922L4775929

You received a payment of $50.00 USD from Dog Cat (dogcat@gmail.com)
Buyer:
Dog Cat
dogcat@gmail.com

Purchase Details 

Receipt No: 1234-2345-3456-4567

我不明白为什么电子邮件地址没有正确插入

您正在调用
awk
中的shell变量。正确的方法是使用
-v
选项创建
awk
变量

例如,假设
$email
是您的shell变量,那么

... | awk -v awkvar="$email" '{do something with awkvar}' ...
阅读更多细节

但是,尽管如此,我还是会尝试解析文本文件:

awk '
/Transaction ID:/ { tran  =  $NF }
/Receipt No:/     { receipt = $NF }
$1 ~ /@/          { email  =  $1 }
END {
     print "INSERT INTO users (email,paid,paypal_tran,CCReceipt) VALUES"; 
     print "("q email q","1","q tran q","q receipt q");"
}' q="'" data.txt
输出:
您可能想放弃这个脚本,使用一种带有电子邮件解析器类和mysql类的编程语言。为什么要重新发明轮子?我知道这是一个恼人的回答。你问“我如何让这辆疯狂的自行车工作?”我告诉你“去骑自行车,用汽车。”但老实说,你肯定会用这种方式创建无法维护的代码。一年后,你会为自己使用shell工具解析电子邮件并从中生成SQL而感到愤怒。我确信这一点,因为我在过去也做过同样的事情。我的观点是正确的。谢谢你的坦率。我不太精通电子邮件解析器和mysql类。谢谢你的回答。非常感谢你的回答。正如你所知,它马上就起作用了。我很欣赏你的技巧,一定会使用这段代码。干杯…简单而有力,就像Bash一般。非常感谢。
INSERT INTO users (email,paid,paypal_tran,CCReceipt) VALUES
('dogcat@gmail.com',1,'9MU013922L4775929','1234-2345-3456-4567');