COMMAND LINE INTERFACE

CLI即COMMAND LINE INTERFACE命令行模式,是在图形界面得到普及之前使用最为广泛的用户界面,也就是咱们平时看到的黑乎乎背景与绿油油文字系统界面。

我们常常习惯于使用图形界面(exceljuypter)对数据进行复杂操作和分析,但是面对一些文本处理可以通过一些命令更为方便快捷,本文旨在一些数据处理场景进行基础介绍,命令的具体用法和参数还请读者自行谷歌。

获取数据

Linux中 curl是一个利用URL规则在命令行下工作的文件传输工具,可以说是一款很强大的http命令行工具。它支持文件的上传和下载,是综合传输工具,但按传统,习惯称url为下载工具。

wget工具体积小但功能完善,它支持断点下载功能,同时支持FTP和HTTP下载方式,支持代理服务器和设置起来方便简单。

# 通过链接下载数据
wget https://github.com/amanthedorkknight/fifa18-all-player-statistics/raw/master/2019/data.csv
curl -s http://www.gutenberg.org/files/76/76-0.txt

转化数据

in2csv是csvkit套件的一个重要工具,其作用是可以将各种格式化数据(如excel)转化为csv文件。由于unix系统下无法直接查看excel文件,所以需要将xlsx提前转化为csv文件即逗号分隔文件。

# 将xlsx文件转化为csv文件,>为重定向符号,可将前一个命令输出保存为文件。
in2csv data/imdb-250.xlsx > data/imdb-250.csv

查看数据

cat是最常用的文本查看命令,但是只能全量查看,面对较大的数据需要配合headtail查看前n行或后n行文本。

