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 still override the defaults you've placed in your .mlrrc
.
What you can put in your .mlrrc
-
You can include any command-line flags, except the "terminal" ones such as
--help
. -
The
--prepipe
,--load
, and--mload
flags aren't allowed in.mlrrc
as they control code execution, and could result in your scripts running things you don't expect if you receive data from someone with a./.mlrrc
in it. You can use--prepipe-bz2
,--prepipe-gunzip
, and--prepipe-zcat
in.mlrrc
, though. -
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:
# 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 maybe more project-specific settings for your current directory if you like.