Miller Name-indexed data tool
Light · Postcard
102 × 152 mm · PDF
Dark · Postcard
102 × 152 mm · PDF
Ink saver · Postcard
102 × 152 mm · PDF
Light · A4 landscape
297 × 210 mm · PDF
Dark · A4 landscape
297 × 210 mm · PDF
Ink saver · A4 landscape
297 × 210 mm · PDF
Light · A3 landscape
420 × 297 mm · PDF
Dark · A3 landscape
420 × 297 mm · PDF
Ink saver · A3 landscape
420 × 297 mm · PDF
Start here
mlr --icsv --opprint cat <file>
mlr --c2j cat <file>
mlr --icsv --opprint head -n 5 <file>
mlr --icsv --opprint sort -nr <field>
<file>
mlr --icsv --opprint filter '$x > 5'
<file>
mlr --icsv --opprint put '$z = $x * $y'
<file>
mlr --icsv --opprint stats1 -a mean,sum -f <f> -g
<g> <file>
mlr --icsv --opprint cut -f a,b then sort -f a
<file>
Concepts
- Input format --icsv, --ijson
- Verb chain cat, sort, put ...
- Next verb each sees the previous output
- Output format --opprint, --ojson
Formats and I/O
mlr --icsv --opprint <verb> <file>
mlr --c2j <verb>
mlr --c2p <verb>
mlr --c2t / --t2c <verb>
mlr --j2c <verb>
mlr --c2m <verb>
mlr --io json <verb>
mlr --implicit-csv-header <verb>
mlr --headerless-csv-output <verb>
Inspect and slice
mlr <fmt> cat
mlr <fmt> cat -n -g <field>
mlr <fmt> head -n <n>
mlr <fmt> head -n 1 -g <field>
mlr <fmt> tail -n <n>
mlr <fmt> count -g <field>
mlr <fmt> summary
mlr <fmt> grep -i <regex>
Fields
mlr <fmt> cut -f a,b
mlr <fmt> cut -o -f b,a
mlr <fmt> cut -x -f a,b
mlr <fmt> cut -r -f '^t_'
mlr <fmt> reorder -f a,b
mlr <fmt> reorder -e -f a
mlr <fmt> label a,b,c
mlr <fmt> fill-empty -v <value>
Filter and compute (DSL)
mlr <fmt> filter '$x > 5 && $y ==
"a"'
mlr <fmt> filter '$name =~
"^ab"'
mlr <fmt> put '$new = $a . "-" .
$b'
mlr <fmt> put -q '<stmts>'
mlr <fmt> put 'unset $x'
mlr <fmt> put 'NR == 1 {$flag =
"first"}'
mlr <fmt> put 'if ($x > 0) {$s =
"pos"} else {$s = "neg"}'
mlr <fmt> put '$z = $x > 0 ? "pos" :
"neg"'
mlr <fmt> put -f <script.mlr>
mlr <fmt> put '@sum += $x; end {emit
@sum}'
NR FNR NF FILENAME
mlr <fmt> put '$a = sub($a, "x",
"y")'
mlr <fmt> put '$a = gsub($a, "x",
"y")'
mlr <fmt> put '$r = fmtnum($x,
"%.2f")'
Aggregate
mlr <fmt> stats1 -a mean,sum,count -f <f>
mlr <fmt> stats1 -a p50,min,max -f <f> -g
<g>
mlr <fmt> count-distinct -f <field>
mlr <fmt> top -n 3 -f <f> -g <g> -a
Sort and dedupe
mlr <fmt> sort -f <field>
mlr <fmt> sort -nr <field>
mlr <fmt> sort -nf a -r b
mlr <fmt> uniq -g a,b
Join and combine
mlr <fmt> join -j <id> -f <left>
<right>
mlr <fmt> join --ul --ur -j <id> -f
<left> <right>
Nest and reshape
mlr <fmt> nest --evar ';' -f
<field>
mlr <fmt> reshape -i a,b -o key,value
mlr <fmt> reshape -s key,value
Time
mlr <fmt> sec2gmt <field>
Help and misc
mlr help verb <name>
mlr <verb> --help
Recipes
mlr --icsv --ojson cut -f id,name,price then sort -nr price data.csv
mlr --icsv --opprint \ top -n 3 -f revenue -g category -a sales.csv
mlr --icsv --opprint \ stats1 -a count,sum -f amount -g customer \ then sort -nr amount_sum orders.csv
mlr --icsv --opprint \ join -j id --lp left_ -f users.csv \ then cut -x -f internal_notes orders.csv
# writes out_east.csv, out_west.csv, ...mlr --icsv --ocsv split -g region --prefix out data.csv



