运维系列(16)-- 数据科学家必备12个基本命令行工具

> wget

wget是一个文件检索工具,用于从远程位置下载文件,其下载远程文件的基本用法如下:
wget:
https://en.wikipedia.org/wiki/wget

$ wget http://aima.cs.berkeley.edu/data/iris.csv
--2018-04-18 13:52:38--  http://aima.cs.berkeley.edu/data/iris.csv
Resolving aima.cs.berkeley.edu (aima.cs.berkeley.edu)... 128.32.189.73
Connecting to aima.cs.berkeley.edu (aima.cs.berkeley.edu)|128.32.189.73|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 3716 (3.6K) [text/plain]
Saving to: ‘iris.csv’
iris.csv

> cat

cat是将文件内容标准输出的工具,此名称来自连接(concatenate)这个词。它可以用于实现一些较复杂的文件处理,包括将文件合并在一起(也就是真正的文件连接)、将文件追加到另一个文件中、以及给文件行编号等功能。
cat:
https://en.wikipedia.org/wiki/Cat_(Unix)

$ cat iris.csv
5.1,3.5,1.4,0.2,setosa
4.9,3.0,1.4,0.2,setosa
4.7,3.2,1.3,0.2,setosa
4.6,3.1,1.5,0.2,setosa
5.0,3.6,1.4,0.2,setosa
5.4,3.9,1.7,0.4,setosa
4.6,3.4,1.4,0.3,setosa
5.0,3.4,1.5,0.2,setosa
4.4,2.9,1.4,0.2,setosa
4.9,3.1,1.5,0.1,setosa
5.4,3.7,1.5,0.2,setosa
...

> wc

wc命令用于生成字数统计、行计数、字节计数以及与文本文件相关的内容。在没有设置其他选项的情况下,wc的默认输出是一行,由左到右依次是行数、字数统计(注意:每一行上没有空格中断的单个字符串被算作一个单词)、字符计数和文件名。
wc:
https://en.wikipedia.org/wiki/Wc_(Unix)

 $ wc iris.csv
 150  150 3800 iris.csv

head命令是标准地输出文件的前n行(默认为10行),显示行数可以用-n项设置,如下。
Head:
https://en.wikipedia.org/wiki/Head_(Unix)

~$  head -n 6 iris.csv
5.1,3.5,1.4,0.2,setosa
4.9,3.0,1.4,0.2,setosa
4.7,3.2,1.3,0.2,setosa
4.6,3.1,1.5,0.2,setosa
5.0,3.6,1.4,0.2,setosa
5.4,3.9,1.7,0.4,setosa

> tail

接下来猜猜看tail是用来实现什么功能的?
tail:
https://en.wikipedia.org/wiki/Tail_(Unix)

~$ tail -n 5 iris.csv
6.7,3,5.2,2.3,virginica
6.3,2.5,5,1.9,virginica
6.5,3,5.2,2,virginica
6.2,3.4,5.4,2.3,virginica
5.9,3,5.1,1.8,virginica

> find

find是用于搜索特定文件的文件系统工具。以下命令就是在树结构中搜索特殊文件的例子,即从当前目录(“.”)开始,搜索以“iris”开头,并以任意字符结尾,类型为普通文件类型(“-type f”)的文件:
find:
https://en.wikipedia.org/wiki/Find_(Unix)

~$ find . -name 'iris*' -type f
./iris.csv
./notebooks/kmeans-sharding-init/sharding/tests/results/iris_time_results.csv
./notebooks/ml-workflows-python-scratch/iris_raw.csv
./notebooks/ml-workflows-python-scratch/iris_clean.csv
...

> cut

cut命令用于文本分割,虽然cut用于分割文本可以在各种标准下进行,但是它对于CSV文件中列数据的提取尤其有用。以下命令即为输出使用逗号分隔符(”-d ‘,’”)的iris.csv文件的第五列(“- f 5”):
cut:
https://en.wikipedia.org/wiki/Cut_(Unix)

~$ cut -d ',' -f 5 iris.csv
species
setosa
setosa
setosa
...

>uniq

uniq是通过将文本中的重复行进行去重,从而将文本输出标准化的工具。就其本身而言,这似乎并没多大用处,但是当其用于构建pipelines时(将一个命令的输出连接到另一个命令的输入等等)将变得非常有用。
uniq:
https://en.wikipedia.org/wiki/Uniq
以下命令结果是iris数据集的第五列中包含的不同类别及其计数:

~$ tail -n 150 iris.csv | cut -d "," -f 5 | uniq -c
50 setosa
50 versicolor
50 virginica

> awk

awk实际上不是一个”命令”,而是一套完整的编程语言。它用于处理和提取文本, 且可以从命令行中以单行命令的形式调用。
awk:
https://en.wikipedia.org/wiki/AWK
完全掌握awk是需要一些时间的,但在此之前,这里有一个可以练习的例子。考虑到样本文件iris.csv相当有限的文本多样性,以下这行命令就可以调用awk,在给定的文件(“iris.csv”)中搜索字符串“setosa”,并将所有项(在$0变量中保存的)一个一个地标准输出如下:

~$ awk '/setosa/ { print $0 }' iris.csv
5.1,3.5,1.4,0.2,setosa
4.9,3,1.4,0.2,setosa
4.7,3.2,1.3,0.2,setosa
4.6,3.1,1.5,0.2,setosa
5,3.6,1.4,0.2,setosa

> grep

grep是另一种文本处理工具,用来查找匹配字符串和正则表达式。
grep:
https://en.wikipedia.org/wiki/Grep
当你需要花大量的时间进行文本处理时,grep无疑是你需要掌握的一个好工具,更多有用的信息请参考网站:
https://www.thegeekstuff.com/2009/03/15-practical-unix-grep-command-examples

~$ grep -i "vir" iris.csv
6.3,3.3,6,2.5,virginica
5.8,2.7,5.1,1.9,virginica
7.1,3,5.9,2.1,virginica
...

> sed

sed是一个流编辑器,也是一个文本处理和转换工具,类似于awk。下面我们将用此命令把iris.csv文件中的“setosa”改为“irissetosa”:
sed:
https://en.wikipedia.org/wiki/Sed

~$ sed 's/setosa/iris-setosa/g' iris.csv > output.csv
~$ head output.csv
sepal_length,sepal_width,petal_length,petal_width,species
5.1,3.5,1.4,0.2,iris-setosa
4.9,3,1.4,0.2,iris-setosa
4.7,3.2,1.3,0.2,iris-setosa
...

history

history非常简单,但也非常有用,特别是当你需要用命令语句来完成一些重复性的数据准备工作时。
History:
https://en.wikipedia.org/wiki/History_(Unix)

~$ history
547  tail iris.csv
548  tail -n 150 iris.csv
549  tail -n 150 iris.csv | cut -d "," -f 5 | uniq -c
550  clear
551  history

至此,这篇文章已经对这12个方便的命令行工具都进行了简单的介绍,这只是对数据科学(或其他任何目标)可能用到的命令行工具的一种粗浅的体验。现在,是时候让它们把你的生产力从鼠标中解放出来了。

猜你喜欢

转载自blog.csdn.net/dooonald/article/details/79989912