docs/src/shell-commands.md
TODO: while-read example from issues
The system DSL function allows you to run a specific shell command and put its output -- minus the final newline -- into a record field. The command itself is any string, either a literal string, or a concatenation of strings, perhaps including other field values or what have you.
<pre class="pre-highlight-in-pair"> <b>mlr --opprint put '$o = system("echo hello world")' data/small</b> </pre> <pre class="pre-non-highlight-in-pair"> a b i x y o pan pan 1 0.346791 0.726802 hello world eks pan 2 0.758679 0.522151 hello world wye wye 3 0.204603 0.338318 hello world eks wye 4 0.381399 0.134188 hello world wye pan 5 0.573288 0.863624 hello world </pre> <pre class="pre-highlight-in-pair"> <b>mlr --opprint put '$o = system("echo {" . NR . "}")' data/small</b> </pre> <pre class="pre-non-highlight-in-pair"> a b i x y o pan pan 1 0.346791 0.726802 {1} eks pan 2 0.758679 0.522151 {2} wye wye 3 0.204603 0.338318 {3} eks wye 4 0.381399 0.134188 {4} wye pan 5 0.573288 0.863624 {5} </pre> <pre class="pre-highlight-in-pair"> <b>mlr --opprint put '$o = system("echo -n ".$a."| md5")' data/small</b> </pre> <pre class="pre-non-highlight-in-pair"> a b i x y o pan pan 1 0.346791 0.726802 ccc62bbd08bdc21905f4909463ccdf7c eks pan 2 0.758679 0.522151 585d25a8ff04840f77779eeff61167dc wye wye 3 0.204603 0.338318 fb6361a373147c163e65ada94719fa16 eks wye 4 0.381399 0.134188 585d25a8ff04840f77779eeff61167dc wye pan 5 0.573288 0.863624 fb6361a373147c163e65ada94719fa16 </pre>Note that running a subprocess on every record takes a non-trivial amount of time. Comparing asking the system date command for the current time in nanoseconds versus computing it in process: