![读取 awk 变量中的 mysql 列结果](https://linux22.com/image/116625/%E8%AF%BB%E5%8F%96%20awk%20%E5%8F%98%E9%87%8F%E4%B8%AD%E7%9A%84%20mysql%20%E5%88%97%E7%BB%93%E6%9E%9C.png)
我无法在 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
而不是lastdiff
with getline
。其中awk
,$lastdiff
指lastdiff
当前输入记录的字段号。
答案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