处理MySQL导致bash

mar*_*ark 2 mysql bash

我目前已经有一个已经有几千行的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).

Pau*_*ce. 5

您将使用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)

这是该技术的一般概述.如果您有更具体的问题,请单独发布,或者如果它们非常简单,请将其发布在评论中或作为原始问题的编辑内容.


Leo*_*Leo 5

我的例子不是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)