最近接到一个需求:统计指定 100个 用户的在 2018 年 的消费情况,每个月分两张表,而且上半年和下半年同数据源不同库
思路:
同一个用户的前半年和后半年分脚本跑到一个文件夹中,消费情况按照月份和表作为文件名,生成到一个文件夹中。
如我们跑6月到12月的数据
run.sh
userid=$1
mkdir $userid
cd $userid
for i in {06..12};
do
for j in {1..2};
do
# 每个月的两部分数据存储在两张表中
table1=aaa.2018$i'_'$j'_part1'
table2=aaa.2018$i'_'$j'_part2'
#echo $table1 $table2
# 查询 mysql 数据库 不要表头
mysql -h'localhost' -u'root' -p'root' -P'3309' --default-character-set=utf8 -e "select sum(ex_price),sum(present),count(1) from $table1 where user_id='$userid'" | grep -v 'sum(ex_price)' > 2018_result_$i'_'$j'_part1'
mysql -h'localhost' -u'root' -p'root' -P'3309' --default-character-set=utf8 -e "select sum(ex_price),sum(present),count(1) from $table2 where user_id='$userid'" | grep -v 'sum(ex_price)' > 2018_result_$i'_'$j'_part2'
echo $i $j
done;
done;
run.sh 传入userid 参数是一个用户的数据 接下来循环指定userid的记录文件 userid100
12345678
23456789
34567891
......
runSelected100user.sh
for line in `cat userid100`
do
echo $line
sh run.sh $line
done
接下来开始分用户进行统计
for lineuser in `cat 包含文件夹名字的文件`
do
echo $lineuser
cd /data2/绝对目录/$lineuser # 用绝对目录
sum1=0
sum2=0;
sum3=0;
n=0;
for line in `cat *`
do
let n++
if [ $[n%3] == 0 ] ; then
let sum3+=$line;
elif [ $[n%3] == 1 ] ; then
let sum1+=$line;
elif [ $[n%3] == 2 ] ; then
let sum2+=$line;
fi
done
# 输入到同一个文件中 不用再分别汇总了
echo $lineuser $sum1 $sum2 $sum3 >> ../result
done
result 文件即为我们的最终统计结果