shell处理
2016-01-19 20:24
351 查看
今天老大让我帮消费的数据,然后花了特别久的时间。其实就从mysql中查数据而言并没有什么难点。但是由于这些uid(几千个)并不是所有都有消费的。有的sql查出来是空,这样就有可能不会出现这个uid。而且因为要查找两个不同的月份,不一定这两个月都有消费,所以跑出来的数据很难看。以及要区分pc和无线,又存在相同的情况。所以要进行补零。
我是这么补零的,先跑一遍,生成一个result文件。用awk拿到这个文件中的所有的id,这里比较容易
cat result | awk '{a[$1]+=0;}END{for(i in a) print i}' > file1
跑出来之后呢,就要和原始的uid比较,看少了哪些uid,使用命令grep -vwf file1 uid> end,
这样就可以找出缺少的uid。这行命令比较两个文件的不同,和comm命令比,好处就是,两个文件的区别和文字出现的顺序无关。
找出来之后,每次做sql语句之前,用拿uid去这里面找一遍。如果有,直接就造数据输出。
不同月份的sql语句不一样(老大要我查的东西不同),就用一个if语句。if [ "$3" = "12" ](一个空格不能少)then
sql="xxx" else sql="xxx" fi ,生成结果放到不同的文件,再次去找uid,看是否有漏掉的uid,用同样的方法解决。
ok,两个文件都生成了。又有新的问题出现了,有的uid的pc有数据,无线没数据。有的则相反,又要构造数据了。没有数据的后几位要填0。无线和pc用一个标志位区分(0和1),最后的结果应该是0,1,0,1……这样子分布。所以就有写了一行命令
cat info2015 | awk 'BEGIN{i=0} {if($3==i){print} else{print j"\t""2014-09-01""\t"1"\t"0"\t"0"\t"0"\t"0;i++;print};i++;i=i%2;j=$1}' > final2015
大致造的数据是这一种格式。但是还完,因为不一定0,1,0,1就是安全的。uid数目*2就应该等于行数。发现少了两行,什么情况?因为有个别行缺了1,而他的下一个uid有恰好缺了0。这里我就百度了比较上下两行第一列是否相同的方法。结果时间太紧,我就没仔细看。看着挺复杂。
所以就曲线救国吧。我先把上下两行合并到一行,然后用awk去比对第一列和第八列(下一行的第一列出现在了第八列)。
合并:cat final2015|sed 'N;s/\n/ \t/' >system.txt
我是这么补零的,先跑一遍,生成一个result文件。用awk拿到这个文件中的所有的id,这里比较容易
cat result | awk '{a[$1]+=0;}END{for(i in a) print i}' > file1
跑出来之后呢,就要和原始的uid比较,看少了哪些uid,使用命令grep -vwf file1 uid> end,
这样就可以找出缺少的uid。这行命令比较两个文件的不同,和comm命令比,好处就是,两个文件的区别和文字出现的顺序无关。
找出来之后,每次做sql语句之前,用拿uid去这里面找一遍。如果有,直接就造数据输出。
不同月份的sql语句不一样(老大要我查的东西不同),就用一个if语句。if [ "$3" = "12" ](一个空格不能少)then
sql="xxx" else sql="xxx" fi ,生成结果放到不同的文件,再次去找uid,看是否有漏掉的uid,用同样的方法解决。
ok,两个文件都生成了。又有新的问题出现了,有的uid的pc有数据,无线没数据。有的则相反,又要构造数据了。没有数据的后几位要填0。无线和pc用一个标志位区分(0和1),最后的结果应该是0,1,0,1……这样子分布。所以就有写了一行命令
cat info2015 | awk 'BEGIN{i=0} {if($3==i){print} else{print j"\t""2014-09-01""\t"1"\t"0"\t"0"\t"0"\t"0;i++;print};i++;i=i%2;j=$1}' > final2015
大致造的数据是这一种格式。但是还完,因为不一定0,1,0,1就是安全的。uid数目*2就应该等于行数。发现少了两行,什么情况?因为有个别行缺了1,而他的下一个uid有恰好缺了0。这里我就百度了比较上下两行第一列是否相同的方法。结果时间太紧,我就没仔细看。看着挺复杂。
所以就曲线救国吧。我先把上下两行合并到一行,然后用awk去比对第一列和第八列(下一行的第一列出现在了第八列)。
合并:cat final2015|sed 'N;s/\n/ \t/' >system.txt
相关文章推荐
- 第三章 shell编程之运算符
- shell基础
- 初识shell
- linux shell 的here document 用法 (cat << EOF)
- ShellExecute使用详解
- AWK调用SHELL,并将变量传递给SHELL
- 编写shell时,let: not found
- shell命令执行hive脚本(hive交互,hive的shell编程)
- shell命令执行hive脚本(hive交互,hive的shell编程)
- Xshell连接linux(deepin)时提示ssh服务器拒绝了密码,请再试一次
- 通过Git WebHooks+脚本实现自动更新发布代码之shell脚本
- 通过Git WebHooks+脚本实现自动更新发布代码之shell脚本
- android adb shell 查询进程流量情况
- 利用PowerShell更改Search Service Account和删除旧的Search Service topology
- shell 日志分析 获取code的统计——grep awk group功能使用
- 【Linux】之shell特殊变量整理
- 几款xshell绝佳配色方案
- shell脚本编写
- shell编程之正则表达式
- shell命令执行的详细时间查看命令time