Customization: .mlrrc¶
How to use .mlrrc¶
Suppose you always use CSV files. Then instead of always having to type --csv
as in
mlr --csv cut -x -f extra mydata.csv
mlr --csv sort -n id mydata.csv
and so on, you can instead put the following into your $HOME/.mlrrc
:
--csv
Then you can just type things like
mlr cut -x -f extra mydata.csv
mlr sort -n id mydata.csv
and the --csv
part will automatically be understood. (If you do want to process, say, a JSON file then mlr --json ...
at the command line will override the default from your .mlrrc
.)
What you can put in your .mlrrc¶
You can include any command-line flags, except the “terminal” ones such as
--help
.The formatting rule is you need to put one flag beginning with
--
per line: for example,--csv
on one line and--nr-progress-mod 1000
on a separate line.Since every line starts with a
--
option, you can leave off the initial--
if you want. For example,ojson
is the same as--ojson
, andnr-progress-mod 1000
is the same as--nr-progress-mod 1000
.Comments are from a
#
to the end of the line.Empty lines are ignored – including lines which are empty after comments are removed.
Here is an example .mlrrc file
:
# These are my preferred default settings for Miller
# Input and output formats are CSV by default (unless otherwise specified
# on the mlr command line):
csv
# If a data line has fewer fields than the header line, instead of erroring
# (which is the default), just insert empty values for the missing ones:
allow-ragged-csv-input
# These are no-ops for CSV, but when I do use JSON output, I want these
# pretty-printing options to be used:
jvstack
jlistwrap
# Use "@", rather than "#", for comments within data files:
skip-comments-with @
Where to put your .mlrrc¶
If the environment variable
MLRRC
is set:If its value is
__none__
then no.mlrrc
files are processed. (This is nice for things like regression testing.)Otherwise, its value (as a filename) is loaded and processed. If there are syntax errors, they abort
mlr
with a usage message (as if you had mistyped something on the command line). If the file can’t be loaded at all, though, it is silently skipped.Any
.mlrrc
in your home directory or current directory is ignored wheneverMLRRC
is set in the environment.Example line in your shell’s rc file:
export MLRRC=/path/to/my/mlrrc
Otherwise:
If
$HOME/.mlrrc
exists, it’s processed as above.If
./.mlrrc
exists, it’s then also processed as above.The idea is you can have all your settings in your
$HOME/.mlrrc
, then override maybe one or two for your current directory if you like.