# 只查看前1行即喵一眼列名 head -n
$ head -1 data.csv
,ID,Name,Age,Photo,Nationality,Flag,Overall,Potential,Club,Club Logo,Value,Wage,Special,Preferred Foot,International Reputation,Weak Foot,Skill Moves,Work Rate,Body Type,Real Face,Position,Jersey Number,Joined,Loaned From,Contract Valid Until,Height,Weight,LS,ST,RS,LW,LF,CF,RF,RW,LAM,CAM,RAM,LM,LCM,CM,RCM,RM,LWB,LDM,CDM,RDM,RWB,LB,LCB,CB,RCB,RB,Crossing,Finishing,HeadingAccuracy,ShortPassing,Volleys,Dribbling,Curve,FKAccuracy,LongPassing,BallControl,Acceleration,SprintSpeed,Agility,Reactions,Balance,ShotPower,Jumping,Stamina,Strength,LongShots,Aggression,Interceptions,Positioning,Vision,Penalties,Composure,Marking,StandingTackle,SlidingTackle,GKDiving,GKHandling,GKKicking,GKPositioning,GKReflexes,Release Clause# 只查看后5行 tail -n
$ tail -5 data.csv
18202,238813,J. Lundstram,19,https://cdn.sofifa.org/players/4/19/238813.png,England,https://cdn.sofifa.org/flags/14.png,47,65,Crewe Alexandra,https://cdn.sofifa.org/teams/2/light/121.png,€60K,€1K,1307,Right,1,2,2,Medium/ Medium,Lean,No,CM,22,"May 3, 2017",,2019,5'9,134lbs,42+2,42+2,42+2,44+2,44+2,44+2,44+2,44+2,45+2,45+2,45+2,44+2,45+2,45+2,45+2,44+2,44+2,45+2,45+2,45+2,44+2,45+2,45+2,45+2,45+2,45+2,34,38,40,49,25,42,30,34,45,43,54,57,60,49,76,43,55,40,47,38,46,46,39,52,43,45,40,48,47,10,13,7,8,9,€143K
18203,243165,N. Christoffersson,19,https://cdn.sofifa.org/players/4/19/243165.png,Sweden,https://cdn.sofifa.org/flags/46.png,47,63,Trelleborgs FF,https://cdn.sofifa.org/teams/2/light/703.png,€60K,€1K,1098,Right,1,2,2,Medium/ Medium,Normal,No,ST,21,"Mar 19, 2018",,2020,6'3,170lbs,45+2,45+2,45+2,39+2,42+2,42+2,42+2,39+2,40+2,40+2,40+2,38+2,35+2,35+2,35+2,38+2,30+2,31+2,31+2,31+2,30+2,29+2,32+2,32+2,32+2,29+2,23,52,52,43,36,39,32,20,25,40,41,39,38,40,52,41,47,43,67,42,47,16,46,33,43,42,22,15,19,10,9,9,5,12,€113K
18204,241638,B. Worman,16,https://cdn.sofifa.org/players/4/19/241638.png,England,https://cdn.sofifa.org/flags/14.png,47,67,Cambridge United,https://cdn.sofifa.org/teams/2/light/1944.png,€60K,€1K,1189,Right,1,3,2,Medium/ Medium,Normal,No,ST,33,"Jul 1, 2017",,2021,5'8,148lbs,45+2,45+2,45+2,45+2,46+2,46+2,46+2,45+2,44+2,44+2,44+2,44+2,38+2,38+2,38+2,44+2,34+2,30+2,30+2,30+2,34+2,33+2,28+2,28+2,28+2,33+2,25,40,46,38,38,45,38,27,28,44,70,69,50,47,58,45,60,55,32,45,32,15,48,43,55,41,32,13,11,6,5,10,6,13,€165K
18205,246268,D. Walker-Rice,17,https://cdn.sofifa.org/players/4/19/246268.png,England,https://cdn.sofifa.org/flags/14.png,47,66,Tranmere Rovers,https://cdn.sofifa.org/teams/2/light/15048.png,€60K,€1K,1228,Right,1,3,2,Medium/ Medium,Lean,No,RW,34,"Apr 24, 2018",,2019,5'10,154lbs,47+2,47+2,47+2,47+2,46+2,46+2,46+2,47+2,45+2,45+2,45+2,46+2,39+2,39+2,39+2,46+2,36+2,32+2,32+2,32+2,36+2,35+2,31+2,31+2,31+2,35+2,44,50,39,42,40,51,34,32,32,52,61,60,52,21,71,64,42,40,48,34,33,22,44,47,50,46,20,25,27,14,6,14,8,9,€143K
18206,246269,G. Nugent,16,https://cdn.sofifa.org/players/4/19/246269.png,England,https://cdn.sofifa.org/flags/14.png,46,66,Tranmere Rovers,https://cdn.sofifa.org/teams/2/light/15048.png,€60K,€1K,1321,Right,1,3,2,Medium/ Medium,Lean,No,CM,33,"Oct 30, 2018",,2019,5'10,176lbs,43+2,43+2,43+2,45+2,44+2,44+2,44+2,45+2,45+2,45+2,45+2,46+2,45+2,45+2,45+2,46+2,46+2,46+2,46+2,46+2,46+2,46+2,47+2,47+2,47+2,46+2,41,34,46,48,30,43,40,34,44,51,57,55,55,51,63,43,62,47,60,32,56,42,34,49,33,43,40,43,50,10,15,9

moreless对文件进行动态加载并进行滚屏查看,在查看超大文件时又快又灵活,墙裂推荐。

快捷键:ctrl+F向后一屏,ctrl+B向前一屏,j/k前/后一行,g文本首航,G文本末行,/查找。

# 动态查看文本,显示行号与文本百分比
$ less -m -N data.csv1 ,ID,Name,Age,Photo,Nationality,Flag,Overall,Potential,Club,Club Logo,Value,Wage,Special,Preferred Foot,International Reputation,Weak Foot,Skill Moves,Work Rate,Body2 0,158023,L. Messi,31,https://cdn.sofifa.org/players/4/19/158023.png,Argentina,https://cdn.sofifa.org/flags/52.png,94,94,FC Barcelona,https://cdn.sofifa.org/teams/2/l3 1,20801,Cristiano Ronaldo,33,https://cdn.sofifa.org/players/4/19/20801.png,Portugal,https://cdn.sofifa.org/flags/38.png,94,94,Juventus,https://c
0%

