有一个数据文件  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. 暑假提高组集训Day1 T1

    说实话,今天的题真的有点难! ~备受打击~ 我们先来看一看第一题吧 看起来好像不太简单,其实并不难 下面来提供两种方法吧 1.做法一 //签到题 /* 那么这一题就是告诉你n个点的坐标,把它们分别放到 ...

  2. ThreadLocal终极篇

    前言 在面试环节中,考察"ThreadLocal"也是面试官的家常便饭,所以对它理解透彻,是非常有必要的. 有些面试官会开门见山的提问: “知道ThreadLocal吗?” “讲讲 ...

  3. Gym - 101982F 扫描线+线段树

    题目链接:https://codeforces.com/gym/101982/attachments 要你求覆盖奇数次的矩形面积并,每次更新时减去原先的值即可实现奇数次有效,下推时为保证线段长度不变左 ...

  4. dataset中shuffle()、repeat()、batch()用法

    import numpy as npimport tensorflow as tfnp.random.seed(0)x = np.random.sample((11,2))# make a datas ...

  5. 创建django报错使用miniconda

    sqlite文件缺失 下载地址 https://sqlite.org/download.html https://blog.csdn.net/xuzhexing/article/details/905 ...

  6. 基于Flask框架搭建视频网站的学习日志(二)

    基于Flask框架搭建视频网站的学习日志(二)2020/02/02 一.初始化 所有的Flask程序都必须创建一个程序实例,程序实例是Flask类的对象 from flask import Flask ...

  7. python笔记11

    今日内容 函数小高级 lambda 表达式 内置函数 内容回顾 函数基本结构 参数 形参 基本参数:def func(a1,a2):pass 默认值:def func(a1,a2=123):pass ...

  8. CDH 离线安装 CM

    CDH支持Yum包,Tar包,RPM包,Cloudera Manager(CM)四种安装方式 Cloudera Manager(CM) 用于CDH集群管理,可进行节点安装,配置,服务管理等,提供Web ...

  9. SpringBoot学习(一):SpringBoot入门

    1.Spring Boot 简介 1) 简化Spring应用开发的一个框架: 2) 整个Spring技术栈的一个大整合: 3) J2EE开发的一站式解决方案: 2.微服务 2014,martin fo ...

  10. MySQL5.6数据导入MySQL5.7报错:ERROR 1031 (HY000)

    一.故障现象 今天将一个在MySQL5.7上的数据导入到MySQL5.6里面去,默认存储引擎都是InnoDB,导入报错如下: [root@oratest52 data]# mysql -uroot - ...