| #!/bin/sh |
| |
| awk=${awk-../a.out} |
| |
| WORKDIR=$(mktemp -d /tmp/nawktest.XXXXXX) |
| |
| TEMP0=$WORKDIR/test.temp.0 |
| TEMP1=$WORKDIR/test.temp.1 |
| TEMP2=$WORKDIR/test.temp.2 |
| |
| RESULT=0 |
| |
| fail() { |
| echo "$1" >&2 |
| RESULT=1 |
| } |
| |
| echo T.split: misc tests of field splitting and split command |
| |
| $awk 'BEGIN { |
| # Assign string to $0, then change FS. |
| FS = ":" |
| $0="a:bc:def" |
| FS = "-" |
| print FS, $1, NF |
| |
| # Assign number to $0, then change FS. |
| FS = "2" |
| $0=1212121 |
| FS="3" |
| print FS, $1, NF |
| }' > $TEMP1 |
| echo '- a 3 |
| 3 1 4' > $TEMP2 |
| diff $TEMP1 $TEMP2 || fail 'BAD: T.split 0.1' |
| |
| $awk 'BEGIN { |
| # FS changes after getline. |
| FS = ":" |
| "echo a:bc:def" | getline |
| FS = "-" |
| print FS, $1, NF |
| }' > $TEMP1 |
| echo '- a 3' > $TEMP2 |
| diff $TEMP1 $TEMP2 || fail 'BAD: T.split 0.2' |
| |
| echo ' |
| a |
| a:b |
| c:d:e |
| e:f:g:h' > $TEMP0 |
| $awk 'BEGIN { |
| FS = ":" |
| while (getline <"'$TEMP0'" > 0) |
| print NF |
| }' > $TEMP1 |
| echo '0 |
| 1 |
| 2 |
| 3 |
| 4' > $TEMP2 |
| diff $TEMP1 $TEMP2 || fail 'BAD: T.split 0.3' |
| |
| # getline var shouldn't impact fields. |
| |
| echo 'f b a' > $TEMP0 |
| $awk '{ |
| FS = ":" |
| getline a < "/etc/passwd" |
| print $1 |
| }' $TEMP0 > $TEMP1 |
| echo 'f' > $TEMP2 |
| diff $TEMP1 $TEMP2 || fail 'BAD: T.split 0.4' |
| |
| echo 'a b c d |
| foo |
| e f g h i |
| bar' > $TEMP0 |
| $awk '{ |
| FS=":" |
| getline v |
| print $2, NF |
| FS=" " |
| }' $TEMP0 > $TEMP1 |
| echo 'b 4 |
| f 5' > $TEMP2 |
| diff $TEMP1 $TEMP2 || fail 'BAD: T.split 0.5' |
| |
| echo 'a.b.c=d.e.f |
| g.h.i=j.k.l |
| m.n.o=p.q.r' > $TEMP0 |
| echo 'b |
| h |
| n' > $TEMP1 |
| $awk 'BEGIN { FS="=" } { FS="."; $0=$1; print $2; FS="="; }' $TEMP0 > $TEMP2 |
| diff $TEMP1 $TEMP2 || fail 'BAD: T.split (record assignment 1)' |
| |
| echo 'a.b.c=d.e.f |
| g.h.i=j.k.l |
| m.n.o=p.q.r' > $TEMP0 |
| echo 'd.e.f |
| b |
| j.k.l |
| h |
| p.q.r |
| n' > $TEMP1 |
| $awk 'BEGIN { FS="=" } { print $2; FS="."; $0=$1; print $2; FS="="; }' $TEMP0 > $TEMP2 |
| diff $TEMP1 $TEMP2 || fail 'BAD: T.split (record assignment 2)' |
| |
| echo 'abc |
| de |
| f |
| |
| ' > $TEMP0 |
| who | sed 10q >> $TEMP0 |
| sed 10q /etc/passwd >> $TEMP0 |
| |
| $awk ' |
| { n = split($0, x, "") |
| m = length($0) |
| if (m != n) print "error 1", NR |
| s = "" |
| for (i = 1; i <= m; i++) |
| s = s x[i] |
| if (s != $0) print "error 2", NR |
| print s |
| }' $TEMP0 > $TEMP1 |
| |
| diff $TEMP0 $TEMP1 || fail 'BAD: T.split 1' |
| |
| # assumes same test.temp.0! bad design |
| |
| |
| $awk ' |
| { n = split($0, x, //) |
| m = length($0) |
| if (m != n) print "error 1", NR |
| s = "" |
| for (i = 1; i <= m; i++) |
| s = s x[i] |
| if (s != $0) print "error 2", NR |
| print s |
| }' $TEMP0 > $TEMP1 |
| |
| diff $TEMP0 $TEMP1 || fail 'BAD: T.split //' |
| |
| $awk ' |
| BEGIN { FS = "" } |
| { n = split($0, x) # will be split with FS |
| m = length($0) |
| if (m != n) print "error 1", NR |
| s = "" |
| for (i = 1; i <= m; i++) |
| s = s x[i] |
| if (s != $0) print "error 2", NR |
| print s |
| }' $TEMP0 > $TEMP2 |
| |
| diff $TEMP0 $TEMP2 || fail 'BAD: T.split 2' |
| |
| # assumes same test.temp.0! |
| |
| $awk ' |
| BEGIN { FS = "" } |
| { n = NF |
| m = length($0) |
| if (m != n) print "error 1", NR |
| s = "" |
| for (i = 1; i <= m; i++) |
| s = s $i |
| if (s != $0) print "error 2", NR |
| print s |
| }' $TEMP0 > $TEMP2 |
| |
| diff $TEMP0 $TEMP2 || fail 'BAD: T.split 3' |
| |
| |
| $awk ' |
| { n = split( $0, temp, /^@@@ +/ ) |
| print n |
| }' > $TEMP1 <<XXX |
| @@@ xxx |
| @@@ xxx |
| @@@ xxx |
| XXX |
| echo '2 |
| 2 |
| 2' > $TEMP2 |
| diff $TEMP1 $TEMP2 || fail 'BAD: T.split 4' |
| |
| rm -f $WORKDIR/test.temp* |
| |
| echo ' |
| a |
| bc |
| def' > $TEMP0 |
| $awk ' |
| { print split($0, x, "") |
| }' $TEMP0 > $TEMP1 |
| echo '0 |
| 1 |
| 2 |
| 3' > $TEMP2 |
| diff $TEMP1 $TEMP2 || fail 'BAD: T.split null 3rd arg' |
| |
| rm -f $WORKDIR/test.temp* |
| $awk 'BEGIN { |
| a[1]="a b" |
| print split(a[1],a),a[1],a[2] |
| }' > $TEMP1 |
| |
| echo '2 a b' > $TEMP2 |
| diff $TEMP1 $TEMP2 || fail 'BAD: T.split(a[1],a)' |
| |
| $awk 'BEGIN { |
| a = "cat\n\n\ndog" |
| split(a, b, "[\r\n]+") |
| print b[1], b[2] |
| }' > $TEMP1 |
| echo 'cat dog' > $TEMP2 |
| diff $TEMP1 $TEMP2 || fail 'BAD: T.split(a, b, "[\r\n]+")' |
| |
| |
| exit $RESULT |