操作文本

linux有文本处理三剑客,grep文本过滤小能手,sed增删查改小帮手,awk格式化处理王者。

  • grep 文本过滤小能手,配合正则表达式,来过滤出一些符合我们条件的行。
# 过滤带坤的行
➜  ~ cat data.csv | grep "坤"
蔡徐坤,21,篮球,校队球员
谢广坤,64,收货,象牙山纪律委员
杨坤,47,开演唱会,歌手
陈坤,43,寻宝,摸金校尉

  • sed增删查改小帮手,一行一行处理文本。
# 删除,sed 'm,nd' 删除m行到n行的内容
➜  ~ cat -n data.csv | sed '4,5d'1  姓名,年龄,爱好,职业2  蔡徐坤,21,篮球,校队球员3  谢广坤,64,收货,象牙山纪律委员# 增加,sed 'm,na' 在m到n行后增加内容
➜  ~ cat -n data.csv | sed '1d ,列名'1  姓名,年龄,爱好,职业,列名2  蔡徐坤,21,篮球,校队球员3  谢广坤,64,收货,象牙山纪律委员4  杨坤,47,开演唱会,歌手5  陈坤,43,寻宝,摸金校尉# 查改,sed 's/before/after/g' 将before替换为after
➜  ~ sed 's/坤/坤坤/g' data1.csv1  姓名,年龄,爱好,职业2  蔡徐坤坤,21,篮球,校队球员3  谢广坤坤,64,收货,象牙山纪律委员4  杨坤坤,47,开演唱会,歌手5  陈坤坤,43,寻宝,摸金校尉

  • awk格式化处理王者

awk [options] 'pattern{action}'

awk可以根据pattern对想要处理的行进行匹配,匹配之后再对其进行文本操作,适用以行为单位对文本进行格式化处理。

# -F设置,为分隔符, $n代表分隔后的第n个字段
# 每行以,号分隔为列,打印第一列和第三列
➜  ~ awk -F ',' '{print $1,$3}' data1.csv1  姓名 爱好2  蔡徐坤 篮球3  谢广坤 收货4  杨坤 开演唱会5  陈坤 寻宝# BEGIN和END用于标记位置
# 给文本加上标题,结尾加上时间
➜  ~ awk -F ',' 'BEGIN{print "t标题:人物信息"} {print $1,$3} END {print "ttt---2019年04月14日"}' data1.csv标题:人物信息1  姓名 爱好2  蔡徐坤 篮球3  谢广坤 收货4  杨坤 开演唱会5  陈坤 寻宝---2019年04月14日# 加入label为变量,if else用于条件判断
# 加入新列, 年龄大于40的标记为老戏骨,其余为小鲜肉
➜  ~ awk -F ',' '{if($2>40){label="老戏骨"}else{label="小鲜肉"};print $0,label}' data1.csv1  姓名,年龄,爱好,职业 老戏骨2  蔡徐坤,21,篮球,校队球员 小鲜肉3  谢广坤,64,收货,象牙山纪律委员 老戏骨4  杨坤,47,开演唱会,歌手 老戏骨

  • tr替换,例如替换逗号分隔符为制表符。

tr ',' 't' data.csv

  • cut指定字段范围显示,例如显示前3列文本。

cut -c-3 data.csv

CSV CSV CSV !!!

CSV是咱们数据民工每天面对的难题,如何应用命令行灵活处理CSV呢?

csvlook可用于查看csv文件并格式化,--max-rows设置行数,--max-columns设置列数 。

$ csvlook wine-red.csv --max-rows 5 --max-columns 5
| fixed acidity | volatile acidity | citric acid | residual sugar | chlorides | ... |
| ------------- | ---------------- | ----------- | -------------- | --------- | --- |
|           7.4 |             0.70 |        0.00 |            1.9 |     0.076 | ... |
|           7.8 |             0.88 |        0.00 |            2.6 |     0.098 | ... |
|           7.8 |             0.76 |        0.04 |            2.3 |     0.092 | ... |
|          11.2 |             0.28 |        0.56 |            1.9 |     0.075 | ... |
|           7.4 |             0.70 |        0.00 |            1.9 |     0.076 | ... |
|           ... |              ... |         ... |            ... |       ... | ... |

