有一个数据文件  yue.csv  是这样的

 
#head yue.csv 
日期,商家名称,要求在线数,当天在线数,要求在线时长,在线时长达标数,
 
……
"2017-12-31","唐河馆","10","3","09:00-17:00","1",
……
"2017-12-15","唐河馆","10","3","09:00-17:00","1",
……
"2016-12-01","宛城馆","10","1","09:00-17:00","1",
"2016-12-01","安阳馆","10","2","09:00-17:00","2",
"2016-12-01","卧龙馆","10","1","09:00-17:00","1",
"2016-12-01","卧龙书城","10","1","09:00-17:00","1",
"2016-12-01","浪飞仙","10","1","09:00-17:00","1",
"2016-12-01","平舆超市","10","1","09:00-17:00","1",
"2016-12-01","商水馆","10","1","09:00-17:00","1",
 
有几百家加盟店,某个店每天登陆就会记录一行

数据大概有一千行

现在要计算每个加盟店的  月登录率=店的月登陆天数/月天数
 
公式1如下:
# cat yue.csv |cut -d',' -f2|sort|uniq -c|sort -nr|awk '{for(i=1;i<NF;i++){$i/=31}}1'>1.txt
 
截取第二列店名  排序  去重统计数量  按名次排序  对第二列进行除法计算  
 
 
结果:
[root@localhost ~]# cat yue.csv |cut -d',' -f2|sort|uniq -c|sort -nr|awk '{for(i=1;i<NF;i++){$i/=31}}1'|less
0.966667 "济源馆"
0.933333 "修武馆"
0.933333 "荥阳馆"
0.9 "鹿邑馆"
0.9 "兰考馆"
0.9 "方城县"
0.9 "邓州馆"
0.9 "泌阳馆"
0.866667 "郑州馆"
0.866667 "西峡馆"
0.866667 "淅川馆"
 
公式1适用于 有多列需要修改的情况,思考下只计算第一列  可以简单些
 
公式2如下:

# cat yue.csv |cut -d',' -f2|sort|uniq -c|sort -nr|awk '{$1=$1/30}1{print $0}'|less
 
 
 
脚本1:
继续优化 有命令写成一个shell脚本 1.sh,执行时带有一个文件名的参数
#!/bin/bash
filename=$1
#cat $filename |cut -d',' -f2|sort|uniq -c|sort -nr|awk '{$1=$1/30}1{print $0}'>1.txt
cat $filename |cut -d',' -f2|sort|uniq -c|sort -nr|awk '{for(i=1;i<NF;i++){$i/=30}}1'>1.txt
 
执行时 直接    
#1.sh 文件名.csv 
目录下就生成一个1.txt文件
 
 
 
脚本2:
上一个脚本只传递了一个文件名参数,应该再增加一个每月天数的 参数 
例如  
#1.sh  yue.csv 30

脚本如下
#!/bin/bash
filename=$1
#cat $filename |cut -d',' -f2|sort|uniq -c|sort -nr|awk '{$1=$1/30}1{print $0}'>1.txt
cat $filename |cut -d',' -f2|sort|uniq -c|sort -nr|awk -v nvar="$2" '{for(i=1;i<NF;i++){$i/=nvar}}1'>1.txt
 
 
!!!这里要注意的是  在awk中 使用shell的参数,
!   !   !  默认不能直接使用的,可以使用一下方法

shell 中变量为    TIME=60    参数为$1

1.awk -v 选项让awk 里使用shell变量 、参数

awk -v time="$TIME" 'BEGIN{FS="|"} {if ($7>time) print $2 }'

或 awk -v time="$1" 'BEGIN{FS="|"} {if ($7>time) print $2 }' 
这样要注意:在awk里,time不能加$符号。
 
2.   " '$变量' "
awk 'BEGIN{FS="|"} {if ($7>"'$time'") print $2 }' 
3.  ' "$变量" '
awk 'BEGIN{FS="|"} {if ($7>"'$time'") print $2 }' 
 
4.export 变量 使用ENVIRON["var"]形式
$var="this is a test";export $var 

awk 'BEGIN{print ENVIRON["var"]}'

