linux 命令行工具_用于Linux中数据分析的10个命令行工具

linux 命令行工具

因此,您已经获得了一些要分析的数据。 您从哪里开始?

许多习惯于在图形环境中工作的人可能会默认使用电子表格工具,但还有另一种方法可能会证明是更快,更高效,而又付出了更多努力。 而且,您无需成为统计建模语言或大数据工具集的专家即可利用这些工具。

您无需离开终端就可以学到很多有关数据集的知识。

我说的是Linux命令行。 只需使用一些可能已经在计算机上安装的工具,就可以在不离开终端的情况下了解很多有关数据集的信息。 长期使用Linux的用户当然会大笑,他们多年来一直在使用许多此类工具来解析日志并了解配置工具。 但是对于Linux新手来说,您已经掌握了完整的数据分析工具包的发现可能会令人感到意外。

这些工具中的大多数也不严格限于Linux。 大多数人可以回想起Unix的时代,而其他类似Unix的操作系统的用户可能已经安装或可以轻松安装它们。 其中许多是GNU Coreutils软件包的一部分,而有些则是单独维护的,并且有些工作,您甚至可以在Windows上使用它们。

因此,让我们尝试许多简单的开源工具中的一些进行数据分析,看看它们如何工作! 如果您想遵循这些示例,请继续从GitHub下载此示例数据文件 ,该文件是CSV(逗号分隔值)列表,我们已在一月份发布到Opensource.com。


首尾

首先,让我们开始获取文件的句柄。 里面是什么? 它的格式是什么样的? 您可以使用cat命令在终端中显示文件,但是如果您要处理的文件超过几十行,那么这对我们没有多大帮助。

输入 。 两者都是实用程序,用于显示文件顶部或底部的指定行数。 如果您不指定要查看的行数,则会得到10。让我们在文件中尝试一下。



   
   
$ tail -n 3 jan2017articles.csv
02 Jan 2017,Article,Scott Nesbitt,3 tips for effectively using wikis for documentation,1,/article/17/1/tips-using-wiki-documentation,"Documentation, Wiki",710
02 Jan 2017,Article,Jen Wike Huger,The Opensource.com preview for January,0,/article/17/1/editorial-preview-january,,358
02 Jan 2017,Poll,Jason Baker,What is your open source New Year's resolution?,1,/poll/17/1/what-your-open-source-new-years-resolution,,186

查看最后三行,我可以立即选择日期,作者姓名,标题和其他一些信息。 但是我不知道每一栏是什么。 让我们看一下文件的顶部,看看它是否具有标题以解释每一列的含义:



   
   
$ head -n 1 jan2017articles.csv
Post date,Content type,Author,Title,Comment count,Path,Tags,Word count

好吧,现在一切都说得通了。 看起来我们已经有了一篇文章列表,其中包含其发布日期,每篇文章的内容类型,作者,标题,评论数,相对URL,每篇文章具有的标签以及字数。

厕所

很好,但是这个文件有多大? 我们是在谈论要分析的数十篇文章,还是数百甚至数千篇? wc命令可以提供帮助。 wc可以表示“字数统计”,它可以计算文件中字节,字符,单词或行的数量。 在我们的情况下,我们想知道行数。



   
   
$ wc -l jan2017articles.csv
93 jan2017articles.csv

而且,那里。 该文件中的93行; 由于我们知道第一行包含标题,因此我们可以推测这是92条文章的列表。

grep

好的,现在让我们自问:在这92篇文章中,有多少篇涉及安全主题? 出于我们的目的,假设我们对在条目中任何地方(无论是标题,标签列表还是其他地方)提到安全性的文章感兴趣。 grep工具可以帮助我们。 使用grep ,您可以在文件或其他输入中搜索特定字符模式。 grep是一个功能强大的工具,这得益于您可以构建正则表达式来匹配非常精确的模式。 但是现在,让我们仅搜索一个简单的字符串。



   
   