表格通常由表头与数据组成,横向分隔为列,纵向分隔为行。而与之对应的也有三大处理工具,body(Janssens2014a),header(Janssens2014c),andcols(Janssens2014b)。

# 显示列名
$ cat wine-red.csv | header
"fixed acidity";"volatile acidity";"citric acid";"residual sugar";"chlorides";"free sulfur dioxide";"total sulfur dioxide";"density";"pH";"sulphates";"alcohol";"quality"# 除了列名将所有小写字母替换为大写字母
< tips.csv body "tr '[a-z]' '[A-Z]'" | head -n 5 | csvlook
|  bill |  tip | sex    | smoker |        day | time   | size |
| ----- | ---- | ------ | ------ | ---------- | ------ | ---- |
| 16.99 | 1.01 | FEMALE |  False | 0001-01-07 | DINNER |    2 |
| 10.34 | 1.66 | MALE   |  False | 0001-01-07 | DINNER |    3 |
| 21.01 | 3.50 | MALE   |  False | 0001-01-07 | DINNER |    3 |
| 23.68 | 3.31 | MALE   |  False | 0001-01-07 | DINNER |    2 |

  • csvstat统计列最大,最小,均值,unique等统计值。
  1. --max (maximum)
  2. --min (minimum)
  3. --sum (sum)
  4. --mean (mean)
  5. --median (median)
  6. --stdev (standard deviation)
  7. --nulls (whether column contains nulls)
  8. --unique (unique values)
  9. --freq (frequent values)
  10. --len (max value length)
$ csvstat tips.csv1. "bill"Type of data:          NumberContains null values:  FalseUnique values:         229Smallest value:        3.07Largest value:         50.81Sum:                   4827.77Mean:                  19.785943Median:                17.795StDev:                 8.902412Most common values:    13.42 (3x)10.34 (2x)21.01 (2x)10.33 (2x)17.92 (2x)2. "tip"Type of data:          NumberContains null values:  FalseUnique values:         123Smallest value:        1Largest value:         10Sum:                   731.58Mean:                  2.998279Median:                2.9StDev:                 1.383638Most common values:    2 (33x)3 (23x)4 (12x)5 (10x)2.5 (10x).....Row count: 244

最后给大家替工一个docker image,免去安装各种依赖环境的繁琐。

$ docker pull datascienceworkshops/data-science-at-the-command-line
$ docker run --rm -it datascienceworkshops/data-science-at-the-command-line

相关资料

Data Science at the Command Line
Csvkit Document TutorialLinux三剑客之awk命令awk从入门到放弃
What is the difference between sed and awk?

作者才疏学浅,文章中可能出现纰漏,忘读者多多指正交流。

各位点一波赞吧~~

