Linux数据处理数据应用

一.对查询出来的结果进行求和

        查询出来的结果有行含有“---”,有行含有“***”,而真正想要的是含有“sum”的行,且求和是的后在的数字,于是想到的办法是先grep "sum(total_amt)"把含有“---”或含有“***”的行剔除,然后awk '{print $2}'获得真正需要的数字,而我们的数字有可能是NULL,于是接下来就是grep -v NULL把为NULL的行删除,最后就用awk '{sum+=$1} END {print sum}'输出统计结果,如下所示:

select sum(total_amt) from table_name where user = 'userName' and status='S' and service_id = 'abc' and txn_date='20181021'\G | grep "sum(total_amt)" | awk '{print $2}' | grep -v NULL | awk '{sum+=$1} END {print sum}'

 

二.对查询出来的结果按日期统计求和

        对按日期group by出来的交易金额作统计,同样,里面有些行含有“---”,有些行含有“***”,由于有些交易金额的小数有两位非0的小数,用上面的方法统计,因为小数统计不准。于是用如下方法:

1.将查询的明细数据定向输出到一个临时文件中

select date_format(t.create_time, '%Y-%m-%d'), sum(amount) from table_name group by date_format(t.create_time, '%Y-%m-%d')" > temp.txt

2.对这个临时文件中的不需要的行进行剔除

sed -i '/^[[:digit:]]/!d' temp.txt

3.按日期进行求和,即日期相同的交易金额进行求和

awk 'BEGIN { printf("日期,金额\n") } {a[$1]+=$2 } END { for (i in a) printf("%s %0.2f\n", i, a[i])}' temp.txt > temp2.csv

4.对统计出来的数据,按日期进行排序

sort -t, -k 1 -n temp2.csv > daily.csv

5.删除临时文件

rm temp2.csv
rm temp.txt

 

posted on 2018-12-15 21:39  bijian1013  阅读(167)  评论(0)    收藏  举报

导航