Miller 6 釋出,資料檔案的命令列工具

2022-01-14 09:00:31

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,flagmlr cut -o -f shape,flag相同
  • -foo=bar會自動擴充套件為-foo bar,因此(例如mlr --ifs=commamlr --ifs comma相同.

改進了 DSL 解析的錯誤訊息

對於mlr putmlr 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 正規表示式支援

IFSIPS可以是正規表示式:分別使用--ifs-regex--ips-regex代替--ifs--ips。還可以使用--ifs space --repifs--ifs-regex '()+'

大小寫摺疊排序選項

sort 現在接受-c-cr選項,用於大小寫摺疊的升序/降序排序。

更多詳情可檢視:

展開閱讀全文