Miller

John Kerl · Miller.Miller

Miller is like awk, sed, cut, join, and sort for name-indexed data such as CSV, TSV, and tabular JSON

Miller is like awk, sed, cut, join, and sort for name-indexed data such as CSV, TSV, and tabular JSON. You get to work with your data using named fields, without needing to count positional column indices. This is something the Unix toolkit always could have done, and arguably always should have done. It operates on key-value-pair data while the familiar Unix tools operate on integer-indexed fields: if the natural data structure for the latter is the array, then Miller’s natural data structure is the insertion-ordered hash map. This encompasses a variety of data formats, including but not limited to the familiar CSV, TSV, and JSON. (Miller can handle positionally-indexed data as a special case.) ## Features - Miller is multi-purpose: it’s useful for data cleaning, data reduction, statistical reporting, devops, system administration, log-file processing, format conversion, and database-query post-processing. - You can use Miller to snarf and munge log-file data, including selecting out relevant substreams, then produce CSV format and load that into all-in-memory/data-frame utilities for further statistical and/or graphical processing. - Miller complements data-analysis tools such as R, pandas, etc.: you can use Miller to clean and prepare your data. While you can do basic statistics entirely in Miller, its streaming-data feature and single-pass algorithms enable you to reduce very large data sets. - Miller complements SQL databases: you can slice, dice, and reformat data on the client side on its way into or out of a database. (Examples here and here). You can also reap some of the benefits of databases for quick, setup-free one-off tasks when you just need to query some data in disk files in a hurry. - Miller also goes beyond the classic Unix tools by stepping fully into our modern, no-SQL world: its essential record-heterogeneity property allows Miller to operate on data where records with different schema (field names) are interleaved. - Miller is streaming: most operations need only a single record in memory at a time, rather than ingesting all input before producing any output. For those operations which require deeper retention (sort, tac, stats1), Miller retains only as much data as needed. This means that whenever functionally possible, you can operate on files which are larger than your system’s available RAM, and you can use Miller in tail -f contexts. - Miller is pipe-friendly and interoperates with the Unix toolkit - Miller’s I/O formats include tabular pretty-printing, positionally indexed (Unix-toolkit style), CSV, JSON, and others - Miller does conversion between formats - Miller’s processing is format-aware: e.g. CSV sort and tac keep header lines first - Miller has high-throughput performance on par with the Unix toolkit - Not unlike jq (for JSON), Miller is written in portable, modern C, with zero runtime dependencies. You can download or compile a single binary, scp it to a faraway machine, and expect it to work.

winget install --id Miller.Miller --exact --source winget

Latest 6.13.0

Release Notes

