![6e8f3b8fac849078003133d9934cdf61.png](https://i-blog.csdnimg.cn/blog_migrate/5cbfeb62a52bf04294d3ed08b187e66d.png)
1. 说明
- 阅读对象: shell入门小白
- 阅读时间: 5分钟
- 难易程度: 非常容易
- 使用频率: 高频
2. 目的
从使用场景上,介绍常用shell命令,进行数据统计的用法,仅针对从来没接触过shell命令的小白同学, 熟悉Linux环境的同学,可以跳过这篇文章,直接看中等难度文章: 数据民工来取经儿:大白话shell命令awk:数据统计(二)
文章只简单描述数据分析过程中,常用命令使用方式,而不对命令本身做过细致讲解,因为一个shell命令用法会很大,有的也会很复杂,难以一篇文章都讲清楚。
2.1 学习环境
我已经在云端搭建好,按大白话shell命令系列: 阿里云端Linux环境篇 一步步来就中。
环境连接上后, 按照下面介绍,花5分钟玩一下?
2.2 练习数据
练习数据云端路径:/home/dataworker/data/userprofile.csv
本文所有命令演示,基于该数据,一共13行
实际上单机处理几百万上千万文本是没有问题的, 这里仅为方便演示
学校,sex,age,city
北大,男,20,北京
北大,男,21,北京
北大,男,20,北京
北大,男,21,北京
北大,男,20,北京
南大,男,21,北京
南大,女,20,上海
南大,女,21,上海
南大,女,20,上海
南大,女,21,上海
南大,女,20,上海
南大,女,21,上海
如果你连接上云端的学习环境, 直接执行如下命令查看即可
cd /home/dataworker/data
cat userprofile.csv
3. 统计场景
2.1 行数
- 命令模板: wc -l 文件位置
- 代码样例:
wc -l /home/dataworker/data/userprofile.csv
# 如果你当前路径为/home/dataworker/data, 那么可以省去绝对路径
# 以后,为简单起见,将省去绝对路径,如下:
wc -l userprofile.csv
- 执行效果:
该文件共13行
![003a5b0e29d124e1b30667b7d9a9379f.png](https://i-blog.csdnimg.cn/blog_migrate/ec0f08c4eb9621f02b66cfcb834b394d.png)
2.2 过滤关键词
- 命令模板: grep '待过滤词' 文件位置
- 代码样例:
grep '北京' userprofile.csv
- 执行效果:
过滤出含有"北京"的行
![9f1d4ca544934a112463bdb05e8040af.png](https://i-blog.csdnimg.cn/blog_migrate/6377834cef83856969aa5545e875169e.jpeg)
2.3 选取某列
- 命令模板: cut -d'分隔符' -fm,n 文件位置
- 代码样例:
# 如下命令解释:
# 1. 按英文逗号","分割成4列
# 2. 选取第1、4两列
cut -d',' -f1,4 userprofile.csv
- 执行效果:
![92af3307778ab62dcfba0c2784d7cf8a.png](https://i-blog.csdnimg.cn/blog_migrate/e9bcfa4828952a45d5146a098f652860.jpeg)
2.4 按某列排序
- 命令模板: sort -t'分隔符' -knr 文件位置
- 代码样例:
# 如下命令解释:
# 1. 按英文逗号","分割成4列
# 2. 按第3列年龄,降序排列
# 3. 命令模板中的n, 表示按第几列排序,r表示倒排,没有r就是升序排列
sort -t',' -k3r userprofile.csv
- 执行效果
可以看出, 显示顺序是按照年龄从大到小倒序排列
![17b7a2285313b407a3bdfd433d3df69a.png](https://i-blog.csdnimg.cn/blog_migrate/ddae459b902ab112a61dd4f03a45e4d5.jpeg)
2.5 去重
- 命令模板: sort -u 文件路径
- 代码样例:
sort -u userprofile.csv
- 执行效果:
![13374ce1ee732a77e80bd3cf7f99c173.png](https://i-blog.csdnimg.cn/blog_migrate/f77e0b58b88d77bdc116aad083086e1e.jpeg)
2.5 以上场景组合
某文件行去重后行数
- 代码样例:
# 如下命令解释:
# | 为管道符号, 可以简单理解为把上一条命令执行的结果输入到下一条命令
# 这样就把两个不同命令像水管一样连接起来使用
sort -u userprofile.csv | wc -l
- 执行效果:
![48a46b2965190e07098fcf27e5dd6a94.png](https://i-blog.csdnimg.cn/blog_migrate/0f6acae92276f569837afba724aff914.png)
某文件包含关键词行数
- 代码样例:
# 文件中, 包含"北京"的行数
grep '北京' userprofile.csv | wc -l
- 执行效果:
![67bc0aca6ffded732e598a0fafa56f53.png](https://i-blog.csdnimg.cn/blog_migrate/6305723990db03012f97fdf2dd81f36b.png)
文件按某列去重后排序
- 代码样例:
# 数据处理目的: 选取第3、4列, 去重后,按照年龄倒序排列
cut -d',' -f3,4 userprofile.csv | sort -u | sort -t',' -k1r
- 执行效果:
![8bf47571f4cd73136897e4c4dbf70008.png](https://i-blog.csdnimg.cn/blog_migrate/c8deaf1744fc06909a31e3c9e0b22d52.png)
4. About Me
来自北京回龙观的一名数据民工, 2019年开始写写数据民工那些大白话
- 微信公众号: workindata
- 个人微信号: ITlooker
- 知乎专栏: 大数据那些儿大白话
欢迎关注,加微,唠嗑,吐槽O(∩_∩)O哈哈~