大数据处理示例(下)
Contents
Bash脚本文件的Unix格式问题
在Windows下使用Cygwin提供的Unix环境,用Notepad++编辑Shell脚本时,总是提示碰到类似”未预期的符号 `$’do\r’’ 附近有语法错误
“。直到搜到《notepad++写shell语句时执行错误》(http://www.2cto.com/os/201411/350875.html),才发现原来是系统间换行符和回车符的差别(http://blog.chinaunix.net/uid-26404201-id-3082677.html),晕死!虽然在书上屡屡见到这个说法,自己还是第一次碰到,涨姿势……
Unix系统里,每行结尾只有“<换行>”,即“\n”;Windows系统里面,每行结尾是“<回车><换行>”,即“\r\n”;Mac系统里,每行结尾是“<回车>”。
数据处理
得到所有的用户id
1 | $ awk -F, 'NR>1{print $1}' data/user_balance_table.csv | sort -g -u > user/users |
数据文件data/user_balance_table.csv每行以逗号分割列项(-F,
),跳过第一行表头(NR>1
),输出第一列所有用户id(print $1
),再根据用户id的数字值大小(-g
)去重复(-u
)排序。
得到所有的日期
1 | $ awk -F, 'NR>1{print $2}' data/user_balance_table.csv | sort -u > date/dates |
数据文件data/user_balance_table.csv每行以逗号分割列项(-F,
),跳过第一行表头(NR>1
),输出第二列所有日期(print $2
),再去重复(-u
)排序。
批量得到各用户id的并按日期排序后的数据结果
1 |
|
逐行读取用户id(for……
),组合相应的命令字符串(command……
)并执行该命令。
注意:
- 在bash脚本中是用
Esc
下方的`符号包裹住表示执行命令 - \$后接变量名表示调用,字符串中如果要显示美元符号,则必须用\进行转义
- 利用
eval command-line
执行字符串命令。这是因为Shell会扫描两次该语句,第一次把字符串转换成命令,第二次执行命令。
批量得到各日期的并按用户id排序后的数据结果
1 |
|
逐行读取日期(for……
),组合相应的命令字符串(command……
)并执行该命令。
统计各日期的所有用户的总购买量和总申购量
1 |
|
做出的 日期-购买量/申购量 统计图,有规律可循。