New features

  • Add a stat DSL function by @johnkerl in #1560
  • Add mad accumulator for stats1 DSL function by @johnkerl in #1561
  • Support $NO_COLOR by @johnkerl in #1580 Bug fixes
  • Fraction bugfix by @oandrew in #1579
  • Fix local time when TZ is not set by @balki in #1649
  • Bash process substitution not working with put -f by @johnkerl in #1583
  • Be smarter about auto-unflatten by @johnkerl in #1584
  • RS aliases for ASCII top-of-table control characters are misnamed by @johnkerl in #1620
  • Fix binary data in JSON output by @johnkerl in #1626
  • Fix prepipe handling when filenames have whitespace by @johnkerl in #1627
  • Error in splita/splitax when field contains a single non-string value by @johnkerl in #1629 Documentation updates
  • Update reference-verbs.md by @aborruso in #1665
  • Characters to be removed by @aborruso in #1668
  • Fix minor typo by @austinletson in #1673
  • Enable admonition extension by @aborruso in #1636
  • To realize which chapter and section are active by @aborruso in #1631
  • To have edit and copy code in each page by @aborruso in #1632
  • Update extra.css by @aborruso in #1633
  • A note about positional field names by @aborruso in #1634
  • Fix typo in online help for --no-jlistwrap by @johnkerl in #1541
  • Try to build readthedocs .epub and .pdf by @johnkerl in #1548
  • On-line help for mlr summary --transpose by @johnkerl in #1581
  • Note IANA TSV support by @johnkerl in #1582
  • Source-file update for PR 1634 by @johnkerl in #1635
  • Update source material for #1665 by @johnkerl in #1666
  • Fix 1668 error-source by @johnkerl in #1672 Minor changes
  • The package version must match the major tag version by @lespea in #1654
  • Use string version of regexp methods to reduce allocs by @Juneezee in #1614
  • Chore: fix function name in comment by @camcui in #1543
  • Fix mismatched method names in comments by @forcedebug in #1549
  • Compiling on newer go versions doesn't work by @lespea in #1655
  • Misc. codespell findings by @johnkerl in #1628 New Contributors
  • @camcui made their first contribution in #1543
  • @forcedebug made their first contribution in #1549
  • @oandrew made their first contribution in #1579
  • @balki made their first contribution in #1649
  • @lespea made their first contribution in #1654
  • @austinletson made their first contribution in #1673 Dependency updates
  • Bump actions/cache from 4.0.1 to 4.0.2 by @dependabot in #1532
  • Bump golang.org/x/term from 0.18.0 to 0.19.0 by @dependabot in #1536
  • Bump github.com/klauspost/compress from 1.17.7 to 1.17.8 by @dependabot in #1538
  • Bump actions/upload-artifact from 4.3.1 to 4.3.2 by @dependabot in #1547
  • Bump actions/checkout from 4.1.2 to 4.1.3 by @dependabot in #1550
  • Bump actions/upload-artifact from 4.3.2 to 4.3.3 by @dependabot in #1551
  • Bump actions/checkout from 4.1.3 to 4.1.4 by @dependabot in #1552
  • Bump actions/setup-go from 5.0.0 to 5.0.1 by @dependabot in #1553
  • Bump golang.org/x/sys from 0.19.0 to 0.20.0 by @dependabot in #1554
  • Bump golang.org/x/text from 0.14.0 to 0.15.0 by @dependabot in #1556
  • Bump golang.org/x/term from 0.19.0 to 0.20.0 by @dependabot in #1555
  • Bump actions/checkout from 4.1.4 to 4.1.5 by @dependabot in #1557
  • Bump goreleaser/goreleaser-action from 5.0.0 to 5.1.0 by @dependabot in #1563
  • Bump actions/checkout from 4.1.5 to 4.1.6 by @dependabot in #1566
  • Bump github/codeql-action from 2.13.4 to 3.25.5 by @dependabot in #1567
  • Bump github/codeql-action from 3.25.5 to 3.25.6 by @dependabot in #1568
  • Bump github/codeql-action from 3.25.6 to 3.25.7 by @dependabot in #1570
  • Bump goreleaser/goreleaser-action from 5.1.0 to 6.0.0 by @dependabot in #1574
  • Bump github/codeql-action from 3.25.7 to 3.25.8 by @dependabot in #1575
  • Bump golang.org/x/text from 0.15.0 to 0.16.0 by @dependabot in #1576
  • Bump golang.org/x/sys from 0.20.0 to 0.21.0 by @dependabot in #1578
  • Bump golang.org/x/term from 0.20.0 to 0.21.0 by @dependabot in #1577
  • Bump github.com/klauspost/compress from 1.17.8 to 1.17.9 by @dependabot in #1585
  • Bump actions/checkout from 4.1.6 to 4.1.7 by @dependabot in #1586
  • Bump github/codeql-action from 3.25.8 to 3.25.9 by @dependabot in #1587
  • Bump github/codeql-action from 3.25.9 to 3.25.10 by @dependabot in #1588
  • Bump github/codeql-action from 3.25.10 to 3.25.11 by @dependabot in #1593
  • Bump golang.org/x/sys from 0.21.0 to 0.22.0 by @dependabot in #1595
  • Bump golang.org/x/term from 0.21.0 to 0.22.0 by @dependabot in #1594
  • Bump actions/upload-artifact from 4.3.3 to 4.3.4 by @dependabot in #1596
  • Bump actions/setup-go from 5.0.1 to 5.0.2 by @dependabot in #1597
  • Bump github/codeql-action from 3.25.11 to 3.25.12 by @dependabot in #1598
  • Bump github/codeql-action from 3.25.12 to 3.25.13 by @dependabot in #1602
  • Bump github/codeql-action from 3.25.13 to 3.25.14 by @dependabot in #1603
  • Bump github/codeql-action from 3.25.14 to 3.25.15 by @dependabot in #1604
  • Bump golang.org/x/sys from 0.22.0 to 0.23.0 by @dependabot in #1605
  • Bump actions/upload-artifact from 4.3.4 to 4.3.5 by @dependabot in #1606
  • Bump golang.org/x/term from 0.22.0 to 0.23.0 by @dependabot in #1612
  • Bump actions/upload-artifact from 4.3.5 to 4.3.6 by @dependabot in #1609
  • Bump github/codeql-action from 3.25.15 to 3.26.0 by @dependabot in #1610
  • Bump golang.org/x/text from 0.16.0 to 0.17.0 by @dependabot in #1611
  • Bump golang.org/x/sys from 0.23.0 to 0.24.0 by @dependabot in #1613
  • Bump github/codeql-action from 3.26.0 to 3.26.1 by @dependabot in #1615
  • Bump github/codeql-action from 3.26.1 to 3.26.2 by @dependabot in #1617
  • Bump codespell-project/actions-codespell from 2.0 to 2.1 by @dependabot in #1622
  • Bump github/codeql-action from 3.26.2 to 3.26.3 by @dependabot in #1623
  • Bump github/codeql-action from 3.26.3 to 3.26.4 by @dependabot in #1624
  • Bump github/codeql-action from 3.26.4 to 3.26.5 by @dependabot in #1630
  • Bump github.com/lestrrat-go/strftime from 1.0.6 to 1.1.0 by @dependabot in #1637
  • Bump github/codeql-action from 3.26.5 to 3.26.6 by @dependabot in #1638
  • Bump actions/upload-artifact from 4.3.6 to 4.4.0 by @dependabot in #1640
  • Bump golang.org/x/text from 0.17.0 to 0.18.0 by @dependabot in #1641
  • Bump golang.org/x/term from 0.23.0 to 0.24.0 by @dependabot in #1642
  • Bump github/codeql-action from 3.26.6 to 3.26.7 by @dependabot in #1648
  • Bump github/codeql-action from 3.26.7 to 3.26.8 by @dependabot in #1652
  • Bump github.com/klauspost/compress from 1.17.9 to 1.17.10 by @dependabot in #1659
  • Bump github/codeql-action from 3.26.8 to 3.26.9 by @dependabot in #1660
  • Bump actions/checkout from 4.1.7 to 4.2.0 by @dependabot in #1662
  • Bump github/codeql-action from 3.26.9 to 3.26.10 by @dependabot in #1664
  • Bump github/codeql-action from 3.26.10 to 3.26.11 by @dependabot in #1669 Full Changelog: v6.12.0...v6.13.0

