有一个数据文件  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"]}'

最新文章

  1. 通过微信小程序看前端
  2. Python检测IP合法 是否为公网IP
  3. js之浏览器对象模型(BOM)
  4. linux/shell 文本文件删除/删掉空行
  5. [再寄小读者之数学篇](2014-11-26 广义 Schur 分解定理)
  6. SegmentReader 批量 dump
  7. Android Cocos2d-x游戏集成友盟社会化组件分享功能
  8. 【Excel】Excel筛选迟点时间的公式
  9. 队列(存储结构数组)--Java实现
  10. R语言高性能编程(二)
  11. CSS以及JQuery总是忽略掉的小问题
  12. 201621123057 《Java程序设计》第11周学习总结
  13. logging日志
  14. 分享一个二维码图片识别控制台程序Demo
  15. I/O模型系列之四:两种高性能IO设计模式 Reactor 和 Proactor
  16. NOIP2018旅行
  17. 使用CSS选择器实现选择指定子节点
  18. DateGridView控件与mysql交互
  19. python变量和变量赋值的几种形式
  20. rt.jar sun package

热门文章

  1. 通过例子进阶学习C++(七)CMake项目通过模板库实现约瑟夫环
  2. hive 动态分区
  3. html包含html文件的方法
  4. Activiti接受任务(receiveTask)
  5. Djaingo 日志配置
  6. ls命名 | Linux统计文件夹内的文件个数
  7. FileNotFoundError: [WinError 2] 系统找不到指定的文件
  8. 缓存 ehcache
  9. 前端性能优化之利用 Chrome Dev Tools 进行页面性能分析
  10. 踩坑:windows系统下,nodejs版本管理器无法使用n来管理