Shell 统计导出数据 awk 里使用shell变量 参数
来源:互联网 发布:产品原型软件 编辑:程序博客网 时间:2024/05/17 08:47
有一个数据文件 yue.csv 是这样的
3. ' "$变量" '
awk 'BEGIN{FS="|"} {if ($7>"'$time'") print $2 }'
#head yue.csv
日期,商家名称,要求在线数,当天在线数,要求在线时长,在线时长达标数,
……
"2017-12-31","唐河馆","10","3","09:00-17:00","1",
……
"2017-12-15","唐河馆","10","3","09:00-17:00","1",
……
"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
#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
! ! ! 默认不能直接使用的,可以使用一下方法
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不能加$符号。
这样要注意:在awk里,time不能加$符号。
2. " '$变量' "
awk 'BEGIN{FS="|"} {if ($7>"'$time'") print $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"]}'$var="this is a test";export $var
阅读全文
0 0
- Shell 统计导出数据 awk 里使用shell变量 参数
- awk使用shell变量及shell使用awk中的变量
- AWK中使用shell变量
- awk 中使用shell 变量
- awk中使用shell变量
- awk使用shell变量问题
- awk使用shell中的变量
- shell中使用awk,awk引用shell变量的方法
- awk使用shell变量,shell获取awk中的变量值
- awk使用shell变量,shell获取awk中的变量值
- awk使用shell变量,shell获取awk中…
- awk使用shell变量,shell获取awk中的变量值
- awk中使用shell变量疑问
- sed和awk中使用shell变量
- sed和awk中使用shell变量
- [Shell]: awk当中使用外部变量
- sed和awk中使用shell变量
- awk中使用shell中的变量
- Shell 硬盘监控
- 2Nginx+keepalive+2tomcat 故障转移
- Mysql 用户管理
- java鬼混笔记:lucene 7、查询排序和分页
- 安装python 第三方库(whl,py格式)
- Shell 统计导出数据 awk 里使用shell变量 参数
- awk sed 命令
- java AWT实现画图功能
- Python 调用 Shell命令
- 各大公司Java后端开发面试题总结
- 安装 Cacti 监控
- 例题7-7 天平难题(Mobile Computing, ACM/ICPC Tokyo 2005, UVa1354)
- 增加yum源方式 安装升级 Mysql
- Yum