技术开发 频道

还用Excel?这10个命令行工具完爆Excel

  【IT168 评论】过去很多人在图形环境中工作通常都会选择电子表格工具,但是还有另外一种方法更快更有效,而且这些工具的使用并不是精通统计建模语言或者大数据工具集专家的专利,我们普通人只要稍微付出努力学习一下也可以做到。

  说到Linux命令行,可能很多Linux的资深用户觉得这很可笑,因为他们多年来一直都在使用这些工具解析日志、理解配置工具。但是对于Linux菜鸟来说,Linux命令行是很棒的工具,只要在计算机上安装一些工具,就可以在不了解终端的情况下了解数据集。

  很多命令行工具也不是严格限制于Linux,其它类似于Unix操作系统的用户也可以加安装,其中还有很多是包含在GNU Coreutils软件包中,有些需要单独维护,而有些可以直接在Windows上使用。下面我们就来简单尝试使用一些开源工具进行数据分析(下文中我们采用的例子来自于1月发布在Opensource.com的CSV文件)。

  head和tail

  首先,我们从文件上获取一个句柄,如果你想要知道这里面是什么?格式是什么样子的?你就应该使用Linux Cat命令,但是该命令适合显示内容比较少的内容。

  head和tail命令是一组相对应的命令,它们可以从文件的顶部或底部显示指定行数的内容,如果没有指定的话,它默认显示开头和结尾10行记录。

还用Excel?这10个命令行工具完爆Excel

  上图是文件最后三行的内容,我们可以看到其中包含有日期、作者、标题,但是其他一些信息我们无法判断它们所包含的含义。所以我们需要返回到顶部去查看是否有信息解释每一列的含义:

还用Excel?这10个命令行工具完爆Excel

  现在我们就可以看到每一列的含义了,这似乎是个文章列表,其中包含发布日期、文章的内容类型,作者,标题,评论数,相对URL,标签和字数。

  wc

  接下来,我们可能想要了解这个文件有多大?Linux wc命令用于计算字数,利用它我们可以计算文件的Byte数、字数、或是列数,若不指定文件名称、或是所给予的文件名为"-",则wc指令会从标准输入设备读取数据。下图是我们计算行数的例子。

还用Excel?这10个命令行工具完爆Excel

  通过运行wc命令,我们看到这个文件中一共有93行,根据平时的习惯,第一行通常是标题行,所以我们可以推测它是一个包含有92篇文章的列表。

  grep

  接下来,我们继续分析这些文章中有多少是关于安全主题的?这其中无论文件中是哪个地方提到了安全,如标题、标签,我们都会算作和安全有关的文章。Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。这里我们使用-i参数来查询。

还用Excel?这10个命令行工具完爆Excel

  从上图中我们可以看到上个月总共有四篇和安全相关的文章,但是我们也可以看到这样的列表非常长,不易于我们统计个数。这时,我们使用管道,并将grep和wc命令结合起来就可以的与安全相关文章的总行数。

还用Excel?这10个命令行工具完爆Excel

  上图中wc命令接受了grep命令的输出,并将其作为输入。这也是为什么管道的输入输出,特别是在结合一个小的shell脚本,会使得终端设备成为一个强大的数据分析工具。

  tr

  在分析场景中CSV是比较常见的格式,但是如果你需要将文件转换为不同格式以适应不同的应用程序该怎么办?如你想要将文件改为HTML格式,以便在表中使用数据输出,这时你就可以使用tr命令,它可以对来自标准输入的字符进行替换、压缩和删除,将一组字符变成另一组字符,经常被用来编写优美的单行命令,作用很强大。

  接下来,我们把1月20日发表的文章创建成一个TSV文件:

还用Excel?这10个命令行工具完爆Excel

  然后,我们去验证jan20only.tsv文件中是否包含有我们预期的数据。

还用Excel?这10个命令行工具完爆Excel

  sort

  如果我们想要进一步了解特定列的详细信息应该怎么办呢?如我们新的文章列表中哪篇文章是最长的?这时,我们就可以在1月20日的文章列表中使用sort命令按字数进行排序。

还用Excel?这10个命令行工具完爆Excel

  这是一条比较长的命令,我们来一步步分解一下。首先,我们使用sort命令按照字数排序,-nr表示按照从大到小的顺序返回结果。-t $'\ t'指的是分隔符是'\ t',-k8指的是显示结果的时候只显示前八列。最后,在整个输出管道中显示添加了head。

  sed

  如果你想要选择文件的特定行,你可以选择sed,它是一个很好的文件处理工具,主要是以行为单位进行处理,可以将数据行进行替换、删除、新增、选取等特定工作。如果你想要合并几个文件,但是它们都有头文件;如果你想要合并两个文件,但是只需要一行标题行;如果你只是想要特定范围内的数据......等等诸如此类的需求都可以使用sed命令。

  首先,我们创建创建一个没有头文件的新文件,以便于与其他文件合并。

还用Excel?这10个命令行工具完爆Excel

  上图中'1 d'的含义是删除第一行。

  cut

  如果我们想要删除一列应该怎么办呢?首先我们要先新建一个作者列表。

还用Excel?这10个命令行工具完爆Excel

  上图中的命令,-d表示删除,‘,’是分隔符,-f 3表示第三列,然后将结果输出发送到authors.txt的新文件中。

  uniq

  在authors.txt的文件中我们获得了一个作者列表,那么这个列表中不重复的有多少作者,每个作者写了多少篇文章?这时我们就需要用到uniq命令。首先,我们对文件进行排序,并用新版本替代旧版本,新版本中包含有每个作者的文章数量。

还用Excel?这10个命令行工具完爆Excel

  然后,我们查看一下它的最后三行,确保它是正确的。

还用Excel?这10个命令行工具完爆Excel

  awk

  awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。下面我们使用上文中包含1月20日文章的TSV文件,创建作者和字数的新列表。

还用Excel?这10个命令行工具完爆Excel

  上图中-F“/t”表示指定域分隔符为/t,{}中是awk需要执行的代码,print $3表示打印第三列,$NF表示当前行的总字段数。

  上文中我们只是简单介绍了一点这些命令的功能,我们可以到使用命令能够准确快速的处理文件。当然,你可能认为这些功能我们在电子表格中也可以快速完成,你要知道这只是因为我们只举了一个93行的例子,如果这是一个93000行的文件,甚至是更大的一个文件,你的电子表格就算不会加载崩溃,速度也会显著减慢。所以,掌握这些命令行数据分析工具对我们来说,无疑是一个很好的选择。

0
相关文章