关于 Miller
Miller(mlr)是一个命令行工具,用于转换和分析 CSV、TSV、JSON 等结构化记录格式。它支持灵活的数据格式转换、聚合统计和数据过滤,可以轻松集成到 Unix 管道中进行可重复的数据处理。
主要功能
- 01在多种格式间转换数据(CSV、JSON、TSV 等)
- 02计算统计摘要和数据聚合
- 03通过过滤和字段选择处理数据
适用场景
- 01在数据分析工作流中快速转换和清理结构化数据
- 02构建可复用的数据处理管道
- 03从命令行探索和汇总日志或数据文件
安装
选择你的系统或包管理器,复制命令到终端运行。
安装完成后运行mlr --version确认安装成功。
命令示例
常用命令按使用顺序排列。
详细介绍
什么是 Miller?
Miller 就像针对 CSV、TSV、JSON、JSON Lines 和位置索引格式等数据格式的 awk、sed、cut、join 和 sort。
Miller 能为我做什么?
使用 Miller,你可以在 CSV、TSV、JSON、JSON Lines 和位置索引等熟悉的格式中使用命名字段,无需计算位置索引。然后,你可以即时添加由现有字段计算得出的新字段、删除字段、排序、统计聚合、美化打印等。

-
Miller 处理的是键值对数据,而常见的 Unix 工具处理的是以整数为索引的字段:如果后者自然的数据结构是数组,那么 Miller 自然的数据结构就是按插入顺序排列的哈希映射。
-
Miller 可处理多种数据格式,包括但不限于常见的 CSV、TSV 和 JSON/JSON Lines。 (Miller 也能处理位置索引数据!)
在上图中,你可以看到 Miller 如何在多种数据格式中运用键值对数据的共同特性。
安装
| 操作系统 | 安装命令 |
|---|---|
| Linux | yum install millerapt-get install millersnap install miller |
| Mac | brew install millerport install miller |
| Windows | choco install millerwinget install Miller.Millerscoop install main/miller |
另请参阅 README-versions.md,查看完整的软件包版本列表。请注意,长期支持(LtS)版本很可能会使用较旧的版本。
另请参阅从源代码构建。
功能
-
Miller 用途广泛,适用于数据清理、 数据精简、统计报告、运维、系统 管理、日志文件处理、格式转换和 数据库查询后处理。
-
你可以使用 Miller 获取并处理日志文件数据,包括筛选出 相关子流,然后转换为 CSV 格式,并将其载入 全内存/数据帧工具,以便进一步进行统计和/或图形处理。
-
Miller 可以与 R、pandas 等数据分析工具互补: 你可以使用 Miller 清理和准备数据。虽然你可以 完全使用 Miller 进行基础统计,但它的流式数据功能和 单遍算法可以帮助你精简超大型数据集。
-
Miller 可以与 SQL 数据库互补:你可以在数据进入或离开 数据库时,在客户端进行切片、筛选和重新格式化。需要紧急查询磁盘文件中的数据时, 你也可以在无需设置的临时任务中,享受数据库的一些优势。
-
Miller 也超越了经典 Unix 工具,全面迈入现代的 NoSQL 世界:其核心的记录异构特性使 Miller 能够处理不同架构(字段名称)的记录交错出现的数据。
-
Miller 具有流式处理能力:大多数操作一次只需在内存中保留 一条记录,而不是先读入全部输入再生成输出。对于需要保留更多数据的操作(
sort、tac、stats1), Miller 也只保留所需的数据量。这意味着只要 功能上可行,你就可以处理大于系统可用 RAM 的文件, 也可以在 tail -f 场景中使用 Miller。 -
Miller 适合管道处理,并可与 Unix 工具集互操作。
-
Miller 的 I/O 格式包括表格化美观打印、按位置 索引(Unix 工具集风格)、CSV、TSV、JSON、JSON Lines 等。
-
Miller 支持格式之间的转换。
-
Miller 的处理过程能识别格式:例如,CSV 的
sort和tac会将标题行保留在最前面。 -
Miller 的性能可媲美 Unix 工具集,吞吐量很高。
-
Miller 使用现代、可移植的 Go 编写,零运行时依赖。 你可以下载或编译单个二进制文件,用
scp将其传到远程机器, 并可预期它能够正常运行。
开始使用
- 10 分钟了解 Miller
- 命令行数据处理指南
- Miller 快速教程
- Miller 练习
- 使用命令行操作 CSV 文件的工具
- www.togaware.com/linux/survivor/CSV_Files.html
- 用于 CSV 操作的 MLR
- Linux Magazine:使用 Miller 处理结构化文本文件
- Miller:命令行 CSV 文件处理
- Miller——CSV 数据、数据科学和数据整理的瑞士军刀链锯
- Pandas 杀手:mlr,科学家
更多文档链接
社区
- 讨论论坛:https://github.com/johnkerl/miller/discussions
- 功能请求 / Bug 报告:https://github.com/johnkerl/miller/issues
- 如何贡献:https://miller.readthedocs.io/en/latest/contributing/
构建状态
从源代码构建
- 首先:
cd /where/you/want/to/put/the/sourcegit clone https://github.com/johnkerl/millercd miller
- 使用
make:- 构建:
make。只需几秒钟即可生成 Miller 可执行文件,即./mlr(Windows 上为.\mlr.exe)。 - 运行测试:
make check。 - 安装:
make install。这会安装可执行文件/usr/local/bin/mlr和手册页/usr/local/share/man/man1/mlr.1(这样你就可以运行man mlr)。 - 如果想安装到
/usr/local以外的位置,可以在运行make install之前执行./configure --prefix=/some/install/path。
- 构建:
- 不使用
make:- 构建:
go build github.com/johnkerl/miller/v6/cmd/mlr。 - 运行测试:
go test github.com/johnkerl/miller/v6/pkg/...和mlr regtest。 - 安装:
go install github.com/johnkerl/miller/v6/cmd/mlr@latest会将程序安装到 GOPATH/bin/mlr。
- 构建:
- 另请参阅从源代码构建文档页面。
- 更多开发者信息请参阅 README-dev.md。
面向开发者
许可证
大家对 Miller 的评价
今天我发现了 Miller——它就像 jq,不过是用于 CSV 的:https://t.co/pn5Ni241KM
— Adrien Trouillaud (@adrienjt) 2020 年 9 月 24 日
另外,“Miller 是 R、pandas 等数据分析工具的补充:你可以用 Miller 清理和准备数据。” @GreatBlueC @nfmcclure
被低估的瑞士军刀式命令行电锯。
— Dirk Eddelbuettel (@eddelbuettel) 2017 年 2 月 28 日
“Miller 就像是针对 [...] CSV、TSV 和 [...] JSON 的 awk、sed、cut、join 和 sort。” https://t.co/TrQqSUK3KK
Miller 看起来是处理 CSV 数据的绝佳命令行工具。把 sed、awk、cut、join 全都合为一体:http://t.co/9BBb6VCZ6Y
— Mike Loukides (@mikeloukides) 2015 年 8 月 16 日
Miller 就像是针对 CSV 等按名称索引的数据的 sed、awk、cut、join 和 sort:http://t.co/1zPbfg6B2W——实用工具!
— Ilya Grigorik (@igrigorik) 2015 年 8 月 22 日
顺便说一句,我觉得 Miller 是处理 CSV 的最佳 CLI 工具。我以前需要预处理过大的 CSV 文件并将其载入 R 时会用它(现在有了 vroom,这类情况可能不多了,不过……)https://t.co/kUjrSSGJoT
— Hiroaki Yutani (@yutannihilat_en) 2020 年 4 月 21 日
Miller:一款*感知格式*的数据整理工具,由 @__jo_ker__ 开发,用来克服 awk、sed 等*感知行*的主力工具的局限 https://t.co/LCyPkhYvt9
— Donny Daniel (@dnnydnl) 2018 年 9 月 9 日
该项目网站是优秀软件文档的绝佳范例!!
天啊,这简直是数据瑞士军刀!怎么之前没人向我推荐 Miller https://t.co/JGQpmRAZLv,帮我解决数据库清理 / ETL 问题?
— James Miller (@japanlawprof) 2018 年 6 月 12 日
祝贺 @__jo_ker__,这款工具直观易用,能胜任关键的数据管理任务!#DataScienceandLaw #ComputationalLaw
🤯@__jo_ker__ 的 Miller 可以轻松读取、转换并写入各种表格数据。它是独立工具,速度快,专为流式数据打造(每次处理一行,因此可以处理大于内存容量的文件)。
— Benjamin Wolfe (he/him) (@BenjaminWolfe) 2021 年 9 月 9 日
文档简直令人赞叹。我整个早上都在读!https://t.co/Be2pGPZK6t
贡献者 ✨
感谢所有帮助 Miller 变得更好的朋友们(表情符号说明):
本项目遵循 all-contributors 规范。欢迎以任何形式参与贡献!