UNIX脚本自动化SQL查询与更新:提取列值至变量需求
自动化SQL处理与cols.txt字段提取方案
一、核心:处理cols.txt生成UPDATE字段列表
cols.txt每行以制表符分隔多个col_name=Value键值对,用awk可以高效处理这类键值拆分场景,比cut/sed更灵活:
1. 生成UPDATE语句所需的SET子句内容
执行以下命令,直接输出可嵌入UPDATE的字段赋值串(自动用逗号分隔):
awk -F'\t' '{ for(i=1; i<=NF; i++) { split($i, kv, "=") printf "%s='%s'", kv[1], kv[2] if(i < NF) printf ", " } print "" }' cols.txt
示例输出(对应cols.txt每行数据):
Salary='10001', deptname='ABC' Age='30', Job='Engineer'
2. 将字段赋值存入Shell变量(按行生成var1、var2...)
如果需要把每行的字段赋值串存为独立Shell变量,可结合read和循环实现:
count=1 while IFS=$'\t' read -ra fields; do update_str="" for field in "${fields[@]}"; do col="${field%%=*}" val="${field#*=}" # 转义值中的单引号,避免SQL语法错误 val="${val//\'/\\\'}" update_str+="${col}='${val}', " done # 移除末尾多余的逗号和空格 update_str="${update_str%, }" # 赋值给varN变量 declare "var${count}=${update_str}" ((count++)) done < cols.txt
执行后,可通过echo $var1、echo $var2查看生成的字段串。
二、整合到完整自动化Shell脚本
把上述逻辑嵌入到你的SQL自动化流程中,完整脚本示例:
#!/bin/bash # 1. 执行验证查询,获取count值 QUERY_RESULT=$(mysql -u your_user -p'your_pass' -D your_db -N -e "source file.sql") COUNT=$(echo "$QUERY_RESULT" | awk '{print $1}') # 2. count>0则直接退出 if [ "$COUNT" -gt 0 ]; then echo "验证通过,count=$COUNT,退出脚本" exit 0 fi # 3. 处理cols.txt生成UPDATE字段串(这里取第一行的字段作为更新内容,可按需调整) UPDATE_SET=$(awk -F'\t' 'NR==1 { for(i=1; i<=NF; i++) { split($i, kv, "=") # 转义值中的单引号 gsub(/'\''/, "\\'\''", kv[2]) printf "%s='%s'", kv[1], kv[2] if(i < NF) printf ", " } }' cols.txt) # 执行UPDATE语句(替换WHERE子句为你的硬编码条件) mysql -u your_user -p'your_pass' -D your_db -e "UPDATE emp SET $UPDATE_SET WHERE your_where_clause;" # 4. 重新执行验证查询 NEW_COUNT=$(mysql -u your_user -p'your_pass' -D your_db -N -e "source file.sql") echo "更新后验证count=$NEW_COUNT"
注意事项:
- 替换脚本中的数据库连接信息(your_user、your_pass、your_db)和WHERE子句
- 若cols.txt的值包含特殊字符(如单引号),脚本中已添加转义逻辑,确保SQL语法合法
内容的提问来源于stack exchange,提问作者Sudhakar Nelapati
相关产品推荐
相关产品推荐