$ grep -i "security" jan2017articles.csv
30 Jan 2017,Article,Tiberius Hefflin,4 ways to improve your security online right now,3,/article/17/1/4-ways-improve-your-online-security,Security and encryption,1242
28 Jan 2017,Article,Subhashish Panigrahi,How communities in India support privacy and software freedom,0,/article/17/1/how-communities-india-support-privacy-software-freedom,Security and encryption,453
27 Jan 2017,Article,Alan Smithee,Data Privacy Day 2017: Solutions for everyday privacy,5,/article/17/1/every-day-privacy,"Big data, Security and encryption",1424
04 Jan 2017,Article,Daniel J Walsh,50 ways to avoid getting hacked in 2017,14,/article/17/1/yearbook-50-ways-avoid-getting-hacked,"Yearbook, 2016 Open Source Yearbook, Security and encryption, Containers, Docker, Linux",2143

我们使用的格式为grep ,其后是-i标志(告诉grep不区分大小写),然后是我们要搜索的模式,然后是我们要搜索的文件。 看来我们上个月有四篇有关安全性的文章。 但是,让我们想象一下,我们得到的清单比我们可以轻松计算的清单长得多。 使用pipe ,我们可以将grep与上面刚刚学习的wc命令结合使用,以获取提及安全性的总行数。



   
   
$ grep -i "security" jan2017articles.csv | wc -l
4

在这种情况下, wc将我们的grep命令的输出用作其输入,而不必担心首先将其保存在任何地方。 这就是为什么管道输入和输出(特别是与少量Shell脚本结合使用)使终端成为数据分析功能强大的工具的原因。

tr

CSV文件对于许多分析方案而言都是非常有用的格式,但是如果您需要将文件转换为其他格式以在其他应用程序中使用,该怎么办? 也许您需要使用制表符分隔符而不是逗号,或者可能想将它们更改为某些HTML,以便可以使用表中的数据输出。 tr命令可以通过将一种字符转换为另一种字符来帮助您。 与其他示例一样,您也可以将输入和输出通过管道传递给此命令。

让我们尝试另一个多部分的示例,通过仅使用1月20日发布的文章来创建TSV(制表符分隔值)文件。


$ grep "20 Jan 2017" jan2017articles.csv | tr ',' '\t' > jan20only.tsv 

这里发生了什么? 首先,我们使用grep搜索相关日期。 我们将此输出通过管道传递到tr命令,该命令用于用制表符(用'\ t'表示)替换逗号。 但是去哪儿了? 好吧, >字符会将输出重定向到我们的新文件,而不是屏幕。 所有这些工作都按一个命令序列进行。 然后,我们可以验证jan20only.tsv文件是否包含我们期望的数据。



   
   
$ cat jan20only.tsv
20 Jan 2017     Article Kushal Das      5 ways to expand your project's contributor base        2       /article/17/1/expand-project-contributor-base    Getting started 690
20 Jan 2017     Article D Ruth Bavousett        How to write web apps in R with Shiny   2       /article/17/1/writing-new-web-apps-shiny Web development 218
20 Jan 2017     Article Jason Baker     "Top 5: Shell scripting  the Cinnamon Linux desktop environment  and more"       0       /article/17/1/top-5-january-20  Top 5   214
20 Jan 2017     Article Tracy Miranda   How is your community promoting diversity?      1       /article/17/1/take-action-diversity-tech Diversity and inclusion 1007

分类

如果我们想了解有关特定列的更多详细信息怎么办? 我们的新文章列表中哪篇文章最长? 让我们以最后一个例子为基础。 现在,我们有了从1月20日开始的文章列表,我们可以使用sort命令按字数统计列进行排序。 当然,严格来讲,我们在这里不需要中间文件。 我们本来可以通过管道传递最后一条命令的输出。 但是有时候,将长步分成较小的步骤比创建巨大的命令链更容易。



   
   
$ sort -nr -t$'\t' -k8 jan20only.tsv | head -n 1
20 Jan 2017     Article Tracy Miranda   How is your community promoting diversity?      1       /article/17/1/take-action-diversity-tech Diversity and inclusion 1007

这是另一个很长的例子,所以让我们分解一下正在发生的事情。 首先,我们使用sort命令对单词数进行排序。 -nr选项告诉sort执行数字排序,并以相反的顺序(最大到最小)返回结果。 下一个-t $'\ t'告诉排序符是制表符('\ t')。 (您可以在此处阅读为什么需要美元符号;简而言之,是要告诉外壳程序这是一个字符串,需要进行处理才能将\ n转换为实际的制表符)。 该命令的-k8部分告诉sort使用第八列,在我们的示例中为第八列。

