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
- If its value is
- 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.
- If