mirror of
https://github.com/johnkerl/miller.git
synced 2026-08-02 20:42:52 +00:00
125 lines
6.2 KiB
HTML
125 lines
6.2 KiB
HTML
POKI_PUT_TOC_HERE
|
|
|
|
<p/>
|
|
<button style="font-weight:bold;color:maroon;border:0" onclick="bodyToggler.expandAll();" href="javascript:;">Expand all sections</button>
|
|
<button style="font-weight:bold;color:maroon;border:0" onclick="bodyToggler.collapseAll();" href="javascript:;">Collapse all sections</button>
|
|
|
|
<!-- ================================================================ -->
|
|
<h1>Overview</h1>
|
|
<button style="font-weight:bold;color:maroon;border:0" padding=0 onclick="bodyToggler.toggle('body_section_toggle_overview');" href="javascript:;">Toggle section visibility</button>
|
|
<div id="body_section_toggle_overview" style="display: block">
|
|
|
|
<p/> One of Miller’s strengths is its compact notation: for example, given input of the form
|
|
|
|
POKI_RUN_COMMAND{{head -n 5 ../data/medium}}HERE
|
|
|
|
you can simply do
|
|
|
|
POKI_RUN_COMMAND{{mlr --oxtab stats1 -a sum -f x ../data/medium}}HERE
|
|
|
|
or
|
|
|
|
POKI_RUN_COMMAND{{mlr --opprint stats1 -a sum -f x -g b ../data/medium}}HERE
|
|
|
|
rather than the more tedious
|
|
|
|
POKI_INCLUDE_AND_RUN_ESCAPED(oosvar-example-sum.sh)HERE
|
|
|
|
or
|
|
|
|
POKI_INCLUDE_AND_RUN_ESCAPED(oosvar-example-sum-grouped.sh)HERE
|
|
|
|
<p/> The former (<code>mlr stats1</code> et al.) has the advantages of being easier
|
|
to type, being less error-prone to type, and running faster.
|
|
|
|
<p/> Nonetheless, out-of-stream variables (which I whimsically call
|
|
<i>oosvars</i>), begin/end blocks, and emit statements give you the ability to
|
|
implement logic — if you wish to do so — which isn’t present
|
|
in other Miller verbs. (If you find yourself often using the same
|
|
out-of-stream-variable logic over and over, please file a request at <a
|
|
href="https://github.com/johnkerl/miller/issues">https://github.com/johnkerl/miller/issues</a>
|
|
to get it implemented directly in C as a Miller verb of its own.)
|
|
|
|
<p/> The following examples compute some things using oosvars which are already
|
|
computable using Miller verbs, by way of providing food for thought.
|
|
|
|
</div>
|
|
<!-- ================================================================ -->
|
|
<h1>Mean without/with oosvars</h1>
|
|
<button style="font-weight:bold;color:maroon;border:0" padding=0 onclick="bodyToggler.toggle('body_section_toggle_mean');" href="javascript:;">Toggle section visibility</button>
|
|
<div id="body_section_toggle_mean" style="display: block">
|
|
|
|
POKI_RUN_COMMAND{{mlr --opprint stats1 -a mean -f x data/medium}}HERE
|
|
POKI_INCLUDE_AND_RUN_ESCAPED(data/mean-with-oosvars.sh)HERE
|
|
|
|
</div>
|
|
<!-- ================================================================ -->
|
|
<h1>Keyed mean without/with oosvars</h1>
|
|
<button style="font-weight:bold;color:maroon;border:0" padding=0 onclick="bodyToggler.toggle('body_section_toggle_keyed_mean');" href="javascript:;">Toggle section visibility</button>
|
|
<div id="body_section_toggle_keyed_mean" style="display: block">
|
|
|
|
POKI_RUN_COMMAND{{mlr --opprint stats1 -a mean -f x -g a,b data/medium}}HERE
|
|
POKI_INCLUDE_AND_RUN_ESCAPED(data/keyed-mean-with-oosvars.sh)HERE
|
|
|
|
</div>
|
|
<!-- ================================================================ -->
|
|
<h1>Variance and standard deviation without/with oosvars</h1>
|
|
<button style="font-weight:bold;color:maroon;border:0" padding=0 onclick="bodyToggler.toggle('body_section_toggle_var_stddev');" href="javascript:;">Toggle section visibility</button>
|
|
<div id="body_section_toggle_var_stddev" style="display: block">
|
|
|
|
POKI_RUN_COMMAND{{mlr --oxtab stats1 -a count,sum,mean,var,stddev -f x data/medium}}HERE
|
|
POKI_RUN_COMMAND{{cat variance.mlr}}HERE
|
|
POKI_RUN_COMMAND{{mlr --oxtab put -q -f variance.mlr data/medium}}HERE
|
|
|
|
You can also do this keyed, of course, imitating the keyed-mean example above.
|
|
|
|
</div>
|
|
<!-- ================================================================ -->
|
|
<h1>Min/max without/with oosvars</h1>
|
|
<button style="font-weight:bold;color:maroon;border:0" padding=0 onclick="bodyToggler.toggle('body_section_toggle_min_max');" href="javascript:;">Toggle section visibility</button>
|
|
<div id="body_section_toggle_min_max" style="display: block">
|
|
|
|
POKI_RUN_COMMAND{{mlr --oxtab stats1 -a min,max -f x data/medium}}HERE
|
|
|
|
POKI_RUN_COMMAND{{mlr --oxtab put -q '@x_min = min(@x_min, $x); @x_max = max(@x_max, $x); end{emitf @x_min, @x_max}' data/medium}}HERE
|
|
|
|
</div>
|
|
<!-- ================================================================ -->
|
|
<h1>Keyed min/max without/with oosvars</h1>
|
|
<button style="font-weight:bold;color:maroon;border:0" padding=0 onclick="bodyToggler.toggle('body_section_toggle_keyed_min_max');" href="javascript:;">Toggle section visibility</button>
|
|
<div id="body_section_toggle_keyed_min_max" style="display: block">
|
|
|
|
POKI_RUN_COMMAND{{mlr --opprint stats1 -a min,max -f x -g a data/medium}}HERE
|
|
POKI_INCLUDE_AND_RUN_ESCAPED(data/keyed-min-max-with-oosvars.sh)HERE
|
|
|
|
</div>
|
|
<!-- ================================================================ -->
|
|
<h1>Delta without/with oosvars</h1>
|
|
<button style="font-weight:bold;color:maroon;border:0" padding=0 onclick="bodyToggler.toggle('body_section_toggle_delta');" href="javascript:;">Toggle section visibility</button>
|
|
<div id="body_section_toggle_delta" style="display: block">
|
|
|
|
POKI_RUN_COMMAND{{mlr --opprint step -a delta -f x data/small}}HERE
|
|
|
|
POKI_RUN_COMMAND{{mlr --opprint put '$x_delta = is_present(@last) ? $x - @last : 0; @last = $x' data/small}}HERE
|
|
|
|
</div>
|
|
<!-- ================================================================ -->
|
|
<h1>Keyed delta without/with oosvars</h1>
|
|
<button style="font-weight:bold;color:maroon;border:0" padding=0 onclick="bodyToggler.toggle('body_section_toggle_keyed_delta');" href="javascript:;">Toggle section visibility</button>
|
|
<div id="body_section_toggle_keyed_delta" style="display: block">
|
|
|
|
POKI_RUN_COMMAND{{mlr --opprint step -a delta -f x -g a data/small}}HERE
|
|
|
|
POKI_RUN_COMMAND{{mlr --opprint put '$x_delta = is_present(@last[$a]) ? $x - @last[$a] : 0; @last[$a]=$x' data/small}}HERE
|
|
|
|
</div>
|
|
<!-- ================================================================ -->
|
|
<h1>Exponentially weighted moving averages without/with oosvars</h1>
|
|
<button style="font-weight:bold;color:maroon;border:0" padding=0 onclick="bodyToggler.toggle('body_section_toggle_ewma');" href="javascript:;">Toggle section visibility</button>
|
|
<div id="body_section_toggle_ewma" style="display: block">
|
|
|
|
POKI_INCLUDE_AND_RUN_ESCAPED(verb-example-ewma.sh)HERE
|
|
|
|
POKI_INCLUDE_AND_RUN_ESCAPED(oosvar-example-ewma.sh)HERE
|
|
|
|
</div>
|