docs/src/questions-about-then-chaining.md
Then-chaining found in Miller is intended to function the same as Unix pipes, but with less keystroking. You can print your data one pipeline step at a time, to see what intermediate output at one step becomes the input to the next step.
First, look at the input data:
<pre class="pre-highlight-in-pair"> <b>cat data/then-example.csv</b> </pre> <pre class="pre-non-highlight-in-pair"> Status,Payment_Type,Amount paid,cash,10.00 pending,debit,20.00 paid,cash,50.00 pending,credit,40.00 paid,debit,30.00 </pre>Next, run the first step of your command, omitting anything from the first then onward:
After that, run it with the next then step included:
Now if you use then to include another verb after that, the columns Status, Payment_Type, and count will be the input to that verb.
Note, by the way, that you'll get the same results using pipes:
<pre class="pre-highlight-in-pair"> <b>mlr --from data/then-example.csv --csv count-distinct -f Status,Payment_Type \</b> <b>| mlr --c2p sort -nr count</b> </pre> <pre class="pre-non-highlight-in-pair"> Status Payment_Type count paid cash 2 pending debit 1 pending credit 1 paid debit 1 </pre>Given this input data:
<pre class="pre-highlight-in-pair"> <b>cat data/small</b> </pre> <pre class="pre-non-highlight-in-pair"> a=pan,b=pan,i=1,x=0.346791,y=0.726802 a=eks,b=pan,i=2,x=0.758679,y=0.522151 a=wye,b=wye,i=3,x=0.204603,y=0.338318 a=eks,b=wye,i=4,x=0.381399,y=0.134188 a=wye,b=pan,i=5,x=0.573288,y=0.863624 </pre>why don't I see NR=1 and NR=2 here??
The reason is that NR is computed for the original input records and isn't dynamically updated. By contrast, NF is dynamically updated: it's the number of fields in the current record, and if you add/remove a field, the value of NF will change:
NR, by contrast (and FNR as well), retains the value from the original input stream, and records may be dropped by a filter within a then-chain. To recover consecutive record numbers, you can use out-of-stream variables as follows:
Or, simply use mlr cat -n: