当前位置: 首页 > 设计资讯 > 设计教程 > 正文

命令行数据操作指南

2023-01-11 3523 0
20221229_114752_043

 Python和Javascript中不再有随机脚本来转换CSV或JSON数据。在本文中,Alvin Bryan向您展示了如何使用面粉厂主,一个小而强大的CLI工具,做你所有的数据处理。

请允许我在这篇文章的开头说,我不是一个终端人。我不使用Vim。我发现一项Linux指令,可做文件内的字符串查找,以及awk令人费解且违背直觉。我更喜欢在一个漂亮的用户界面中看到我的文件。尽管如此,我还是养成了伸手拿东西的习惯命令行界面(CLI)当我有小而专注的任务要完成时。为什么?我将在下面解释这一切。在本文中,您还将学习如何使用名为面粉厂主操作CSV、TSV和/或JSON文件中的数据。

为什么使用命令行?

我在这里展示的一切都可以用普通代码来完成。您可以加载文件,解析CSV数据,然后使用常规Javascript、Python或任何其他语言对其进行转换。但是,每当我需要转换数据时,我都会使用命令行界面(CLI ),这有几个原因:

  • 更容易阅读。
    对于我来说,用Javascript或Python编写脚本来处理日常数据会更快。但是,一个脚本可能会令人困惑。以我的经验来看,命令行操作最初很难编写,但以后更容易阅读。
  • 更容易复制。
    多亏了像家酿这样的软件包管理器,CLI的安装比以前容易多了。不需要弄清楚Node.js或Python的正确版本,包管理器会帮你搞定。
  • 年代久远。
    与现代编程语言相比,CLI很古老。它们的变化比语言和框架慢得多。

米勒是什么?

我喜欢Miller的主要原因是它是一个独立的工具。有许多很好的数据操作工具,但我发现的其他工具都是特定生态系统的一部分。用Python编写的工具需要知道如何使用点和虚拟环境;对于那些写在铁锈上的,它是货物,等等。

最重要的是,它很快。数据文件是流式的,而不是保存在内存中,这意味着您可以在不冻结计算机的情况下对大文件执行操作。

作为奖励,米勒被积极维护,约翰·克尔真正掌握公关和问题。作为一名开发人员,当我看到一个整洁的、维护良好的开源项目并有很好的文档时,我总是会有一种满足感。

装置

  • Linux:apt-get安装米勒或者公司自产自用。
  • macOS:brew安装米勒使用自制的。
  • 窗口:乔科安装米勒使用巧克力。

就这样,现在您应该有了最低贷款利率(minimum lending rate)终端中可用的命令。

奔跑mlr帮助主题看看是否有效。这将为您提供导航内置文档的说明。不过,你不应该需要它;这就是这篇教程的目的!

跳完更!下面继续看↓

怎么最低贷款利率(minimum lending rate)作品

米勒命令的工作方式如下:

MLR[输入输出文件格式][动词][文件]

例子:mlr - csv滤镜' $color!= "红色" example.csv

我们来解构一下:

  • - csv指定输入文件格式。这是一个CSV文件。
  • 过滤器是我们在文件上所做的,在文档中称为“动词”。在这种情况下,我们过滤掉没有字段的每一行颜色干劲十足地开始做;毅然开始“红色”。还有许多其他动词,如分类和切口我们稍后会探讨。
  • 示例. csv就是我们正在操作的文件。

运营概述

我们可以利用这些动词对数据运行特定的操作。我们可以做很多事情。我们来探索一下。

数据

我将使用以下数据集美国电视剧的IMDb收视率由《经济学人》创建。你可以下载这里或者在被卖方收回的汽车对于这篇文章。

注意:为了简洁起见,我将该文件从mlr - csv头。/IMDb _经济学家_电视_收视率. csv到电视_收视率. csv。

上面,我提到每个命令都包含一个特定的操作或动词。让我们学习第一个,叫做头。它的作用是向您显示文件的开头(“头”),而不是在控制台中打印整个文件。

您可以运行以下命令:

mlr - csv头。/tv_ratings.csv '

这是您将看到的输出:

titleId,seasonNumber,片名,日期,av_rating,share,genrestt2879552,1,11.22.63,2016-03-10,8.489,0.51,《剧情,推理,科幻》tt3148266,1,12猴子,2015-02-27,8.3407,0.46,《冒险,剧情,推理》tt3148266,2,12猴子

这有点难读,所以让我们通过添加- opprint。

