ref: 96c2be96e4beaac08d89af4dea8069d9ca1c4b09
parent: 29b26011fca45785f0cfd9511b5fdcd131248e15
author: qwx <qwx@sciops.net>
date: Thu Sep 25 11:38:17 EDT 2025
test: add T.split
--- /dev/null
+++ b/test/T.split
@@ -1,0 +1,209 @@
+#!/bin/rc
+echo T.split: misc tests of field splitting and split command
+
+TEMP0=foo0
+TEMP1=foo1
+TEMP2=foo2
+
+$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 || echo '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 || echo '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 || echo 'BAD: T.split 0.3'
+
+# getline var shouldn't impact fields.
+
+echo 'f b a' > $TEMP0
+$awk '{+ FS = ":"
+ getline a < "/lib/theo"
+ print $1
+}' $TEMP0 > $TEMP1
+echo 'f' > $TEMP2
+diff $TEMP1 $TEMP2 || echo '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 || echo '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 || echo '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 || echo 'BAD: T.split (record assignment 2)'
+
+echo 'abc
+de
+f
+
+ ' > $TEMP0
+who | sed 10q >> $TEMP0
+sed 10q /lib/theo >> $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 || echo '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 || echo '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 || echo '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 || echo '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 || echo 'BAD: T.split 4'
+
+rm -f $TEMP1 $TEMP2 $TEMP3
+
+echo '
+a
+bc
+def' > $TEMP0
+$awk '
+{ print split($0, x, "")+}' $TEMP0 > $TEMP1
+echo '0
+1
+2
+3' > $TEMP2
+diff $TEMP1 $TEMP2 || echo 'BAD: T.split null 3rd arg'
+
+rm -f $TEMP1 $TEMP2 $TEMP3
+$awk 'BEGIN {+ a[1]="a b"
+ print split(a[1],a),a[1],a[2]
+}' > $TEMP1
+
+echo '2 a b' > $TEMP2
+diff $TEMP1 $TEMP2 || echo '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 || echo 'BAD: T.split(a, b, "[\r\n]+")'
--
⑨