读取 awk 变量中的 mysql 列结果

读取 awk 变量中的 mysql 列结果

我无法在 awk 中从 mysql 查询读取单个值。我可以在 bash 中读取它,但不能在 awk 中读取它。我想读取 awk 中的结果变量,因为我只想根据 awk 中编写的一些动态条件触发查询。

awk '{
 cmd="(mysql --host='abc' --user='def' --password='..' --database='ghf' -sNe \"select VALUE from table where KEY='171-125';\")"
 cmd|getline $lastdiff;
 print "diff is "lastdiff;
}'


diff is

diff is

我也尝试过grep -Eo \" [0-9]* \"/它没有帮助。我都用过system()或者cmd | getline将结果放入变量中,但它总是返回 0。

 sudo awk 'BEGIN {
>  myvalue=system("mysql --host='abc' --user='def' --password='..' --database='ghf' -sNe \"select VALUE from table where KEY='171-125';\" ");
>  print "diff is ",myvalue;
> }'
diff is  0

Bash 正在给出结果

mysql --host='abc' --user='def' --password='..' --database='ghf' -sNe "select VALUE from table where KEY='171-125';"
1

我想将数值 VALUE 读入 awk 中的 lastdiff 变量。任何推荐的解决方案。

答案1

mysql ... | awk '{ print "diff is", $0 }'

要不就

mysql ... 'SELECT CONCAT("diff is ", VALUE) FROM ...'

从内部awk

awk 'BEGIN { cmd = "mysql ..." }
     { cmd | getline value;
       printf("diff is %s\n", value); # or print "diff is", value;
       close(cmd) }'

这将为脚本的每一行输入运行一次命令awk。如果没有close(),它将运行一次并给出value命令的每个连续输出行的值。

您的脚本使用$lastdiff而不是lastdiffwith getline。其中awk$lastdifflastdiff当前输入记录的字段号。

答案2

您需要在 bash 中创建变量,然后使用 -v 标志将其传递给 awk ,因此:

cmd=$(mysql --host='abc' --user='def' --password='..' --database='ghf' -sNe \"select VALUE from table where KEY='171-125';\")
awk -v cmd=$cmd '{ some awk script }'

或者,如果您想解析 mysql 的输出,请执行以下操作:

awk '{ some awk script }' <<< $cmd

相关内容