Miller 6 发布,数据文件的命令行工具
Miller 是一个命令行工具,用于查询、调整和重新格式化各种格式的数据文件,包括 CSV、TSV、JSON 和 JSON Lines。
用户体验
Miller 6 的功能主要由 2021 年 Miller 用户调查结果和 GitHub Issues 中的大量反馈来推动。
性能
在简单处理方面,性能与 Miller 5 相当,在复杂处理链方面,Miller 6 由于改进了多核利用率,因此性能远远优于 Miller 5,除此之外,CSV I/O 也有明显改善。
文档改进
文档和在线帮助(mlr --help)已经被完全重写。
改进 Windows 体验
Miller 最初是为类 Unix 操作系统开发的,包括 Linux 和 macOS。Miller 5.2.0 成为了第一个支持 Windows 的版本。从 6.0.0 版本开始,Miller 直接在 Windows 上构建。
现在,Windows 上的体验与 Linux,NetBSD / FreeBSD和 macOS 上的体验几乎相同,MSYS2 不再是必需的 。
输出着色
每当输出到终端时,Miller 都会对键和值使用单独的可自定义颜色。
改进的命令行解析
Miller 6 具有 getoptish 命令行解析:
xyz自动扩展为x -y -z,例如mlr cut -of shape,flag与mlr cut -o -f shape,flag相同-foo=bar会自动扩展为-foo bar,因此(例如mlr --ifs=comma与mlr --ifs comma相同.
改进了 DSL 解析的错误消息
对于mlr put和mlr filter,解析错误消息现在包含位置信息:
mlr: cannot parse DSL expression. Parse error on token ">" at line 63 columnn 7.
脚本
脚本现在更容易支持带有sh的#!,以及现在支持带有mlr -s的#!。对于 Windows,也可以使用mlr -s。这些变化有助于减少反斜杠引起的混乱,让用户在少打字的同时做更多的事情。
改进的国际化支持
现在可以用 UTF-8 编写字段名称、局部变量等,例如mlr --c2p filter '$σχήμα == "κύκλος"' παράδειγμα.csv。
改进的日期时间/时区支持
包括支持通过函数参数指定时区,作为TZ环境变量的替代方法。
对压缩输入的进程内支持
除了--prepipe gunzip之外,在 Miller 6 中现在还可以使用--gzin标志。如果你的文件以.gz结尾,那你甚至无需这样操作,Miller 将通过文件扩展名自动检测并自动解压缩mlr --csv cat foo.csv.gz.z
支持读取网络网址
可以读取带有https://和http:// 和file:// 前缀的输入:
mlr --csv sort -f shape \\ <https://raw.githubusercontent.com/johnkerl/miller/main/docs/src/gz-example.csv.gz>
改进 JSON / JSON Lines 支持和数组
数组现在在 Miller 的put/filter编程语言中受支持,此外array现在是一个关键字,因此它不再可用作局部变量或 UDF 名称。
改进数值转换
Miller 6 最核心的部分是深度重构如何从文件内容解析数据值、如何推断类型以及如何将它们转换回文本到输出文件。
在 Miller 5 及更低版本中,所有值都存储为字符串,然后仅根据需要转换为 int/float。
在 Miller 6 中,可解析为 int/float 的东西从读取输入数据的那一刻起就被视为 int/float,并且它们通过动词链传递。
重复字段名称的重复数据删除
默认情况下,除 JSON / JSON Lines 之外的所有文件格式的字段名称都会被重复数据删除。
对 IFS 和 IPS 正则表达式支持
IFS和IPS可以是正则表达式:分别使用--ifs-regex或--ips-regex代替--ifs或--ips。还可以使用--ifs space --repifs或--ifs-regex '()+'。
大小写折叠排序选项
sort 现在接受-c和-cr选项,用于大小写折叠的升序/降序排序。
更多详情可查看:https://miller.readthedocs.io/en/latest/new-in-miller-6/