shell 统计多个数据库表格中的记录并把许多文件夹中的文件按文件夹按列汇总

 最近接到一个需求:统计指定 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 文件即为我们的最终统计结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值