使用awk、bash、grep创建sql查询
我一直在尝试解析一封贝宝电子邮件,并将结果信息插入我的数据库。我的大部分代码都正常工作,但我无法在awk代码中插入变量来创建sql insert查询使用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
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');