mlr - csv - opprint head。/电视_收视率. csv

结果输出如下:

titleId seasonNumber标题日期av_rating分享genrestt 2879552 1 11 . 22 . 63 2016-03-10 8.489 0.51剧情、推理、科幻3148266 1 12猴子2015-02-27 8.3407 0.46冒险、剧情、Mysterytt3148266 2 12猴子2016-05-30 8.8196 0.25冒险、冒险

好多了,不是吗?

注意:而不是打字- csv - opprint每次,我们都可以使用- c2p选项,这是一种快捷方式。

链接

这就是乐趣的开始。与其运行多个命令,我们可以通过使用然后关键词。

移除列

你可以看到有一个titleId不是很有用的专栏。让我们使用切口动词。

mlr - c2p cut -x -f titleId然后head。/电视_收视率. csv

它为您提供了以下输出:

季节编号标题日期av_rating分享体裁1 11.22.63 2016-03-10 8.489 0.51剧情、推理、科幻1 12猴子2015-02-27 8.3407 0.46冒险、剧情、推理2 12猴子2016-05-30 8.8196 0.25冒险、剧情、推理3 12猴子2017-05-19 9 9.0369 0.11
有趣的事实

我就是这样第一次了解米勒的!我在玩CSV数据集它有一个无用的列,我查找“如何从CSV命令行删除列”我发现了米勒,喜欢上了它,然后给《粉碎》杂志投了一篇文章。现在我们在这里!

过滤器

这是我之前第一次展示的动词。我们可以删除所有不匹配特定表达式的行,让我们只用几个字符就可以清理数据。

如果我们只想要数据集中每个系列的第一季的评级,您可以这样做:

mlr - c2p过滤器' $seasonNumber == 1 '然后头。/电视_收视率. csv

整理

我们可以根据特定的列对数据进行排序,就像在Excel或macOS Numbers这样的UI中一样。以下是根据评分最高的系列对数据进行排序的方式:

mlr - c2p sort -nr av_rating然后head。/电视_收视率. csv

结果输出如下:

标题Id季节编号标题日期av_rating份额genrestt父母身份1990-11-13 9.6824 1.68喜剧,戏剧0106028 6凶杀:街头生活1997-12-05 9.6 0.13犯罪,戏剧,Mysterytt0108968 5被天使触摸1998-11-15 9.6 0.08戏剧,家庭,幻想1994-02-23 9.4349 2.6戏剧、家庭、幻想0944947 4权力的游戏2014-05-09 9.4282 11.07动作、冒险、戏剧0976014 4希腊2011-03-07 9.4 0.01喜剧、戏剧0090466 4洛杉矶法1990-04-05 9.4 0.1戏剧

我们可以看到这一点亲子关系,从1990年开始,在IMDb上有最高的评级——谁知道呢!

拯救我们的运营

默认情况下,Miller只将您处理过的数据打印到控制台。如果我们想把它保存到另一个CSV文件中,我们可以使用%3E接线员。

如果我们想将排序后的数据保存到一个新的CSV文件中,该命令应该是这样的:

mlr - csv排序-nr av_rating。/tv_ratings.csv %3E已排序. csv

将CSV转换为JSON

大多数情况下,您不会在应用程序中直接使用CSV数据。你把它转换成一种更容易阅读或者不需要额外依赖的格式,比如JSON。

米勒给了你- c2j选项将您的数据从CSV转换为JSON。下面是如何对我们的排序数据执行此操作:

mlr - c2j排序-nr av_rating。/tv_ratings.csv %3E sorted.json
 

案例研究:2016年里约奥运会奖牌数最多的前5名运动员

让我们将上面学到的一切应用到现实世界的用例中。假设你有一个参加2016年里约奥运会的每个运动员的详细数据集,你想知道奖牌数最多的5个人是谁。

首先,以CSV格式下载运动员数据,然后将其保存在名为运动员. csv。

让我们打开以下文件:

mlr - c2p头。/运动员. csv

产生的输出将如下所示:

身份证姓名国籍性别出生日期身高体重体育金银铜信息736041664 A耶稣加西亚ESP男1969-10-17 1.72 64田径0 0 0 -532037425 A林新科女1986-09-23 1.68 56击剑0 0 0 -435962603亚伦·布朗能男1992-05-27 1.98 79田径00 1-5210415 铁人三项0 0 -266237702亚伦·拉塞尔美国男1993-06-04 2.05 98排球0 1 -382571888艾伦·扬格澳大利亚男1991-09-25 1.93 100游泳0 0 -87689776阿乌里·洛雷纳·博克萨ESP女1988-12-14 1.80 62田径0 0 -

