You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash脚本处理SQL多行两列结果:循环遍历与定时执行需求

修正Bash脚本遍历SQL多行查询结果的逻辑

我正在编写包含SQL查询的Bash脚本,该查询返回多行两列数据,示例输出如下:

|db_name | used_% |
|--------|--------|
|row 1   |29%     |
|row 2   |45%     |
|row 3   |60%     |

依此类推。我需要遍历每一行,将db_name和对应的used_%分别存入变量,同时让脚本每10秒执行一次。目前我的代码将db_name和used_%存入了单个变量,代码如下:

#!/bin/bash

while :
do 
 QUERY=$("select db_name, used_% from Table1;")
 DBNAME=$(echo "$QUERY" | cut -d"|" -f1)
 USED_PERCENT=$(echo "$QUERY" | cut -d"|" -f2)
 echo "PUTVAL \'$DBNAME'/gauge-used_percent\" interval 10 N:${USED_PERCENT#"${USED_PERCENT%%[!:space:]]*}"}"
 sleep 10
done

希望有人能帮忙修正循环遍历db_name和used_%的逻辑。感谢!

修正后的脚本

#!/bin/bash

# 无限循环,每10秒执行一次查询
while :
do 
    # 替换为你的实际SQL执行命令(比如mysql/psql等),跳过前两行表头和分隔线
    mysql -u your_username -p'your_password' -D your_database -e "select db_name, used_% from Table1;" | 
    tail -n +3 |
    # 逐行分割处理数据
    while IFS='|' read -r _ db_name used_percent _; do
        # 清理字段前后空格,去除百分比符号
        cleaned_db=$(echo "$db_name" | xargs)
        cleaned_used=$(echo "$used_percent" | xargs | tr -d '%')
        
        # 输出符合要求的PUTVAL指令
        echo "PUTVAL '$cleaned_db'/gauge-used_percent interval 10 N:$cleaned_used"
    done

    sleep 10
done

核心修正说明

  • 跳过无效行:用tail -n +3过滤掉查询结果的前两行(表头和分隔线),只处理实际数据行
  • 逐行读取字段:通过while IFS='|' read -r _ db_name used_percent _按|分割每行,_用来忽略每行首尾的空字段(因为每行以|开头和结尾)
  • 数据清洗:用xargs去除字段前后的空格,tr -d '%'剥离百分比符号,保证变量值格式符合后续使用要求
  • 修正SQL执行方式:原代码中直接用QUERY=$("select ...")无法执行SQL,需要替换为对应数据库客户端的执行命令(示例用mysql,可根据实际情况换成psql等)

内容的提问来源于stack exchange,提问作者skasar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 05:45:56