echo T.gawk: tests adapted from gawk test suite # for which thanks. awk=${awk-../a.out} # arrayref: ./echo '1 1' >foo1 $awk ' BEGIN { # foo[10] = 0 # put this line in and it will work test(foo); print foo[1] test2(foo2); print foo2[1] } function test(foo) { test2(foo) } function test2(bar) { bar[1] = 1 } ' >foo2 cmp -s foo1 foo2 || ./echo 'BAD: T.gawk arrayref' # asgext ./echo '1 2 3 1 1 2 3 4' >foo ./echo '3 1 2 3 a 1 a 3 1 2 3 a' >foo1 $awk '{ print $3; $4 = "a"; print }' foo >foo2 cmp -s foo1 foo2 || ./echo 'BAD: T.gawk asgext' # backgsub: ./echo 'x\y x\\y' >foo ./echo 'x\y xAy xAy xAAy' >foo1 $awk '{ x = y = $0 gsub( /\\\\/, "A", x); print x gsub( "\\\\", "A", y); print y }' foo >foo2 cmp -s foo1 foo2 || ./echo 'BAD: T.gawk backgsub' # backgsub2: ./echo 'x\y x\\y x\\\y' >foo ./echo ' x\y x\y x\y x\y x\\y x\\\y x\\y x\\\y x\\\\y' >foo1 $awk '{ w = x = y = z = $0 gsub( /\\\\/, "\\", w); print " " w gsub( /\\\\/, "\\\\", x); print " " x gsub( /\\\\/, "\\\\\\", y); print " " y } ' foo >foo2 cmp -s foo1 foo2 || ./echo 'BAD: T.gawk backgsub2' # backgsub3: ./echo 'xax xaax' >foo ./echo ' xax x&x x&x x\ax x\ax x\&x xaax x&&x x&&x x\a\ax x\a\ax x\&\&x' >foo1 $awk '{ w = x = y = z = z1 = z2 = $0 gsub( /a/, "\&", w); print " " w gsub( /a/, "\\&", x); print " " x gsub( /a/, "\\\&", y); print " " y gsub( /a/, "\\\\&", z); print " " z gsub( /a/, "\\\\\&", z1); print " " z1 gsub( /a/, "\\\\\\&", z2); print " " z2 } ' foo >foo2 cmp -s foo1 foo2 || ./echo 'BAD: T.gawk backgsub3' # backsub3: ./echo 'xax xaax' >foo ./echo ' xax x&x x&x x\ax x\ax x\&x xaax x&ax x&ax x\aax x\aax x\&ax' >foo1 $awk '{ w = x = y = z = z1 = z2 = $0 sub( /a/, "\&", w); print " " w sub( /a/, "\\&", x); print " " x sub( /a/, "\\\&", y); print " " y sub( /a/, "\\\\&", z); print " " z sub( /a/, "\\\\\&", z1); print " " z1 sub( /a/, "\\\\\\&", z2); print " " z2 } ' foo >foo2 cmp -s foo1 foo2 || ./echo 'BAD: T.gawk backsub3' # backsub: ./echo 'x\y x\\y' >foo ./echo 'x\y x\\y x\\y x\\\y' >foo1 $awk '{ x = y = $0 sub( /\\\\/, "\\\\", x); print x sub( "\\\\", "\\\\", y); print y }' foo >foo2 cmp -s foo1 foo2 || ./echo 'BAD: T.gawk backsub' # dynlj: ./echo 'hello world' >foo1 $awk 'BEGIN { printf "%*sworld\n", -20, "hello" }' >foo2 cmp -s foo1 foo2 || ./echo 'BAD: T.gawk dynlj' # fsrs: ./echo 'a b c d e f 1 2 3 4 5 6' >foo # note -n: ./echo -n 'a b c d e f1 2 3 4 5 6' >foo1 $awk ' BEGIN { RS=""; FS="\n"; ORS=""; OFS="\n"; } { split ($2,f," ") print $0; }' foo >foo2 cmp -s foo1 foo2 || ./echo 'BAD: T.gawk fsrs' # intest ./echo '0 1' >foo1 $awk 'BEGIN { bool = ((b = 1) in c); print bool, b # gawk-3.0.1 prints "0 "; should print "0 1" }' >foo2 cmp -s foo1 foo2 || ./echo 'BAD: T.gawk intest' # intprec: ./echo '0000000005:000000000e' >foo1 $awk 'BEGIN { printf "%.10d:%.10x\n", 5, 14 }' >foo2 cmp -s foo1 foo2 || ./echo 'BAD: T.gawk intprec' # litoct: ./echo 'axb ab a*b' >foo ./echo 'no match no match match' >foo1 $awk '{ if (/a\52b/) print "match" ; else print "no match" }' foo >foo2 cmp -s foo1 foo2 || ./echo 'BAD: T.gawk litoct' # math: ./echo 'cos(0.785398) = 0.707107 sin(0.785398) = 0.707107 e = 2.718282 log(e) = 1.000000 sqrt(pi ^ 2) = 3.141593 atan2(1, 1) = 0.785398' >foo1 $awk 'BEGIN { pi = 3.1415927 printf "cos(%f) = %f\n", pi/4, cos(pi/4) printf "sin(%f) = %f\n", pi/4, sin(pi/4) e = exp(1) printf "e = %f\n", e printf "log(e) = %f\n", log(e) printf "sqrt(pi ^ 2) = %f\n", sqrt(pi ^ 2) printf "atan2(1, 1) = %f\n", atan2(1, 1) }' >foo2 cmp -s foo1 foo2 || ./echo 'BAD: T.gawk math' # nlfldsep: ./echo 'some stuff more stuffA junk stuffA final' >foo ./echo '4 some stuff more stuff 2 junk stuff 1 final ' >foo1 $awk 'BEGIN { RS = "A" } {print NF; for (i = 1; i <= NF; i++) print $i ; print ""} ' foo >foo2 cmp -s foo1 foo2 || ./echo 'BAD: T.gawk nlfldsep' # numsubstr: ./echo '5000 10000 5000' >foo ./echo '000 1000 000' >foo1 $awk '{ print substr(1000+$1, 2) }' foo >foo2 cmp -s foo1 foo2 || ./echo 'BAD: T.gawk numsubstr' # pcntplus: ./echo '+3 4' >foo1 $awk 'BEGIN { printf "%+d %d\n", 3, 4 }' >foo2 cmp -s foo1 foo2 || ./echo 'BAD: T.gawk pcntplus' # prt1eval: ./echo 1 >foo1 $awk 'function tst () { sum += 1 return sum } BEGIN { OFMT = "%.0f" ; print tst() } ' >foo2 cmp -s foo1 foo2 || ./echo 'BAD: T.gawk prt1eval' # reparse: ./echo '1 axbxc 2' >foo ./echo '1 1 a b c 2 1 a b' >foo1 $awk '{ gsub(/x/, " ") $0 = $0 print $1 print $0 print $1, $2, $3 }' foo >foo2 cmp -s foo1 foo2 || ./echo 'BAD: T.gawk reparse' # rswhite: ./echo ' a b c d' >foo ./echo '< a b c d>' >foo1 $awk 'BEGIN { RS = "" } { printf("<%s>\n", $0) }' foo >foo2 cmp -s foo1 foo2 || ./echo 'BAD: T.gawk rswhite' # splitvar: ./echo 'Here===Is=Some=====Data' >foo ./echo 4 >foo1 $awk '{ sep = "=+" n = split($0, a, sep) print n }' foo >foo2 cmp -s foo1 foo2 || ./echo 'BAD: T.gawk splitvar' # splitwht: ./echo '4 5' >foo1 $awk 'BEGIN { str = "a b\t\tc d" n = split(str, a, " ") print n m = split(str, b, / /) print m }' >foo2 cmp -s foo1 foo2 || ./echo 'BAD: T.gawk splitwht' # sprintfc: ./echo '65 66 foo' >foo ./echo 'A 65 B 66 f foo' >foo1 $awk '{ print sprintf("%c", $1), $1 }' foo >foo2 cmp -s foo1 foo2 || ./echo 'BAD: T.gawk sprintfc' # substr: ./echo 'xxA xxab xxbc xxab xx xx xxab xx xxef xx' >foo1 $awk 'BEGIN { x = "A" printf("xx%-39s\n", substr(x,1,39)) print "xx" substr("abcdef", 0, 2) print "xx" substr("abcdef", 2.3, 2) print "xx" substr("abcdef", -1, 2) print "xx" substr("abcdef", 1, 0) print "xx" substr("abcdef", 1, -3) print "xx" substr("abcdef", 1, 2.3) print "xx" substr("", 1, 2) print "xx" substr("abcdef", 5, 5) print "xx" substr("abcdef", 7, 2) exit (0) }' >foo2 cmp -s foo1 foo2 || ./echo 'BAD: T.gawk substr' # fldchg: ./echo 'aa aab c d e f' >foo ./echo '1: + +b c d e f 2: + +b d e f 2a:%+%+b%%d%e' >foo1 $awk '{ gsub("aa", "+") print "1:", $0 $3 = "<" $3 ">" print "2:", $0 print "2a:" "%" $1 "%" $2 "%" $3 "%" $4 "%" $5 }' foo >foo2 cmp -s foo1 foo2 || ./echo 'BAD: T.gawk fldchg' # fldchgnf: ./echo 'a b c d' >foo ./echo 'a::c:d 4' >foo1 $awk '{ OFS = ":"; $2 = ""; print $0; print NF }' foo >foo2 cmp -s foo1 foo2 || ./echo 'BAD: T.gawk fldchgnf' # funstack: # ./echo ' funstack test takes 5-10 sec, replicates part of T.beebe' $awk -f funstack.awk funstack.in >foo 2>&1 cmp -s foo funstack.ok || ./echo 'BAD: T.gawk funstack' # OFMT from arnold robbins 6/02: # 5.7 with OFMT = %0.f is 6 ./echo '6' >foo1 $awk 'BEGIN { OFMT = "%.0f" print 5.7 }' >foo2 cmp -s foo1 foo2 || ./echo 'BAD: T.gawk ofmt' ### don't know what this is supposed to do now. ### # convfmt: ### ./echo 'a = 123.46 ### a = 123.456 ### a = 123.456' >foo1 ### $awk 'BEGIN { ### CONVFMT = "%2.2f" ### a = 123.456 ### b = a "" # give a string value also ### a += 0 # make a numeric only again ### print "a = ", a ### CONVFMT = "%.6g" ### print "a = ", a ### a += 0 # make a numeric only again ### print "a = ", a # use a as string ### }' >foo2 ### cmp -s foo1 foo2 || ./echo 'BAD: T.gawk convfmt'