可选:清理文件

CSV文件有一些我们不需要的字段。让我们通过移除信息,身份证明(identification),重量,以及出生日期列。

mlr - csv -I cut -x -f id,信息,体重,出生日期运动员. csv

现在我们可以转移到我们最初的问题:我们想找到谁赢得了最多的奖牌。我们有多少每块奖牌(铜牌、银牌和金牌)运动员获胜,但不是每位运动员的奖牌总数。

让我们计算一个新值,叫做奖章相当于这个总数(青铜、白银和黄金相加)。

mlr - c2p把“$奖牌= $铜牌+$银牌+$金牌”放在头上。/运动员. csv

它为您提供了以下输出:

姓名国籍性别身高运动项目金牌银牌铜牌lsA Jesus Garcia ESP男1.72田径0 0 0 0A林新科女1.68击剑0 0 0布朗坎男1.98田径0 0 1 1阿伦库克MDA男1.83跆拳道0 0 0 0阿伦盖特NZL男1.81自行车0 0 0阿伦罗伊尔澳大利亚男1.80铁人三项0 0 0 0阿伦拉塞尔美国男2.05排球0 1 1 1 1阿伦年轻澳大利亚男1.93游泳0 0 0Aauri Lorena Bokesa ESP女1.80田径0 0 0Ababel Yeshaneh ETH女1.65田径0 0 0 0

通过添加一个分类。

mlr - c2p放“$奖牌= $铜牌+$银牌+$金牌”然后排序-nr奖牌\然后标题。/运动员. csv

相应地,结果输出如下:

姓名国籍性别身高运动项目金牌银牌铜牌迈克尔菲尔普斯美国男1.94花样游泳5 1 0 6凯蒂莱德基美国女1.83花样游泳4 1 0 5西蒙娜比尔斯美国女1.45体操4 0 1 5艾玛麦克肯澳大利亚女1.80花样游泳1 2 1 4卡廷卡霍斯祖亨女1.75花样游泳3 1 0 4玛德琳迪拉多美国女1.76花样游泳2 1 1 4内森阿德里安美国男1.99花样游泳2 0 2 4佩内利奥克西克坎女

通过添加以下内容限制到前5名-n 5敬你的头操作。

mlr - c2p放“$奖牌= $铜牌+$银牌+$金牌”,然后排序-第n块奖牌,然后是第n块。/运动员. csv

您将得到以下文件:

姓名国籍性别身高运动项目金牌银牌铜牌迈克尔菲尔普斯美国男1.94花样游泳5 1 0 6凯蒂莱德基美国女1.83花样游泳4 1 0 5西蒙娜比尔斯美国女1.45体操4 0 1 5艾玛麦肯澳大利亚女1.80花样游泳1 2 1 4卡廷卡霍斯祖洪女1.75花样游泳3 1 0 4

最后一步,让我们用- c2j选项。

这是我们最后的命令:

mlr - c2j填“$奖牌= $铜牌+$银牌+$金牌”,然后排序-第n块奖牌,然后是第n块。/运动员. csv %3E top5.json

通过一条命令,我们已经计算了新数据,对结果进行了排序、截断,并将其转换为JSON。

[ {“姓名”:“迈克尔·菲尔普斯”,“国籍”:“美国”,“性别”:“男性”,“身高”:1.94,“体重”:90,“运动”:“游泳”,“金牌”:5,“银牌”:1,“铜牌”:0,“奖牌”:6 } //其他条目为简洁起见省略。]

奖金:如果您想显示前5名女性,您可以添加一个过滤器。

mlr - c2p放入“$奖牌= $铜牌+$银牌+$金牌”,然后排序-nr奖牌,然后过滤“$性别== "女性”,然后head -n 5。/运动员. csv

您最终将得到以下输出:

姓名国籍性别身高运动项目金牌银牌铜牌凯蒂莱德基美国女1.83花样游泳4 1 0 5西蒙妮比尔斯美国女1.45体操4 0 1 5艾玛麦肯澳大利亚女1.80花样游泳1 2 1 4卡廷卡霍斯祖洪女1.75花样游泳3 1 0 4马德琳迪拉多美国女1.76花样游泳2 1 1 4
 
 

0
评论区(0)
正在加载评论...