Shell实现mysql查询结果保存为txt和csv问题
作者:promise524
本文介绍如何编写shell脚本,利用mysql命令行工具执行SQL查询,并将结果导出为CSV和TXT文件,通过--batch和--skip-column-names参数简化输出,用sed替换制表符生成CSV,保留制表符生成TXT,适合数据导出和自动化任务
shell 脚本实现一个查询 MySQL 数据库后将结果保存为 CSV 和 TXT 文件,可以使用 mysql 命令行工具执行 SQL 查询,并将结果导出到文件中。
1. 实现思路
mysql命令执行 SQL 查询后,默认输出的列使用制表符 (\t) 分隔。- 通过
--batch和--skip-column-names参数,取消了列名,并让结果更适合输出。 - 使用
sed 's/\t/,/g'将制表符替换为逗号,从而生成 CSV 格式的输出。 - 对于 TXT 文件输出,保持原始的制表符格式即可,不需要使用
sed进行替换。
2. Shell 脚本
#!/bin/bash # MySQL 配置 DB_HOST="localhost" DB_USER="username" DB_PASSWORD="password" DB_NAME="database" # 要执行的 SQL 查询 SQL_QUERY="SELECT * FROM table;" # 输出文件 CSV_FILE="output.csv" TXT_FILE="output.txt" # 查询并将结果保存为 CSV 文件 mysql -h "$DB_HOST" -u "$DB_USER" -p"$DB_PASSWORD" -D "$DB_NAME" -e "$SQL_QUERY" \ --batch --skip-column-names | sed 's/\t/,/g' > "$CSV_FILE" # 查询并将结果保存为 TXT 文件 mysql -h "$DB_HOST" -u "$DB_USER" -p"$DB_PASSWORD" -D "$DB_NAME" -e "$SQL_QUERY" \ --batch --skip-column-names > "$TXT_FILE" # 提示文件已保存 echo "查询结果已保存为 $CSV_FILE 和 $TXT_FILE"
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