linux 获取命令行返回的数据_Linux | 活用CLI命令行进行数据处理与探索相关推荐

  1. linux日志切割命令,Linux 服务器log日志切割三种方法【附命令行】

    今天爱分享给大家带来Linux 服务器log日志切割方法[三种附命令行],希望能够帮助到大家. 业务服务器上产生了一个 10G 的log文件,然后很悲催的是什么样的文本编辑器都打不开,然后只能切分一下 ...

  2. linux下wps 点击无反应 无法打开 在命令行也打不开,最开始可以打开,关机重启之后不能够打开

    linux下wps 点击无反应 无法打开 在命令行也打不开,安装之后可以打开,关机重启之后打不开了 解决方案: 删除~/.config/Kingsoft文件 然后重启,一切正常 转载自https:// ...

  3. linux shell 宏定义_Linux系统和Shell命令行简介,走上数据分析之路

    122Linux系统和Shell命令行简介,走上数据分析之路 本节作者:刘永鑫 中国科学院遗传与发育生物学研究所 版本1.0.2,更新日期:2020年8月31日 本项目永久地址:https://git ...

  4. linux登录pg数据库命令,PostgreSQL数据库pg_dump命令行不输入密码的方法

    对于PostgreSQL数据库的备份按照官方手册的方法之一就是采用"SQL Dump"的方式(另一种方式是直接备份文件系统中的文件,可参考官方手册). 基本用法如下: pg_dum ...

  5. linux下怎么进入mysql界面_linux界面进入mysql命令

    linux下通过命令我们可以直接连接mysql进入mysql命令行模式.下面由学习啦小编为大家整理了linux下进入mysql命令的相关知识,希望对大家有所帮助! linux下进入mysql命令 连接 ...

  6. linux wpa_supplicant连接无线网络(转),如何使用wpa_supplicant从命令行配置Linux无线

    如何使用wpa_supplicant从命令行配置Linux无线 如何使用wpa_supplicant从命令行配置Linux无线 wpa_supplicant is used to connect wi ...

  7. redis 命令 数据清理_如何在命令行中清理数据

    redis 命令 数据清理 我是兼职数据审计师. 可以将我视为校对员,使用数据表而不是散文页面. 这些表是从关系数据库中导出的,通常大小适中:100,000至1,000,000条记录和50至200个字 ...

  8. Linux鼠标滚轮不是滑动页面而是翻历史命令行

    问题 问题如题,突然之间有台机器的Linux鼠标滚立案变得不是一般的滑动页面,而是翻历史命令行. 很不习惯. 解决办法 在命令行下,输入 vi 进入vim,之后输入:q! 退出,就完成来屏幕模式的交替 ...

  9. python获取键盘输入能不能不按回车键_Github获8300星!用Python开发的一个命令行的网易云音乐...

    最近在逛Github发现了一个非常有趣的库musicbox,是用纯Python打造的,收获了8300颗星.Python语言简单易学,好玩有趣,身边越来越多的小伙伴都开始学习Python.她的魅力非常大 ...

最新文章

  1. 《评人工智能如何走向新阶段》后记(再续5)
  2. SBB:土壤微生物群落的特征究竟由什么决定
  3. Qt界面UI之QML初见(学习笔记四)
  4. php服务器怎么保活,think-queue消息队列
  5. webmin mysql_MySQL+Webmin轻松创建数据库
  6. java 不安全操作_Java新手求助:怎么会出现使用了未经检查或不安全的操作。
  7. EP100的局部地址、逻辑地址和全局地址
  8. R语言:企业风险分析(2)【蒙特卡罗模拟,Monte-Carlo Simulation】
  9. 八大地图API开发平台大比拼
  10. Python爬虫: 单网页 所有静态网页 动态网页爬取
  11. 虚拟机VMware中Linux联网
  12. 用幂法和反幂法分别计算矩阵按模最大和按模最小的特征值及其特征向量
  13. java数据回填_快逸数据回填的实现方法
  14. 力扣刷题-python-动态规划-1 (动态规划、01背包问题、完全背包问题)
  15. 无线路由Buffalo G300N V2 CH小测
  16. railgun游戏服务端架构
  17. vs2017编译libxvidcore.lib
  18. HbuilderX 无法运行项目到真机调试。
  19. IT项目管理的“羊肉”与“狗头”
  20. 使用Wi-Fi实现ESP32与手机网络助手进行TCP数据收发

热门文章

  1. 构造函数失败_抛出异常
  2. jquery each函数 break和continue功能
  3. jquery中的ajax方法参数——$.ajax()方法详解
  4. SharePoint 2013 列表启用搜索
  5. [转] Silverlight Navigation(多页面切换、传值)
  6. 为什么中文分词比英文分词更难?有哪些常用算法?(附代码)
  7. python购物车结算不了_Python——购物车问题
  8. ddos攻击工具_linux下DDoS攻击模拟实战
  9. 知乎:fastjson这么快,为啥老外还是热衷 jackson?
  10. 原创 | 一文了解那些和Spring Bean有关的那些注解!