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) 收藏 举报
浙公网安备 33010602011771号