#!/bin/bash if [[ -z "$AWK" || -z "$WORKDIR" ]]; then printf '$AWK and $WORKDIR must be set\n' >&2 exit 1 fi TEMP1=$WORKDIR/test.temp.1 TEMP2=$WORKDIR/test.temp.2 RESULT=0 fail() { echo "$1" >&2 RESULT=1 } echo T.getline: test getline function who > $TEMP1 cat $TEMP1 | $AWK ' BEGIN { while (getline) print exit } ' > $TEMP2 cmp -s $TEMP1 $TEMP2 || fail 'BAD: T.getline (bare getline)' who > $TEMP1 cat $TEMP1 | $AWK ' BEGIN { while (getline xxx) print xxx exit } ' > $TEMP2 cmp -s $TEMP1 $TEMP2 || fail 'BAD: T.getline (getline xxx)' $AWK ' BEGIN { while (getline <"/etc/passwd") print exit } ' > $TEMP1 cmp -s /etc/passwd $TEMP1 || fail 'BAD: T.getline (getline $TEMP1 cmp -s /etc/passwd $TEMP1 || fail 'BAD: T.getline (getline <"-")' $AWK ' BEGIN { while (getline $TEMP1 cmp -s /etc/passwd $TEMP1 || fail 'BAD: T.getline (getline $TEMP1 cmp -s /etc/passwd $TEMP1 || fail 'BAD: T.getline (getline x $TEMP1 cmp -s /etc/passwd $TEMP1 || fail 'BAD: T.getline (cat arg | getline)' $AWK ' BEGIN { while (("cat " ARGV[1]) | getline x) print x exit } ' /etc/passwd > $TEMP1 cmp -s /etc/passwd $TEMP1 || fail 'BAD: T.getline (cat arg | getline x)' $AWK ' BEGIN { print getline <"/glop/glop/glop" } ' > $TEMP1 echo '-1' > $TEMP2 cmp -s $TEMP1 $TEMP2 || fail 'BAD: T.getline (non-existent file)' echo 'false false equal' > $TEMP1 $AWK 'BEGIN { "echo 0" | getline if ($0) printf "true " else printf "false " if ($1) printf "true " else printf "false " if ($0==$1) printf "equal\n" else printf "not equal\n" }' > $TEMP2 cmp -s $TEMP1 $TEMP2 || fail 'BAD: T.getline bad $0 type in cmd|getline' echo 'L1 L2' | $AWK 'BEGIN { $0="old stuff"; $1="new"; getline x; print}' > $TEMP1 echo 'new stuff' > $TEMP2 cmp -s $TEMP1 $TEMP2 || fail 'BAD: T.getline bad update $0' exit $RESULT