#!/bin/bash set -euo pipefail run_mlr() { # Use just "mlr" for info messages echo echo ---------------------------------------------------------------- echo mlr "$@" ./mlr "$@" } # With mlr -n put v, we are only parsing the DSL expression into an AST and # then CST, but not executingit echo; run_mlr -n put -v '$y = 1 || 2' echo; run_mlr -n put -v '$y = 1 || 2 || 3' echo; run_mlr -n put -v '$y = 1 || 2 && 3' echo; run_mlr -n put -v '$y = 1 && 2 || 3' echo; run_mlr -n put -v '$y = 1 ? 2 : 3' echo; run_mlr -n put -v '$y = $a + $b * $c' echo; run_mlr -n put -v '$y = $a * $b * $c' echo; run_mlr -n put -v '$y = $a ** $b ** $c' echo; run_mlr -n put -v '$[2] = 3' echo; run_mlr -n put -v '$[$y] = 4' #echo; run_mlr -n put -v '${1} = 4' echo; run_mlr -n put -v '$x = "abc"' echo; run_mlr -n put -v '$["abc"] = "def"' echo; run_mlr -n put -v '$[FILENAME] = FNR' echo; run_mlr -n put -v '$x = $a + $b + $c' echo; run_mlr -n put -v '$x = ($a + $b) + $c; $y = $a + ($b + $c); $z = $a + ($b)+ $c' echo; run_mlr -n put -v '$x = 2 * $a + $b . $c' echo; run_mlr -n put -v '$x = 2 * $a + ($b . $c)' echo; run_mlr -n put -v '$x = (NF + NR) * 7; $y = OFS . $y . "hello"' echo; run_mlr -n put -v '$x = 123. + 1e-2 / .2e3 + 1.e-3' echo; run_mlr -n put -v '$z=0x7fffffffffffffff + 0x7fffffffffffffff' echo; run_mlr -n put -v '$z=0x7fffffffffffffff .+ 0x7fffffffffffffff' echo; run_mlr -n put -v '$z=0x7fffffffffffffff * 0x7fffffffffffffff' echo; run_mlr -n put -v '$z=0x7fffffffffffffff .* 0x7fffffffffffffff' echo; run_mlr -n put -v '$z = []' echo; run_mlr -n put -v '$z = [1,]' echo; run_mlr -n put -v '$z = [1,2]' echo; run_mlr -n put -v '$z = [1,2,]' echo; run_mlr -n put -v '$z = [1,2,3]' echo; run_mlr -n put -v '$z = [1,2,3,]' echo; run_mlr -n put -v '$z = {}' echo; run_mlr -n put -v '$z = {"a":"1"}' echo; run_mlr -n put -v '$z = {"a":"1",}' echo; run_mlr -n put -v '$z = {"a":"1", "b":2}' echo; run_mlr -n put -v '$z = {"a":"1", "b":2,}' echo; run_mlr -n put -v '$z = {"a":"1", "b":2, "c":3}' echo; run_mlr -n put -v '$z = {"a":"1", "b":2, "c":3,}' echo; run_mlr -n put -v '$z = $a[1]' echo; run_mlr -n put -v '$z = $a["index"]' echo; run_mlr -n put -v '$z = "abcde"[1]' echo; run_mlr -n put -v '$z = "abcde"["index"]' echo; run_mlr -n put -v '$z = $a[1:2]' echo; run_mlr -n put -v '$z = $a[:2]' echo; run_mlr -n put -v '$z = $a[1:]' echo; run_mlr -n put -v '$z = $a[:]' echo; run_mlr -n put -v '$z = [5,6,7,8,9][1]' echo; run_mlr -n put -v '$z = {"a":1, "b":2, "c":3}["b"]' echo; run_mlr -n put -v 'begin{}' echo; run_mlr -n put -v 'begin{@y=1}' echo; run_mlr -n put -v 'end{}' echo; run_mlr -n put -v 'end{@y=1}' # disallowed run_mlr -n put -v 'begin{}; end {}' # disallowed run_mlr -n put -v 'begin{@y=1}; $x=2' echo; run_mlr -n put -v '$x=2; end{@y=1}' echo; run_mlr -n put -v 'begin{@y=1} $x=2' echo; run_mlr -n put -v 'begin{} end {}' echo; run_mlr -n put -v '$x=1;' echo; run_mlr -n put -v '$x=1;$y=2;' echo; run_mlr -n put -v 'begin{@x=1;@y=2}' echo; run_mlr -n put -v 'begin{@x=1;@y=2;}' echo; run_mlr -n put -v 'begin{@x=1;@y=2;} $z=3' echo; run_mlr -n put -v 'begin{@x=1;@y=2;} $z=3;' # disallow in the CST builder # mlr -n put -v 'begin{end{}}' echo; run_mlr -n put -v 'if (NR == 1) { $z = 100 }' echo; run_mlr -n put -v 'if (NR == 1) { $z = 100 } else { $z = 900 }' echo; run_mlr -n put -v 'if (NR == 1) { $z = 100 } elif (NR == 2) { $z = 200 }' echo; run_mlr -n put -v 'if (NR == 1) { $z = 100 } elif (NR == 2) { $z = 200 } else { $z = 900 }' echo; run_mlr -n put -v 'if (NR == 1) { $z = 100 } elif (NR == 2) { $z = 200 } elif (NR == 3) { $z = 300 } else { $z = 900 }' echo; run_mlr -n put -v 'for (k in $*) { emit { k : k } }' echo; run_mlr -n put -v 'begin {}' echo; run_mlr -n put -v 'begin {1}' echo; run_mlr -n put -v 'end {}' echo; run_mlr -n put -v 'end {1}' echo; run_mlr -n put -v 'if (1) {}' echo; run_mlr -n put -v 'if (1) {2}' echo; run_mlr -n put -v 'for (k in $*) {}' echo; run_mlr -n put -v 'for (k in $*) {2}' echo; run_mlr -n put -v 'while (false) {}' echo; run_mlr -n put -v 'do {} while (false)'