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