Installer type: zip

Architecture Scope Download SHA256
x86 Download D530685B203D31DC115C4E768802D7D6BCB889CFA4DD7C1534DFA37D8B440D1B
x64 Download A712A31845369AED737519B22B233CE70E1451DA2957E5A048C89693A97B39FC

Details

Homepage
https://github.com/johnkerl/miller
License
BSD-2-Clause
Publisher
John Kerl
Support
https://github.com/johnkerl/miller/issues
Moniker
miller

Tags

csvcsv-formatdata-cleaningdata-processingdata-reductiondata-regressiondevopsdevops-toolsjsonjson-datastatistical-analysisstatisticsstreaming-algorithmsstreaming-datatabular-datatsv

Older versions (4)

6.12.0
Architecture Scope Download SHA256
x86 Download D2F5BE120095D9E077AEA206E2158255C5F882487EAF0C9E72E47E35708C5236
x64 Download 52C755E01E5C25B1F5505C49B0604E259CDDF14F68784AA779CB276B33948B49
6.11.0
Architecture Scope Download SHA256
x86 Download CBA4A2DA0DCE1087C92A4CAEFE76986580139683E45FD3B64EF8103BF35C31CC
x64 Download AC261B3BB6444780F06406814E687D9072C26C2B72DD924CFB8A68F609ADD2A8
6.10.0
Architecture Scope Download SHA256
x86 Download E5E7121C6962E0A9678F539D3C77B505D7CE4497721EAD4EF4B2B54010575D00
x64 Download 82F0204B3E54AB0D201CAEB6B78186710BC03941373C55272082DA473130685B
6.9.0
Architecture Scope Download SHA256
x86 Download 574BD27CC6F70548FF9CCF7FCB0041E28BC5D5F9458CBC3662B209785902B3DB
x64 Download B28CBB2517BE4CBF57A3D3AA69A6E643157091561924E6C0382A62A03C89FB80