我一直在尝试解析Paypal电子邮件并将结果信息插入我的数据库。 我的大部分代码都在工作,但是我无法获取要插入到awk代码中的变量来创建sql插入查询。

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

我无法弄清楚为什么未正确插入email-addr。

===============>>#1 票数:1 已采纳

您正在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

输出:

INSERT INTO users (email,paid,paypal_tran,CCReceipt) VALUES
('dogcat@gmail.com',1,'9MU013922L4775929','1234-2345-3456-4567');

  ask by user3386373 translate from so

未解决问题?本站智能推荐:

1回复

与Grep功能相似的SQL查询

我有以下bash命令: 我需要创建一个模仿相同功能的SQL查询。 表模式如下: 样本数据: 我已经编写了以下代码,但无法进行区分大小写的匹配。 我尝试使用COLLATE Latin1_General_CS_AS和COLLATE Latin1_General_BI
2回复

bash剪切和粘贴SQL插入语句

我想从一个INSERT语句中删除一个列名值对,然后将其移到另一个INSERT语句中。 我大约有一百个具有这种格式的文件(尽管每个文件的格式可能略有不同,例如某些用户可能将整个INSERT语句放在一行上)。 输入 输出值 通常,使用上述格式时,我想我可以在脚本中使用sed和
3回复

使用grep和awk的BASH FOR循环

我正在尝试让这个脚本cat一个文件并grep每行877并找到每一行,打印第一列是IP并将其存储在主机中。 它每次都被困在awk 。 我运行sh -x some.sh来查看它挂起的位置。 我应该打印到文件而不是列表吗? 为什么它会被困在awk ?
2回复

使用AWK / Grep / Bash从HTML提取数据

我正在尝试制作一个Bash脚本以从HTML页面提取结果。 我通过Curl获得了页面的内容,但是下一步是解析输出,这是有问题的。 该页面的有趣内容如下所示: 我想输出类似: 我对Grep有所了解,但是我无法决定要使其在这里工作,还是有人告诉我使用Awk,它似乎最适合这种任务
2回复

自定义日期验证 - BASH - 只使用grep或awk等

我看到几个帖子(有些帖子取决于date -d $xyz来验证)但是我正在尝试创建一个until循环,其中应该重新提示用户输入日期格式的值,直到它与自定义日期格式匹配。 我的日期格式(我需要Splunk)是m/d/yyyy:h:m:s或mm/dd/yyyy:hh:mm:ss 这意味着,
3回复

Bash:使用ls,awk和grep列出文件大小

我在终端上输入了以下命令: 根据我的理解,ls -l会在当前目录中打印长格式(包括权限)的目录和文件列表,因此使用awk(从列表中打印所需字段,即文件大小)和grep [0-9]给了我想要的正确输出,即红色突出显示的文件大小。 例如:drwxr-xr-x 2个zdgx6学生103
4回复

正则表达式匹配并使用awk / grep / sed / bash / vim打印

我有一个文本文件,其中每一行具有以下结构 我只想从每行中提取一对六位数的数字,例如,如果某行包含 输出将是 我尝试使用awk / grep / sed / bash / vim的解决方案总数太多,无法在此处列出。 以下是其中之一
1回复

在bash文件中使用grep和awk进行shell扩展时,引用转义问题

以下命令从命令行运行: 但是,当从bash脚本尝试相同操作时,我遇到了问题。 我很确定这是因为我没有正确地转义某些引号。 我尝试了几种不同的组合,这是我目前的尝试: 执行此输出时
1回复

是否可以使用Grep,Sed或Awk或bash脚本而不对输出文件进行排序?

我有2个文本文件。 File1有大约1,000行,File2有20,000行。 File1的摘录如下: File2的摘录如下: 在File3(输出文件)中,使用grep,sed,awk或bash脚本,我想实现以下输出: 例如,当我使用Grep生成File3时,我发现它
4回复

Bash,使用grep,sed或awk提取部分文本,然后进行匹配

我有一个文本文件,想提取所有匹配“蓝色”的接口 想要的输出: (注意,int 2为“红色”,因此不显示) 我试过了:grep“ int” -A n file.txt | grep“ blue”,但只显示与“ blue”匹配的行。 我还要显示匹配“ int”的行。