最近在负责一个项目的落地工作,需要每天导出客户通讯录进行统计各地区注册用户数、使用用户数、未使用用户数、注册不符合规范的用户等等操作,刚开始用户数量比较少,直接在excel中筛选查询就行,但是随着用户数量的增加到几十万,excel筛选已无法满足需求,所有就想着导入到MySQL数据库中进行查询,这样就起到事倍功半的效果.
1.首先用MySQL工具Navicat for MySQL导入excel表,excel表格编码格式为UTF-8格式.
我将excel表格导入MySQL db0库中,也需要设置编码为UTF-8格式;
mysql> show create database db0; +----------+--------------------------------------------------------------+ | Database | Create Database | +----------+--------------------------------------------------------------+ | db0 | CREATE DATABASE `db0` /*!40100 DEFAULT CHARACTER SET utf8 */ | +----------+--------------------------------------------------------------+ 1 row in set (0.00 sec)
2.如果第一步能将excel表成功导入数据库中,那就成功了一般,剩下的就是用sql对数据库的操作了,但是我的通讯录里面有三十一个省份自治区直辖市的用户,如果一条条sql统计的话也会比较的麻烦,所有就考虑自己写脚本来操作数据库了。
由于每次查询都需要登录数据库,所有将数据库用户名密码都保存在文件中,这样就可以直接执行脚本,也不担心执行提示明文密码不安全的警告.将用户数据库密码保存在/etc/my.cnf文件中,定义如下:
# cat /etc/my.cnf [client] host=localhost port=3306 user=root password=123456
然后再脚本中加入一下行,使用是$MySQL -e "SQL语句" 即可.
#sed -i 's/x190920/x190927/g' *.sh MySQL="mysql --defaults-extra-file=/etc/my.cnf" #$MySQL -e "use db0;select * from 数据库名称;"
3.接下来就是根据需求来统计用户数据,可以通过shell脚本实现.
脚本示例:
1.>统计各省的人数及总人数,其中memberlist.txt文件保存的是各省的名称,
#!/bin/bash ######################################## #注册总人数 ######################################## MySQL="mysql --defaults-extra-file=/etc/my.cnf" #统计各省的人数 function statistics() { for i in $(cat memberlist.txt |awk '{print $1}') do result=`$MySQL -e "use db0;select count(*) from x190927 where 部门 like '%$i%';"` echo $result >> tmp.txt echo -e "