Shell脚本 统计店中店导出数据的更多相关文章

  1. 利用shell脚本统计文件中出现次数最多的IP

    比如有如下文件test.txt 1  134.102.173.43 2  134.102.173.43 3  134.102.171.42 4  134.102.170.9 要统计出现次数最多的IP可 ...

  2. 使用 shell 脚本自动获取发版指标数据

    问题背景 大一点的公司都会建立一套规章流程来避免低级错误,例如合入代码前必需经过同行评审:上线前必需提测且通过 QA 验证:全量前必需经过 1%.5%.10%.20%.50% 的灰度过程.尤其是最后一 ...

  3. oracle中导入导出数据备份数据库

    原文:oracle中导入导出数据备份数据库 数据库所在位置                         将数据导出到的文件名                    用户名 备份数据库 :exp c ...

  4. Shell脚本统计文件行数

    Shell脚本统计文件行数 转自 http://www.jb51.net/article/61943.htm    示例:row_count.sh文件 awk '{print NR}' row_cou ...

  5. shell 脚本在linux中的应用

    shell脚本在linux中应用广泛,之前一直选用python写脚本来进行一些文件操作,但是最后发现shell脚本非常方便,所以特意来学习下皮毛,便于提高自己效率 定义变量 1 country=&qu ...

  6. Saiku数据库迁移后的刷新脚本-Shell脚本读取数据库中的数据(二十三)

    Saiku数据库迁移后的刷新脚本 之前有谈过对saiku中的数据进行刷新,因为saiku默认会从缓存中查询数据,但是配置不使用缓存又会效率低下... 所以这里就需要做一个数据刷新,每次ETL之后都需要 ...

  7. python实用脚本-通过jenkins界面化导出数据

    1.jenkins 配置 2.jenkins 脚本 ansible-playbook /opt/test.yaml --extra-vars "loanno=${loanno}" ...

  8. SQL Server数据库中导入导出数据及结构时主外键关系的处理

    2015-01-26 软件开发中,经常涉及到不同数据库(包括不同产品的不同版本)之间的数据结构与数据的导入导出.处理过程中会遇到很多问题,尤为突出重要的一个问题就是主从表之间,从表有外检约束,从而导致 ...

  9. Shell脚本实现DB2数据库表导出到文件

    该Shell脚本用于实现将DB2数据库表导出到文件,将在另一篇博文<Java代码调用Shell脚本并传入参数实现DB2数据库表导出到文件>中通过Java代码实现调用该脚本并传入参数. #! ...

随机推荐

  1. 机器学习-特征工程-Missing value和Category encoding

    好了,大家现在进入到机器学习中的一块核心部分了,那就是特征工程,洋文叫做Feature Engineering.实际在机器学习的应用中,真正用于算法的结构分析和部署的工作只占很少的一部分,相反,用于特 ...

  2. PBFT && RBFT算法流程

    PBFT && RBFT算法流程以及其实现(上) 这篇文章主要是讲一下RBFT中共识算法流程以及节点的加入的流程.在下一篇博客中,将使用Java实现该算法. 传统的PBFT算法无法动态 ...

  3. kaggle竞赛分享:NFL大数据碗(上篇)

    kaggle竞赛分享:NFL大数据碗 - 上 竞赛简介 一年一度的NFL大数据碗,今年的预测目标是通过两队球员的静态数据,预测该次进攻推进的码数,并转换为该概率分布: 竞赛链接 https://www ...

  4. 查看jvm内存信息

    Runtime.getRuntime().maxMemory(); //最大可用内存,对应-Xmx Runtime.getRuntime().freeMemory(); //当前JVM空闲内存 Run ...

  5. 这个时候 快下班了 我来翻译一段: Pro ASP.NET MVC 3 Framework

    Binding to a Derived Type绑定派生类型Although we have focused on interfaces (since that is most relevant i ...

  6. 创建自定义路由处理程序(Creating a Custom Route Handler) | 定制路由系统| 高级路由特性 |精通ASP-NET-MVC-5-弗瑞曼

    自定义实现 IRouteHandler

  7. 优雅写Java之四(类与对象)

    一.类相关用法 二.Bean 三.泛型与注解 四.序列化

  8. 通过识别页面内容获得返回值判断后续执行(exists指令的用法)

    本案例主要用到airtest 的exists指令 从指令解释可以知道,当判断某图片不存在的时候,会返回false值 脚本思路即为如果返回值==false则执行A,!=fales则执行B 下图脚本思路, ...

  9. 设计模式-03工厂方法模式(Factory Method Pattern)

    插曲.简单工厂模式(Simple Factory Pattern) 介绍工厂方法模式之前,先来做一个铺垫,了解一下简单工厂模式,它不属于 GoF 的 23 种经典设计模式,它的缺点是增加新产品时会违背 ...

  10. Linux 安装Jenkins

    1.安装jdk1.8 下载地址:https://github.com/frekele/oracle-java/releases 下载 root@123:~/my_java# wget https:// ...