mirror of
https://github.com/johnkerl/miller.git
synced 2026-01-23 02:14:13 +00:00
580 lines
25 KiB
Bash
Executable file
580 lines
25 KiB
Bash
Executable file
#!/bin/sh
|
|
|
|
# NEEDING COVERAGE:
|
|
# group-like
|
|
# head
|
|
# sort
|
|
# tail
|
|
# top
|
|
# uniq
|
|
|
|
# I/O
|
|
|
|
# ================================================================
|
|
set -e
|
|
|
|
# For building with autoconf:
|
|
# * in-directory build:
|
|
# pwd is /path/to/the/tree/c/reg_test
|
|
# path to mlr is /path/to/the/tree/c/mlr
|
|
# path to reg_test/run is /path/to/the/tree/c/reg_test/run
|
|
#
|
|
# * out-of-directory ("VPATH") build:
|
|
# pwd is /path/to/build/tree/c/reg_test
|
|
# path to mlr is /path/to/build/tree/c/mlr
|
|
# path to reg_test/run is /path/to/source/tree/c/reg_test/run
|
|
|
|
# For building without autoconf:
|
|
# pwd is /does/not/matter
|
|
# path to mlr is /path/to/the/tree/c/mlr
|
|
# path to reg_test/run is /path/to/the/tree/c/reg_test/run
|
|
|
|
ourdir=`dirname $0`
|
|
srcdir=$ourdir/../..
|
|
pwd=`pwd`
|
|
|
|
try1=$pwd/../mlr # For autoconf builds, in-tree or out-of-tree
|
|
try2=$srcdir/c/mlr # For non-autoconf builds
|
|
if [ -x "$try1" ]; then
|
|
path_to_mlr=$try1
|
|
elif [ -x "$try2" ]; then
|
|
path_to_mlr=$try2
|
|
else
|
|
echo "$0: Could not find path to mlr executable." 1>&2
|
|
echo "Try 1: $try1" 1>&2
|
|
echo "Try 2: $try2" 1>&2
|
|
exit 1
|
|
fi
|
|
echo Using mlr executable $path_to_mlr
|
|
|
|
indir=$ourdir/input
|
|
expdir=$ourdir/expected
|
|
outdir=$pwd/output
|
|
mkdir -p $outdir
|
|
|
|
rm -f $outdir/out
|
|
touch $outdir/out
|
|
echo
|
|
|
|
num_passed=0
|
|
|
|
announce() {
|
|
echo >> $outdir/out
|
|
echo "================================================================" >> $outdir/out
|
|
echo "$@" >> $outdir/out
|
|
echo >> $outdir/out
|
|
}
|
|
|
|
# A key feature of this regression script is that it can be invoked from any
|
|
# directory. Depending on the directory it's invoked from, the path to the mlr
|
|
# executable may vary. Nonetheless for debugging it's crucial that we echo out
|
|
# each command being executed. See also diff -I below.
|
|
run_mlr() {
|
|
# Use just "mlr" for info messages
|
|
echo mlr "$@"
|
|
echo mlr "$@" >> $outdir/out
|
|
# Use path to mlr for invoking the command
|
|
$path_to_mlr "$@" >> $outdir/out
|
|
echo >> $outdir/out
|
|
# since set -e
|
|
num_passed=`expr $num_passed + 1`
|
|
}
|
|
|
|
# ================================================================
|
|
announce STATELESS MAPPERS
|
|
|
|
run_mlr cat $indir/abixy
|
|
run_mlr cat /dev/null
|
|
|
|
run_mlr cut -f a,x $indir/abixy
|
|
run_mlr cut --complement -f a,x $indir/abixy
|
|
|
|
run_mlr having-fields --at-least a,b $indir/abixy
|
|
run_mlr having-fields --at-least a,c $indir/abixy
|
|
run_mlr having-fields --at-least a,b,i,x,y $indir/abixy
|
|
run_mlr having-fields --which-are a,b,i,x $indir/abixy
|
|
run_mlr having-fields --which-are a,b,i,x,y $indir/abixy
|
|
run_mlr having-fields --which-are a,b,i,y,x $indir/abixy
|
|
run_mlr having-fields --which-are a,b,i,x,w $indir/abixy
|
|
run_mlr having-fields --which-are a,b,i,x,y,z $indir/abixy
|
|
run_mlr having-fields --at-most a,c $indir/abixy
|
|
run_mlr having-fields --at-most a,b,i,x,y $indir/abixy
|
|
run_mlr having-fields --at-most a,b,i,x,y,z $indir/abixy
|
|
|
|
run_mlr having-fields --all-matching '"^[a-z][a-z][a-z]$"' $indir/having-fields-regex.dkvp
|
|
run_mlr having-fields --any-matching '"^[a-z][a-z][a-z]$"' $indir/having-fields-regex.dkvp
|
|
run_mlr having-fields --none-matching '"^[a-z][a-z][a-z]$"' $indir/having-fields-regex.dkvp
|
|
run_mlr having-fields --all-matching '"^[a-z][a-z][a-z]$"i' $indir/having-fields-regex.dkvp
|
|
run_mlr having-fields --any-matching '"^[a-z][a-z][a-z]$"i' $indir/having-fields-regex.dkvp
|
|
run_mlr having-fields --none-matching '"^[a-z][a-z][a-z]$"i' $indir/having-fields-regex.dkvp
|
|
|
|
run_mlr rename b,BEE,x,EKS $indir/abixy
|
|
run_mlr rename nonesuch,nonesuch,x,EKS $indir/abixy
|
|
|
|
run_mlr regularize $indir/regularize.dkvp
|
|
|
|
# ----------------------------------------------------------------
|
|
announce TRIVIAL RETAINERS
|
|
|
|
run_mlr group-by a $indir/abixy
|
|
run_mlr group-by a,b $indir/abixy
|
|
|
|
run_mlr group-like $indir/het.dkvp
|
|
|
|
run_mlr tac $indir/abixy
|
|
run_mlr tac /dev/null
|
|
|
|
# ----------------------------------------------------------------
|
|
announce SORT
|
|
|
|
run_mlr sort -f a $indir/abixy
|
|
run_mlr sort -r a $indir/abixy
|
|
run_mlr sort -f x $indir/abixy
|
|
run_mlr sort -r x $indir/abixy
|
|
run_mlr sort -nf x $indir/abixy
|
|
run_mlr sort -nr x $indir/abixy
|
|
|
|
run_mlr sort -f a,b $indir/abixy
|
|
run_mlr sort -r a,b $indir/abixy
|
|
run_mlr sort -f x,y $indir/abixy
|
|
run_mlr sort -r x,y $indir/abixy
|
|
run_mlr sort -nf x,y $indir/abixy
|
|
run_mlr sort -nr x,y $indir/abixy
|
|
|
|
run_mlr sort -f a -nr x $indir/abixy
|
|
run_mlr sort -nr y -f a $indir/abixy
|
|
run_mlr sort -f a -r b -nf x -nr y $indir/abixy
|
|
|
|
# ----------------------------------------------------------------
|
|
announce JOIN
|
|
|
|
run_mlr --opprint join -f $indir/joina.dkvp -l l -r r -j o $indir/joinb.dkvp
|
|
run_mlr --opprint join -u -f $indir/joina.dkvp -l l -r r -j o $indir/joinb.dkvp
|
|
|
|
run_mlr --opprint join --ul -f $indir/joina.dkvp -l l -r r -j o $indir/joinb.dkvp
|
|
run_mlr --opprint join -u --ul -f $indir/joina.dkvp -l l -r r -j o $indir/joinb.dkvp
|
|
|
|
run_mlr --opprint join --ur -f $indir/joina.dkvp -l l -r r -j o $indir/joinb.dkvp
|
|
run_mlr --opprint join -u --ur -f $indir/joina.dkvp -l l -r r -j o $indir/joinb.dkvp
|
|
|
|
run_mlr --opprint join --ul --ur -f $indir/joina.dkvp -l l -r r -j o $indir/joinb.dkvp
|
|
run_mlr --opprint join -u --ul --ur -f $indir/joina.dkvp -l l -r r -j o $indir/joinb.dkvp
|
|
|
|
run_mlr --opprint join --np --ul -f $indir/joina.dkvp -l l -r r -j o $indir/joinb.dkvp
|
|
run_mlr --opprint join -u --np --ul -f $indir/joina.dkvp -l l -r r -j o $indir/joinb.dkvp
|
|
|
|
run_mlr --opprint join --np --ur -f $indir/joina.dkvp -l l -r r -j o $indir/joinb.dkvp
|
|
run_mlr --opprint join -u --np --ur -f $indir/joina.dkvp -l l -r r -j o $indir/joinb.dkvp
|
|
|
|
run_mlr --opprint join --np --ul --ur -f $indir/joina.dkvp -l l -r r -j o $indir/joinb.dkvp
|
|
run_mlr --opprint join -u --np --ul --ur -f $indir/joina.dkvp -l l -r r -j o $indir/joinb.dkvp
|
|
|
|
|
|
run_mlr --opprint join -f /dev/null -l l -r r -j o $indir/joinb.dkvp
|
|
run_mlr --opprint join -u -f /dev/null -l l -r r -j o $indir/joinb.dkvp
|
|
|
|
run_mlr --opprint join --ul -f /dev/null -l l -r r -j o $indir/joinb.dkvp
|
|
run_mlr --opprint join -u --ul -f /dev/null -l l -r r -j o $indir/joinb.dkvp
|
|
|
|
run_mlr --opprint join --ur -f /dev/null -l l -r r -j o $indir/joinb.dkvp
|
|
run_mlr --opprint join -u --ur -f /dev/null -l l -r r -j o $indir/joinb.dkvp
|
|
|
|
run_mlr --opprint join --ul --ur -f /dev/null -l l -r r -j o $indir/joinb.dkvp
|
|
run_mlr --opprint join -u --ul --ur -f /dev/null -l l -r r -j o $indir/joinb.dkvp
|
|
|
|
run_mlr --opprint join --np --ul -f /dev/null -l l -r r -j o $indir/joinb.dkvp
|
|
run_mlr --opprint join -u --np --ul -f /dev/null -l l -r r -j o $indir/joinb.dkvp
|
|
|
|
run_mlr --opprint join --np --ur -f /dev/null -l l -r r -j o $indir/joinb.dkvp
|
|
run_mlr --opprint join -u --np --ur -f /dev/null -l l -r r -j o $indir/joinb.dkvp
|
|
|
|
run_mlr --opprint join --np --ul --ur -f /dev/null -l l -r r -j o $indir/joinb.dkvp
|
|
run_mlr --opprint join -u --np --ul --ur -f /dev/null -l l -r r -j o $indir/joinb.dkvp
|
|
|
|
|
|
run_mlr --opprint join -f $indir/joina.dkvp -l l -r r -j o /dev/null
|
|
run_mlr --opprint join -u -f $indir/joina.dkvp -l l -r r -j o /dev/null
|
|
|
|
run_mlr --opprint join --ul -f $indir/joina.dkvp -l l -r r -j o /dev/null
|
|
run_mlr --opprint join -u --ul -f $indir/joina.dkvp -l l -r r -j o /dev/null
|
|
|
|
run_mlr --opprint join --ur -f $indir/joina.dkvp -l l -r r -j o /dev/null
|
|
run_mlr --opprint join -u --ur -f $indir/joina.dkvp -l l -r r -j o /dev/null
|
|
|
|
run_mlr --opprint join --ul --ur -f $indir/joina.dkvp -l l -r r -j o /dev/null
|
|
run_mlr --opprint join -u --ul --ur -f $indir/joina.dkvp -l l -r r -j o /dev/null
|
|
|
|
run_mlr --opprint join --np --ul -f $indir/joina.dkvp -l l -r r -j o /dev/null
|
|
run_mlr --opprint join -u --np --ul -f $indir/joina.dkvp -l l -r r -j o /dev/null
|
|
|
|
run_mlr --opprint join --np --ur -f $indir/joina.dkvp -l l -r r -j o /dev/null
|
|
run_mlr --opprint join -u --np --ur -f $indir/joina.dkvp -l l -r r -j o /dev/null
|
|
|
|
run_mlr --opprint join --np --ul --ur -f $indir/joina.dkvp -l l -r r -j o /dev/null
|
|
run_mlr --opprint join -u --np --ul --ur -f $indir/joina.dkvp -l l -r r -j o /dev/null
|
|
|
|
# ----------------------------------------------------------------
|
|
announce STATS
|
|
run_mlr count-distinct -f a,b $indir/small $indir/abixy
|
|
|
|
run_mlr --opprint stats1 -a mean,sum,count,min,max,mode -f i,x,y $indir/abixy
|
|
run_mlr --opprint stats1 -a min,p10,p50,mode,p90,max -f i,x,y $indir/abixy
|
|
run_mlr --opprint stats1 -a mean,meaneb,stddev -f i,x,y $indir/abixy
|
|
run_mlr --opprint stats1 -s -a mean,sum,count,min,max,mode -f i,x,y $indir/abixy
|
|
|
|
run_mlr --opprint stats1 -a mean,sum,count,min,max,mode -f i,x,y -g a $indir/abixy
|
|
run_mlr --opprint stats1 -a min,p10,p50,mode,p90,max -f i,x,y -g a $indir/abixy
|
|
run_mlr --opprint stats1 -a mean,meaneb,stddev -f i,x,y -g a $indir/abixy
|
|
run_mlr --opprint stats1 -s -a mean,sum,count,min,max,mode -f i,x,y -g a $indir/abixy
|
|
|
|
run_mlr --opprint stats1 -a mean,sum,count,min,max,mode -f i,x,y -g a,b $indir/abixy
|
|
run_mlr --opprint stats1 -a min,p10,p50,mode,p90,max -f i,x,y -g a,b $indir/abixy
|
|
run_mlr --opprint stats1 -a mean,meaneb,stddev -f i,x,y -g a,b $indir/abixy
|
|
run_mlr --opprint stats1 -s -a mean,sum,count,min,max,mode -f i,x,y -g a,b $indir/abixy
|
|
|
|
run_mlr --opprint stats2 -a linreg-ols,linreg-pca,r2,corr,cov -f x,y,xy,y2,x2,x2 $indir/abixy-wide
|
|
run_mlr --opprint stats2 -a linreg-ols,linreg-pca,r2,corr,cov -f x,y,xy,y2,x2,x2 -g a,b $indir/abixy-wide
|
|
run_mlr --oxtab stats2 -s -a linreg-ols,linreg-pca,r2,corr,cov -f x,y,xy,y2,x2,x2 $indir/abixy-wide-short
|
|
run_mlr --oxtab stats2 -s -a linreg-ols,linreg-pca,r2,corr,cov -f x,y,xy,y2,x2,x2 -g a,b $indir/abixy-wide-short
|
|
|
|
run_mlr --opprint step -a rsum,delta,counter -f x,y $indir/abixy
|
|
run_mlr --opprint step -a rsum,delta,counter -f x,y -g a $indir/abixy
|
|
|
|
run_mlr --opprint histogram -f x,y --lo 0 --hi 1 --nbins 20 $indir/small
|
|
|
|
# ----------------------------------------------------------------
|
|
announce DSLs
|
|
|
|
run_mlr filter '$x>.3' $indir/abixy
|
|
run_mlr filter '$x>0.3' $indir/abixy
|
|
run_mlr filter '$x>0.3 && $y>0.3' $indir/abixy
|
|
run_mlr filter '$x>0.3 || $y>0.3' $indir/abixy
|
|
run_mlr filter 'NR>=4 && NR <= 7' $indir/abixy
|
|
# xxx more ...
|
|
|
|
run_mlr filter '$nosuchfield>.3' $indir/abixy
|
|
|
|
run_mlr put '$x2 = $x**2' $indir/abixy
|
|
run_mlr put '$z = -0.024*$x+0.13' $indir/abixy
|
|
run_mlr put '$c = $a . $b' $indir/abixy
|
|
|
|
run_mlr --opprint put '$nr=NR;$fnr=FNR;$nf=NF;$filenum=FILENUM' $indir/abixy $indir/abixy
|
|
|
|
announce OPERATOR PRECEDENCE AND ASSOCIATIVITY
|
|
|
|
# filter -v and put -v print the AST
|
|
run_mlr put -v '$x=$a+$b+$c' /dev/null
|
|
run_mlr put -v '$x=$a+$b-$c' /dev/null
|
|
run_mlr put -v '$x=$a-$b-$c' /dev/null
|
|
run_mlr put -v '$x=$a-$b+$c' /dev/null
|
|
|
|
run_mlr put -v '$x=$a*$b*$c' /dev/null
|
|
run_mlr put -v '$x=$a*$b/$c' /dev/null
|
|
run_mlr put -v '$x=$a/$b/$c' /dev/null
|
|
run_mlr put -v '$x=$a/$b*$c' /dev/null
|
|
|
|
run_mlr put -v '$x=$a+$b+$c' /dev/null
|
|
run_mlr put -v '$x=$a+$b*$c' /dev/null
|
|
run_mlr put -v '$x=$a*$b*$c' /dev/null
|
|
run_mlr put -v '$x=$a*$b+$c' /dev/null
|
|
|
|
run_mlr put -v '$x=$a+$b+$c' /dev/null
|
|
run_mlr put -v '$x=$a+$b**$c' /dev/null
|
|
run_mlr put -v '$x=$a**$b**$c' /dev/null
|
|
run_mlr put -v '$x=$a**$b+$c' /dev/null
|
|
|
|
run_mlr put -v '$x=$a.$b.$c' /dev/null
|
|
|
|
run_mlr put -v '$x=-$a+$b*$c' /dev/null
|
|
run_mlr put -v '$x=-$a*$b+$c' /dev/null
|
|
run_mlr put -v '$x=$a+-$b*$c' /dev/null
|
|
run_mlr put -v '$x=$a*-$b+$c' /dev/null
|
|
run_mlr put -v '$x=$a+$b*-$c' /dev/null
|
|
run_mlr put -v '$x=$a*$b+-$c' /dev/null
|
|
|
|
|
|
run_mlr filter -v '$a==1 && $b == 1 && $c == 1' /dev/null
|
|
run_mlr filter -v '$a==1 || $b == 1 && $c == 1' /dev/null
|
|
run_mlr filter -v '$a==1 || $b == 1 || $c == 1' /dev/null
|
|
run_mlr filter -v '$a==1 && $b == 1 || $c == 1' /dev/null
|
|
|
|
run_mlr filter -v '$x<$a*$b*$c' /dev/null
|
|
run_mlr filter -v '$x<$a*$b/$c' /dev/null
|
|
run_mlr filter -v '$x<$a/$b/$c' /dev/null
|
|
run_mlr filter -v '$x<$a/$b*$c' /dev/null
|
|
|
|
run_mlr filter -v '$x<$a+$b+$c' /dev/null
|
|
run_mlr filter -v '$x<$a+$b*$c' /dev/null
|
|
run_mlr filter -v '$x<$a*$b*$c' /dev/null
|
|
run_mlr filter -v '$x<$a*$b+$c' /dev/null
|
|
|
|
run_mlr filter -v '$x<$a+$b+$c' /dev/null
|
|
run_mlr filter -v '$x<$a+$b**$c' /dev/null
|
|
run_mlr filter -v '$x<$a**$b**$c' /dev/null
|
|
run_mlr filter -v '$x<$a**$b+$c' /dev/null
|
|
|
|
run_mlr filter -v '$x<$a.$b.$c' /dev/null
|
|
|
|
run_mlr filter -v '$x<-$a+$b*$c' /dev/null
|
|
run_mlr filter -v '$x<-$a*$b+$c' /dev/null
|
|
run_mlr filter -v '$x<$a+-$b*$c' /dev/null
|
|
run_mlr filter -v '$x<$a*-$b+$c' /dev/null
|
|
run_mlr filter -v '$x<$a+$b*-$c' /dev/null
|
|
run_mlr filter -v '$x<$a*$b+-$c' /dev/null
|
|
|
|
run_mlr filter -v '$x =~ "bcd"' $indir/regex.dkvp
|
|
run_mlr filter -v '$x =~ "^bcd"' $indir/regex.dkvp
|
|
run_mlr filter -v '$x =~ "^abc"' $indir/regex.dkvp
|
|
run_mlr filter -v '$x =~ "^abc$"' $indir/regex.dkvp
|
|
run_mlr filter -v '$x =~ "^a.*d$"' $indir/regex.dkvp
|
|
run_mlr filter -v '$x =~ "^a.*"."d$"' $indir/regex.dkvp
|
|
run_mlr filter -v '$y =~ "\".."' $indir/regex.dkvp
|
|
|
|
run_mlr filter -v '$x =~ "bcd"i' $indir/regex.dkvp
|
|
run_mlr filter -v '$x =~ "^bcd"i' $indir/regex.dkvp
|
|
run_mlr filter -v '$x =~ "^abc"i' $indir/regex.dkvp
|
|
run_mlr filter -v '$x =~ "^abc$"i' $indir/regex.dkvp
|
|
run_mlr filter -v '$x =~ "^a.*d$"i' $indir/regex.dkvp
|
|
run_mlr filter -v '$x =~ "^a.*"."d$"i' $indir/regex.dkvp
|
|
|
|
run_mlr --csvlite put '$gmt=sec2gmt($sec)' $indir/sec2gmt
|
|
run_mlr --csvlite put '$sec=gmt2sec($gmt)' $indir/gmt2sec
|
|
|
|
run_mlr put '$z=min($x, $y)' $indir/minmax.dkvp
|
|
run_mlr put '$z=max($x, $y)' $indir/minmax.dkvp
|
|
|
|
run_mlr --opprint put '$hms=sec2hms($sec); $resec=hms2sec($hms); $diff=$resec-$sec' $indir/sec2xhms
|
|
run_mlr --opprint put '$hms=fsec2hms($sec); $resec=hms2fsec($hms); $diff=$resec-$sec' $indir/fsec2xhms
|
|
run_mlr --opprint put '$hms=sec2dhms($sec); $resec=dhms2sec($hms); $diff=$resec-$sec' $indir/sec2xhms
|
|
run_mlr --opprint put '$hms=fsec2dhms($sec); $resec=dhms2fsec($hms); $diff=$resec-$sec' $indir/fsec2xhms
|
|
|
|
announce SUB/GSUB
|
|
|
|
run_mlr --opprint put '$y = sub($x, "e.*l", "y123y")' $indir/sub.dat
|
|
run_mlr --opprint put '$y = sub($x, "e.*l"i, "y123y")' $indir/sub.dat
|
|
run_mlr --opprint put '$y = sub($x, "e.*"."l", "y123y")' $indir/sub.dat
|
|
|
|
# ----------------------------------------------------------------
|
|
announce CHAINING
|
|
|
|
run_mlr cat then cat $indir/short
|
|
run_mlr cat then tac $indir/short
|
|
run_mlr tac then cat $indir/short
|
|
run_mlr tac then tac $indir/short
|
|
|
|
run_mlr cat then cat then cat $indir/short
|
|
run_mlr cat then cat then tac $indir/short
|
|
run_mlr cat then tac then cat $indir/short
|
|
run_mlr cat then tac then tac $indir/short
|
|
run_mlr tac then cat then cat $indir/short
|
|
run_mlr tac then cat then tac $indir/short
|
|
run_mlr tac then tac then cat $indir/short
|
|
run_mlr tac then tac then tac $indir/short
|
|
|
|
# ----------------------------------------------------------------
|
|
announce NUMBER FORMATTING
|
|
|
|
run_mlr --opprint stats1 -a sum -f x $indir/ofmt.dat
|
|
run_mlr --ofmt '%.3lf' --opprint stats1 -a sum -f x $indir/ofmt.dat
|
|
run_mlr --opprint --ofmt '%.3lf' stats1 -a sum -f x $indir/ofmt.dat
|
|
|
|
# ----------------------------------------------------------------
|
|
announce HET-CSV INPUT
|
|
|
|
run_mlr --icsvlite --odkvp cat $indir/a.csv
|
|
run_mlr --icsvlite --odkvp cat $indir/b.csv
|
|
run_mlr --icsvlite --odkvp cat $indir/c.csv
|
|
run_mlr --icsvlite --odkvp cat $indir/d.csv
|
|
run_mlr --icsvlite --odkvp cat $indir/e.csv
|
|
run_mlr --icsvlite --odkvp cat $indir/f.csv
|
|
run_mlr --icsvlite --odkvp cat $indir/g.csv
|
|
|
|
run_mlr --icsvlite --odkvp cat $indir/a.csv $indir/a.csv
|
|
run_mlr --icsvlite --odkvp cat $indir/b.csv $indir/b.csv
|
|
run_mlr --icsvlite --odkvp cat $indir/c.csv $indir/c.csv
|
|
run_mlr --icsvlite --odkvp cat $indir/d.csv $indir/d.csv
|
|
run_mlr --icsvlite --odkvp cat $indir/e.csv $indir/e.csv
|
|
run_mlr --icsvlite --odkvp cat $indir/f.csv $indir/f.csv
|
|
run_mlr --icsvlite --odkvp cat $indir/g.csv $indir/g.csv
|
|
|
|
run_mlr --icsvlite --odkvp cat $indir/a.csv $indir/b.csv
|
|
run_mlr --icsvlite --odkvp cat $indir/b.csv $indir/c.csv
|
|
run_mlr --icsvlite --odkvp cat $indir/c.csv $indir/d.csv
|
|
run_mlr --icsvlite --odkvp cat $indir/d.csv $indir/e.csv
|
|
run_mlr --icsvlite --odkvp cat $indir/e.csv $indir/f.csv
|
|
run_mlr --icsvlite --odkvp cat $indir/f.csv $indir/g.csv
|
|
|
|
run_mlr --icsvlite --odkvp cat $indir/a.csv $indir/b.csv \
|
|
$indir/c.csv $indir/d.csv $indir/e.csv $indir/f.csv $indir/g.csv
|
|
|
|
run_mlr --icsvlite --odkvp tac $indir/het.csv
|
|
|
|
# ----------------------------------------------------------------
|
|
announce HET-PPRINT INPUT
|
|
|
|
run_mlr --ipprint --odkvp cat $indir/a.pprint
|
|
run_mlr --ipprint --odkvp cat $indir/b.pprint
|
|
run_mlr --ipprint --odkvp cat $indir/c.pprint
|
|
run_mlr --ipprint --odkvp cat $indir/d.pprint
|
|
run_mlr --ipprint --odkvp cat $indir/e.pprint
|
|
run_mlr --ipprint --odkvp cat $indir/f.pprint
|
|
run_mlr --ipprint --odkvp cat $indir/g.pprint
|
|
|
|
run_mlr --ipprint --odkvp cat $indir/a.pprint $indir/a.pprint
|
|
run_mlr --ipprint --odkvp cat $indir/b.pprint $indir/b.pprint
|
|
run_mlr --ipprint --odkvp cat $indir/c.pprint $indir/c.pprint
|
|
run_mlr --ipprint --odkvp cat $indir/d.pprint $indir/d.pprint
|
|
run_mlr --ipprint --odkvp cat $indir/e.pprint $indir/e.pprint
|
|
run_mlr --ipprint --odkvp cat $indir/f.pprint $indir/f.pprint
|
|
run_mlr --ipprint --odkvp cat $indir/g.pprint $indir/g.pprint
|
|
|
|
run_mlr --ipprint --odkvp cat $indir/a.pprint $indir/b.pprint
|
|
run_mlr --ipprint --odkvp cat $indir/b.pprint $indir/c.pprint
|
|
run_mlr --ipprint --odkvp cat $indir/c.pprint $indir/d.pprint
|
|
run_mlr --ipprint --odkvp cat $indir/d.pprint $indir/e.pprint
|
|
run_mlr --ipprint --odkvp cat $indir/e.pprint $indir/f.pprint
|
|
run_mlr --ipprint --odkvp cat $indir/f.pprint $indir/g.pprint
|
|
|
|
run_mlr --ipprint --odkvp cat $indir/a.pprint $indir/b.pprint \
|
|
$indir/c.pprint $indir/d.pprint $indir/e.pprint $indir/f.pprint $indir/g.pprint
|
|
|
|
# ================================================================
|
|
announce NULL-FIELD INPUT
|
|
|
|
run_mlr --icsvlite --odkvp cat $indir/null-fields.csv
|
|
run_mlr --inidx --ifs comma --odkvp cat $indir/null-fields.nidx
|
|
run_mlr --idkvp --oxtab cat $indir/missings.dkvp
|
|
|
|
# ================================================================
|
|
announce SPACE-PADDING
|
|
|
|
run_mlr --mmap --idkvp --odkvp --ifs space --repifs cat $indir/space-pad.dkvp
|
|
run_mlr --no-mmap --idkvp --odkvp --ifs space --repifs cat $indir/space-pad.dkvp
|
|
run_mlr --mmap --inidx --odkvp --ifs space --repifs cat $indir/space-pad.nidx
|
|
run_mlr --no-mmap --inidx --odkvp --ifs space --repifs cat $indir/space-pad.nidx
|
|
run_mlr --mmap --icsvlite --odkvp --ifs space --repifs cat $indir/space-pad.pprint
|
|
run_mlr --no-mmap --icsvlite --odkvp --ifs space --repifs cat $indir/space-pad.pprint
|
|
|
|
# ================================================================
|
|
announce DOUBLE PS
|
|
|
|
run_mlr --no-mmap --opprint cat $indir/double-ps.dkvp
|
|
run_mlr --mmap --opprint cat $indir/double-ps.dkvp
|
|
|
|
# ================================================================
|
|
announce MISSING FINAL LF
|
|
|
|
run_mlr --no-mmap --csvlite cat $indir/truncated.csv
|
|
run_mlr --csvlite cat $indir/truncated.csv
|
|
run_mlr --no-mmap --dkvp cat $indir/truncated.dkvp
|
|
run_mlr --dkvp cat $indir/truncated.dkvp
|
|
run_mlr --no-mmap --nidx cat $indir/truncated.nidx
|
|
run_mlr --nidx cat $indir/truncated.nidx
|
|
run_mlr --no-mmap --pprint cat $indir/truncated.pprint
|
|
run_mlr --pprint cat $indir/truncated.pprint
|
|
run_mlr --no-mmap --xtab cat $indir/truncated.xtab
|
|
run_mlr --xtab cat $indir/truncated.xtab
|
|
|
|
# ================================================================
|
|
announce UTF-8 alignment
|
|
|
|
run_mlr --icsvlite --opprint cat $indir/utf8-1.csv
|
|
run_mlr --icsvlite --opprint cat $indir/utf8-2.csv
|
|
run_mlr --icsvlite --oxtab cat $indir/utf8-1.csv
|
|
run_mlr --icsvlite --oxtab cat $indir/utf8-2.csv
|
|
|
|
run_mlr --inidx --ifs space --opprint cat $indir/utf8-align.nidx
|
|
run_mlr --inidx --ifs space --opprint --right cat $indir/utf8-align.nidx
|
|
run_mlr --oxtab cat $indir/utf8-align.dkvp
|
|
|
|
# ================================================================
|
|
announce STDIN
|
|
|
|
run_mlr --csv cat < $indir/rfc-csv/simple.csv
|
|
|
|
# ================================================================
|
|
announce RFC-CSV
|
|
|
|
run_mlr --csv cat $indir/rfc-csv/simple.csv
|
|
run_mlr --csv cat $indir/rfc-csv/simple-truncated.csv
|
|
run_mlr --csv cat $indir/rfc-csv/narrow.csv
|
|
run_mlr --csv cat $indir/rfc-csv/narrow-truncated.csv
|
|
run_mlr --csv cat $indir/rfc-csv/quoted-comma.csv
|
|
run_mlr --csv cat $indir/rfc-csv/quoted-comma-truncated.csv
|
|
run_mlr --csv cat $indir/rfc-csv/quoted-crlf.csv
|
|
run_mlr --csv cat $indir/rfc-csv/quoted-crlf-truncated.csv
|
|
run_mlr --csv cat $indir/rfc-csv/simple-truncated.csv $indir/rfc-csv/simple.csv
|
|
run_mlr --csv --ifs semicolon --ofs pipe --irs lf --ors lflf cut -x -f b $indir/rfc-csv/modify-defaults.csv
|
|
|
|
# ================================================================
|
|
announce MULTI-CHARACTER IRS/IFS/IPS FOR DKVP
|
|
|
|
run_mlr --oxtab --idkvp --mmap --irs lf --ifs , --ips = cut -o -f x,a,i $indir/multi-sep.dkvp
|
|
run_mlr --oxtab --idkvp --mmap --irs lf --ifs /, --ips =: cut -o -f x,a,i $indir/multi-sep.dkvp
|
|
run_mlr --oxtab --idkvp --mmap --irs crlf --ifs , --ips = cut -o -f x,a,i $indir/multi-sep.dkvp
|
|
run_mlr --oxtab --idkvp --mmap --irs crlf --ifs /, --ips =: cut -o -f x,a,i $indir/multi-sep.dkvp
|
|
|
|
run_mlr --oxtab --no-mmap --irs lf --ifs , --ips = cut -o -f x,a,i $indir/multi-sep.dkvp
|
|
run_mlr --oxtab --no-mmap --irs lf --ifs /, --ips =: cut -o -f x,a,i $indir/multi-sep.dkvp
|
|
run_mlr --oxtab --no-mmap --irs crlf --ifs , --ips = cut -o -f x,a,i $indir/multi-sep.dkvp
|
|
run_mlr --oxtab --no-mmap --irs crlf --ifs /, --ips =: cut -o -f x,a,i $indir/multi-sep.dkvp
|
|
|
|
# ================================================================
|
|
announce MULTI-CHARACTER IRS/IFS FOR NIDX
|
|
|
|
run_mlr --oxtab --inidx --mmap --irs lf --ifs , cut -o -f 4,1,3 $indir/multi-sep.dkvp
|
|
run_mlr --oxtab --inidx --mmap --irs lf --ifs /, cut -o -f 4,1,3 $indir/multi-sep.dkvp
|
|
run_mlr --oxtab --inidx --mmap --irs crlf --ifs , cut -o -f 4,1,3 $indir/multi-sep.dkvp
|
|
run_mlr --oxtab --inidx --mmap --irs crlf --ifs /, cut -o -f 4,1,3 $indir/multi-sep.dkvp
|
|
|
|
run_mlr --oxtab --inidx --no-mmap --irs lf --ifs , cut -o -f 4,1,3 $indir/multi-sep.dkvp
|
|
run_mlr --oxtab --inidx --no-mmap --irs lf --ifs /, cut -o -f 4,1,3 $indir/multi-sep.dkvp
|
|
run_mlr --oxtab --inidx --no-mmap --irs crlf --ifs , cut -o -f 4,1,3 $indir/multi-sep.dkvp
|
|
run_mlr --oxtab --inidx --no-mmap --irs crlf --ifs /, cut -o -f 4,1,3 $indir/multi-sep.dkvp
|
|
|
|
# ================================================================
|
|
announce MULTI-CHARACTER IRS/IFS FOR CSVLITE
|
|
|
|
run_mlr --oxtab --icsvlite --mmap --irs lf --ifs , cut -o -f x/,a/,i/ $indir/multi-sep.csvl
|
|
run_mlr --oxtab --icsvlite --mmap --irs lf --ifs /, cut -o -f x,a,i $indir/multi-sep.csvl
|
|
run_mlr --oxtab --icsvlite --mmap --irs crlf --ifs , cut -o -f x/,a/,i/ $indir/multi-sep.csvl
|
|
run_mlr --oxtab --icsvlite --mmap --irs crlf --ifs /, cut -o -f x,a,i $indir/multi-sep.csvl
|
|
|
|
run_mlr --oxtab --icsvlite --no-mmap --irs lf --ifs , cut -o -f x/,a/,i/ $indir/multi-sep.csvl
|
|
run_mlr --oxtab --icsvlite --no-mmap --irs lf --ifs /, cut -o -f x,a,i $indir/multi-sep.csvl
|
|
run_mlr --oxtab --icsvlite --no-mmap --irs crlf --ifs , cut -o -f x/,a/,i/ $indir/multi-sep.csvl
|
|
run_mlr --oxtab --icsvlite --no-mmap --irs crlf --ifs /, cut -o -f x,a,i $indir/multi-sep.csvl
|
|
|
|
# ================================================================
|
|
announce MULTI-CHARACTER SEPARATORS FOR XTAB
|
|
|
|
run_mlr --mmap --xtab --ifs crlf --ofs Z cut -x -f b $indir/truncated.xtab-crlf
|
|
run_mlr --no-mmap --xtab --ifs crlf --ofs Z cut -x -f b $indir/truncated.xtab-crlf
|
|
run_mlr --mmap --xtab --ips . --ops @ cut -x -f b $indir/dots.xtab
|
|
run_mlr --no-mmap --xtab --ips . --ops @ cut -x -f b $indir/dots.xtab
|
|
run_mlr --no-mmap --xtab --ips . --ops := cut -x -f b $indir/dots.xtab
|
|
run_mlr --xtab --ips ": " --ops '@@@@' put '$sum=int($a+$b)' $indir/multi-ips.dkvp
|
|
|
|
# ================================================================
|
|
announce MULTI-CHARACTER IRS FOR PPRINT
|
|
|
|
run_mlr --mmap --pprint --irs crlf --ifs / --ofs @ cut -x -f b $indir/dots.pprint
|
|
run_mlr --no-mmap --pprint --irs crlf --ifs / --ofs @ cut -x -f b $indir/dots.pprint
|
|
|
|
# ================================================================
|
|
announce MULTI-CHARACTER IXS SPECIFIERS
|
|
|
|
run_mlr --oxtab --idkvp --mmap --irs lf --ifs '\x2c' --ips '\075' cut -o -f x,a,i $indir/multi-sep.dkvp
|
|
run_mlr --oxtab --idkvp --mmap --irs lf --ifs /, --ips '\x3d\x3a' cut -o -f x,a,i $indir/multi-sep.dkvp
|
|
|
|
# ================================================================
|
|
# A key feature of this regression script is that it can be invoked from any
|
|
# directory. Depending on the directory it's invoked from, the path to $outdir
|
|
# may vary. Nonetheless for debugging it's crucial that we echo out each
|
|
# command being executed -- here we use diff -I to skip the info lines and
|
|
# focus the test on program output per se.
|
|
diff -I '^mlr ' -C5 $expdir/out $outdir/out
|
|
|
|
# ================================================================
|
|
echo ALL REGRESSION TESTS PASSED
|
|
echo Tests completed: $num_passed
|