最后,将整个输出通过管道传递到指令的开头,以仅显示第一行,这就是我们的结果,即该文件中具有最高字数的文章。

sed

您可能要选择文件的特定行。 sed是流编辑器的缩写,是执行此操作的一种方法。 如果您想合并所有都带有标题的多个文件怎么办? 您只希望在整个文件中显示一组标题,因此您将需要一种方法来删除其他内容。 或者,如果您只想抓取特定范围的线怎么办? sed是您的工具。 这也是进行批量查找和替换文件的好方法。

让我们从文章列表中创建一个没有标题的新文件,该文件适合与其他文件结合使用(例如,如果我每个月都有一个不同的文件,并且希望将它们放在一起)。


$ sed '1 d' jan2017articles.csv > jan17no_headers.csv 

'1 d'选项告诉sed删除第一行。 sed的功能远不止于此,我建议您进一步阅读其替代功率

如果我不想删除行,而是想删除列怎么办? 如果我只想挑选一栏怎么办? 让我们为上面构建的示例创建一个新的作者列表。


$ cut -d',' -f3 jan17no_headers.csv > authors.txt 

在这个简单的示例中,我们用-d'告诉cut ,这是一个逗号分隔的文件,我们需要第三列( -f3 ),并将输出发送到名为authors.txt的新文件中。

优衣库

最后一个示例为我们提供了作者列表,但是,列表中有多少位独特的作者? 每个作者写了几篇文章? 输入uniq 。 使用uniq ,您可以轻松找出。 让我们对文件进行排序,查找唯一性,然后输出一个文件,该文件包含每个作者撰写的文章数。


sort authors.txt | uniq -c > authors-sorted.txt 

浏览文件,我们现在可以看到每个作者有多少篇文章。 让我们看一下最后三行,以确保它起作用。



   
   
$ tail -n3 authors-sorted.txt
      1 Tracy Miranda
      1 Veer Muchandi
      3 VM (Vicky) Brasseur

awk

让我们看看今天的命令行数据分析工具带中的另一种工具awkawk是我将很少给予赞扬的那些工具中的另一个。 它确实是一个值得独自探索的强大力量。 它是另一个很好的替换工具,但还有更多。 让我们回到我们之前在1月20日的文章中制作的TSV文件,并使用该文件创建一个仅列出那些文章作者以及每个作者所写单词数量的新列表。



   
   
$ awk -F "\t" '{print $3 "  " $NF}' jan20only.tsv
Kushal Das  690
D Ruth Bavousett  218
Jason Baker  214
Tracy Miranda  1007

这里发生了什么? 我们传递给awk-F“ \ t”只是告诉我们我们正在使用制表符分隔的数据。 在括号内,我们实际上是在告诉awk执行少量代码。 我们告诉它在第三列打印$ 3 ,然后在最后一列打印$ NF (“字段数”),并在它们之间放置两个空格以使其更清晰。


所以呢? 我们不能在电子表格中或者在某些情况下仅通过查看文件来更快地完成所有这些工作吗? 我们当然可以! 现在停下来,想象一下,我们正在处理93,000甚至更大的文件,而不是93行文件。 您的电子表格实用程序可以加载它而不会崩溃或显着降低速度吗? 或想象一下,过去一个月中,每个月都有一个不同的文件,而不是一个文件包含一个月的文章。 突然之间,电子表格并不是处理数据的最佳选择,但是您还没有进入需要真正的大数据工具来处理数据集的领域。

您可以选择将文件加载到数据库工具中并在那里使用数据。 但这是正确的选择吗? 这可能是矫kill过正。 如果您只是检查数据以了解其中包含的内容怎么办? 使用这些简单的工具和少量脚本可以遍历目录,您可以轻松处理大量数据。 定期处理数据的专业人员和业余爱好者都应该花一些时间来学习这些以及其他命令行数据分析工具。

本介绍仅涉及每种工具的表面。 它们远比这些简单示例所能提供的功能强大得多,这就是为什么编写了大量有关大多数书籍的原因。 我希望您能花些时间阅读手册页,在搜索引擎中做一些工作,或者拿起一本书来学习更多有关唾手可得的有趣工具集。

翻译自: https://opensource.com/article/17/2/command-line-tools-data-analysis-linux

linux 命令行工具

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值