123f24377SWarner Losh#!/bin/sh 223f24377SWarner Losh 323f24377SWarner Loshawk=${awk-../a.out} 423f24377SWarner Losh 523f24377SWarner LoshWORKDIR=$(mktemp -d /tmp/nawktest.XXXXXX) 623f24377SWarner Losh 723f24377SWarner LoshTEMP0=$WORKDIR/test.temp.0 823f24377SWarner LoshTEMP1=$WORKDIR/test.temp.1 923f24377SWarner LoshTEMP2=$WORKDIR/test.temp.2 1023f24377SWarner Losh 1123f24377SWarner LoshRESULT=0 1223f24377SWarner Losh 1323f24377SWarner Loshfail() { 1423f24377SWarner Losh echo "$1" >&2 1523f24377SWarner Losh RESULT=1 1623f24377SWarner Losh} 1723f24377SWarner Losh 1823f24377SWarner Loshecho T.split: misc tests of field splitting and split command 1923f24377SWarner Losh 2023f24377SWarner Losh$awk 'BEGIN { 2123f24377SWarner Losh # Assign string to $0, then change FS. 2223f24377SWarner Losh FS = ":" 2323f24377SWarner Losh $0="a:bc:def" 2423f24377SWarner Losh FS = "-" 2523f24377SWarner Losh print FS, $1, NF 2623f24377SWarner Losh 2723f24377SWarner Losh # Assign number to $0, then change FS. 2823f24377SWarner Losh FS = "2" 2923f24377SWarner Losh $0=1212121 3023f24377SWarner Losh FS="3" 3123f24377SWarner Losh print FS, $1, NF 3223f24377SWarner Losh}' > $TEMP1 3323f24377SWarner Loshecho '- a 3 3423f24377SWarner Losh3 1 4' > $TEMP2 3523f24377SWarner Loshdiff $TEMP1 $TEMP2 || fail 'BAD: T.split 0.1' 3623f24377SWarner Losh 3723f24377SWarner Losh$awk 'BEGIN { 3823f24377SWarner Losh # FS changes after getline. 3923f24377SWarner Losh FS = ":" 4023f24377SWarner Losh "echo a:bc:def" | getline 4123f24377SWarner Losh FS = "-" 4223f24377SWarner Losh print FS, $1, NF 4323f24377SWarner Losh}' > $TEMP1 4423f24377SWarner Loshecho '- a 3' > $TEMP2 4523f24377SWarner Loshdiff $TEMP1 $TEMP2 || fail 'BAD: T.split 0.2' 4623f24377SWarner Losh 4723f24377SWarner Loshecho ' 4823f24377SWarner Losha 4923f24377SWarner Losha:b 5023f24377SWarner Loshc:d:e 5123f24377SWarner Loshe:f:g:h' > $TEMP0 5223f24377SWarner Losh$awk 'BEGIN { 5323f24377SWarner Losh FS = ":" 5423f24377SWarner Losh while (getline <"'$TEMP0'" > 0) 5523f24377SWarner Losh print NF 5623f24377SWarner Losh}' > $TEMP1 5723f24377SWarner Loshecho '0 5823f24377SWarner Losh1 5923f24377SWarner Losh2 6023f24377SWarner Losh3 6123f24377SWarner Losh4' > $TEMP2 6223f24377SWarner Loshdiff $TEMP1 $TEMP2 || fail 'BAD: T.split 0.3' 6323f24377SWarner Losh 6423f24377SWarner Losh# getline var shouldn't impact fields. 6523f24377SWarner Losh 6623f24377SWarner Loshecho 'f b a' > $TEMP0 6723f24377SWarner Losh$awk '{ 6823f24377SWarner Losh FS = ":" 6923f24377SWarner Losh getline a < "/etc/passwd" 7023f24377SWarner Losh print $1 7123f24377SWarner Losh}' $TEMP0 > $TEMP1 7223f24377SWarner Loshecho 'f' > $TEMP2 7323f24377SWarner Loshdiff $TEMP1 $TEMP2 || fail 'BAD: T.split 0.4' 7423f24377SWarner Losh 7523f24377SWarner Loshecho 'a b c d 7623f24377SWarner Loshfoo 7723f24377SWarner Loshe f g h i 7823f24377SWarner Loshbar' > $TEMP0 7923f24377SWarner Losh$awk '{ 8023f24377SWarner Losh FS=":" 8123f24377SWarner Losh getline v 8223f24377SWarner Losh print $2, NF 8323f24377SWarner Losh FS=" " 8423f24377SWarner Losh}' $TEMP0 > $TEMP1 8523f24377SWarner Loshecho 'b 4 8623f24377SWarner Loshf 5' > $TEMP2 8723f24377SWarner Loshdiff $TEMP1 $TEMP2 || fail 'BAD: T.split 0.5' 8823f24377SWarner Losh 8923f24377SWarner Loshecho 'a.b.c=d.e.f 9023f24377SWarner Loshg.h.i=j.k.l 9123f24377SWarner Loshm.n.o=p.q.r' > $TEMP0 9223f24377SWarner Loshecho 'b 9323f24377SWarner Loshh 9423f24377SWarner Loshn' > $TEMP1 9523f24377SWarner Losh$awk 'BEGIN { FS="=" } { FS="."; $0=$1; print $2; FS="="; }' $TEMP0 > $TEMP2 9623f24377SWarner Loshdiff $TEMP1 $TEMP2 || fail 'BAD: T.split (record assignment 1)' 9723f24377SWarner Losh 9823f24377SWarner Loshecho 'a.b.c=d.e.f 9923f24377SWarner Loshg.h.i=j.k.l 10023f24377SWarner Loshm.n.o=p.q.r' > $TEMP0 10123f24377SWarner Loshecho 'd.e.f 10223f24377SWarner Loshb 10323f24377SWarner Loshj.k.l 10423f24377SWarner Loshh 10523f24377SWarner Loshp.q.r 10623f24377SWarner Loshn' > $TEMP1 10723f24377SWarner Losh$awk 'BEGIN { FS="=" } { print $2; FS="."; $0=$1; print $2; FS="="; }' $TEMP0 > $TEMP2 10823f24377SWarner Loshdiff $TEMP1 $TEMP2 || fail 'BAD: T.split (record assignment 2)' 10923f24377SWarner Losh 11023f24377SWarner Loshecho 'abc 11123f24377SWarner Loshde 11223f24377SWarner Loshf 11323f24377SWarner Losh 11423f24377SWarner Losh ' > $TEMP0 11523f24377SWarner Loshwho | sed 10q >> $TEMP0 11623f24377SWarner Loshsed 10q /etc/passwd >> $TEMP0 11723f24377SWarner Losh 11823f24377SWarner Losh$awk ' 11923f24377SWarner Losh{ n = split($0, x, "") 12023f24377SWarner Losh m = length($0) 12123f24377SWarner Losh if (m != n) print "error 1", NR 12223f24377SWarner Losh s = "" 12323f24377SWarner Losh for (i = 1; i <= m; i++) 12423f24377SWarner Losh s = s x[i] 12523f24377SWarner Losh if (s != $0) print "error 2", NR 12623f24377SWarner Losh print s 12723f24377SWarner Losh}' $TEMP0 > $TEMP1 12823f24377SWarner Losh 12923f24377SWarner Loshdiff $TEMP0 $TEMP1 || fail 'BAD: T.split 1' 13023f24377SWarner Losh 13123f24377SWarner Losh# assumes same test.temp.0! bad design 13223f24377SWarner Losh 13323f24377SWarner Losh 13423f24377SWarner Losh$awk ' 13523f24377SWarner Losh{ n = split($0, x, //) 13623f24377SWarner Losh m = length($0) 13723f24377SWarner Losh if (m != n) print "error 1", NR 13823f24377SWarner Losh s = "" 13923f24377SWarner Losh for (i = 1; i <= m; i++) 14023f24377SWarner Losh s = s x[i] 14123f24377SWarner Losh if (s != $0) print "error 2", NR 14223f24377SWarner Losh print s 14323f24377SWarner Losh}' $TEMP0 > $TEMP1 14423f24377SWarner Losh 14523f24377SWarner Loshdiff $TEMP0 $TEMP1 || fail 'BAD: T.split //' 14623f24377SWarner Losh 14723f24377SWarner Losh$awk ' 14823f24377SWarner LoshBEGIN { FS = "" } 14923f24377SWarner Losh{ n = split($0, x) # will be split with FS 15023f24377SWarner Losh m = length($0) 15123f24377SWarner Losh if (m != n) print "error 1", NR 15223f24377SWarner Losh s = "" 15323f24377SWarner Losh for (i = 1; i <= m; i++) 15423f24377SWarner Losh s = s x[i] 15523f24377SWarner Losh if (s != $0) print "error 2", NR 15623f24377SWarner Losh print s 15723f24377SWarner Losh}' $TEMP0 > $TEMP2 15823f24377SWarner Losh 15923f24377SWarner Loshdiff $TEMP0 $TEMP2 || fail 'BAD: T.split 2' 16023f24377SWarner Losh 16123f24377SWarner Losh# assumes same test.temp.0! 16223f24377SWarner Losh 16323f24377SWarner Losh$awk ' 16423f24377SWarner LoshBEGIN { FS = "" } 16523f24377SWarner Losh{ n = NF 16623f24377SWarner Losh m = length($0) 16723f24377SWarner Losh if (m != n) print "error 1", NR 16823f24377SWarner Losh s = "" 16923f24377SWarner Losh for (i = 1; i <= m; i++) 17023f24377SWarner Losh s = s $i 17123f24377SWarner Losh if (s != $0) print "error 2", NR 17223f24377SWarner Losh print s 17323f24377SWarner Losh}' $TEMP0 > $TEMP2 17423f24377SWarner Losh 17523f24377SWarner Loshdiff $TEMP0 $TEMP2 || fail 'BAD: T.split 3' 17623f24377SWarner Losh 17723f24377SWarner Losh 17823f24377SWarner Losh$awk ' 17923f24377SWarner Losh{ n = split( $0, temp, /^@@@ +/ ) 18023f24377SWarner Losh print n 18123f24377SWarner Losh}' > $TEMP1 <<XXX 18223f24377SWarner Losh@@@ xxx 18323f24377SWarner Losh@@@ xxx 18423f24377SWarner Losh@@@ xxx 18523f24377SWarner LoshXXX 18623f24377SWarner Loshecho '2 18723f24377SWarner Losh2 18823f24377SWarner Losh2' > $TEMP2 18923f24377SWarner Loshdiff $TEMP1 $TEMP2 || fail 'BAD: T.split 4' 19023f24377SWarner Losh 19123f24377SWarner Loshrm -f $WORKDIR/test.temp* 19223f24377SWarner Losh 19323f24377SWarner Loshecho ' 19423f24377SWarner Losha 19523f24377SWarner Loshbc 19623f24377SWarner Loshdef' > $TEMP0 19723f24377SWarner Losh$awk ' 19823f24377SWarner Losh{ print split($0, x, "") 19923f24377SWarner Losh}' $TEMP0 > $TEMP1 20023f24377SWarner Loshecho '0 20123f24377SWarner Losh1 20223f24377SWarner Losh2 20323f24377SWarner Losh3' > $TEMP2 20423f24377SWarner Loshdiff $TEMP1 $TEMP2 || fail 'BAD: T.split null 3rd arg' 20523f24377SWarner Losh 20623f24377SWarner Loshrm -f $WORKDIR/test.temp* 20723f24377SWarner Losh$awk 'BEGIN { 20823f24377SWarner Losh a[1]="a b" 20923f24377SWarner Losh print split(a[1],a),a[1],a[2] 21023f24377SWarner Losh}' > $TEMP1 21123f24377SWarner Losh 21223f24377SWarner Loshecho '2 a b' > $TEMP2 21323f24377SWarner Loshdiff $TEMP1 $TEMP2 || fail 'BAD: T.split(a[1],a)' 21423f24377SWarner Losh 21523f24377SWarner Losh$awk 'BEGIN { 21623f24377SWarner Losh a = "cat\n\n\ndog" 21723f24377SWarner Losh split(a, b, "[\r\n]+") 21823f24377SWarner Losh print b[1], b[2] 21923f24377SWarner Losh}' > $TEMP1 22023f24377SWarner Loshecho 'cat dog' > $TEMP2 22123f24377SWarner Loshdiff $TEMP1 $TEMP2 || fail 'BAD: T.split(a, b, "[\r\n]+")' 22223f24377SWarner Losh 223*f32a6403SWarner Loshrm -rf $WORKDIR 22423f24377SWarner Losh 22523f24377SWarner Loshexit $RESULT 226