我目前已经有一个已经有几千行的bash脚本,它发送各种查询MySQL以生成munin的适用输出.
到目前为止,结果只是数字而不是问题,但现在我面临着以下形式处理更复杂查询的挑战:
$ echo "SELECT id, name FROM type ORDER BY sort" | mysql test
id name
2 Name1
1 Name2
3 Name3
Run Code Online (Sandbox Code Playgroud)
从这个结果,我需要存储的ID和名称(及其各自的关联),并基于这些ID需要进行进一步的查询,如SELECT COUNT(*) FROM somedata WHERE type = 2后来输出该结果与相关成对name从第一个结果列.
我会很容易地知道如何做到这一点在PHP/Ruby的,但我想腾出叉特别是因为它是定期轮询另一个进程,但我完全失去了在那里与庆典开始.
也许使用bash是错误的方法,我应该解决?
我正在使用GNU bash, version 3.2.39(1)-release (i486-pc-linux-gnu).
您将使用while read循环来处理该命令的输出.
echo "SELECT id, name FROM type ORDER BY sort" | mysql test | while read -r line
do
# you could use an if statement to skip the header line
do_something "$line"
done
Run Code Online (Sandbox Code Playgroud)
或将其存储在一个数组中:
while read -r line
do
array+=("$line")
done < <(echo "SELECT id, name FROM type ORDER BY sort" | mysql test)
Run Code Online (Sandbox Code Playgroud)
这是该技术的一般概述.如果您有更具体的问题,请单独发布,或者如果它们非常简单,请将其发布在评论中或作为原始问题的编辑内容.
我的例子不是Bash,但我想在调用mysql命令时指出我的参数,他们压制拳击和标题.
#!/bin/sh
mysql dbname -B -N -s -e "SELECT * FROM tbl" | while read -r line
do
echo "$line" | cut -f1 # outputs col #1
echo "$line" | cut -f2 # outputs col #2
echo "$line" | cut -f3 # outputs col #3
done
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13338 次 |
| 最近记录: |