1#!/bin/bash 2 3if [[ -z "$AWK" || -z "$WORKDIR" ]]; then 4 printf '$AWK and $WORKDIR must be set\n' >&2 5 exit 1 6fi 7 8TEMP0=$WORKDIR/test.temp.0 9TEMP1=$WORKDIR/test.temp.1 10 11RESULT=0 12 13fail() { 14 echo "$1" >&2 15 RESULT=1 16} 17 18echo T.nextfile: tests of nextfile command 19 20# 1st lines of some files 21rm -f $TEMP0 22for i in T.* 23do 24 sed 1q $i >> $TEMP0 25done 26 27$AWK ' 28{ print $0; nextfile } # print first line, quit 29' T.* > $TEMP1 30 31diff $TEMP0 $TEMP1 || fail 'BAD: T.nextfile 1' 32 33$AWK ' # same test but in a for loop 34{ print $0; 35 for (i = 1; i < 10; i++) 36 if (i == 1) 37 nextfile 38 print "nextfile for error" 39} # print first line, quit 40' T.* > $TEMP1 41 42diff $TEMP0 $TEMP1 || fail 'BAD: T.nextfile 1f' 43 44$AWK ' # same test but in a while loop 45{ print $0; 46 i = 1 47 while (i < 10) 48 if (i++ == 1) 49 nextfile 50 print "nextfile while error" 51} # print first line, quit 52' T.* > $TEMP1 53 54diff $TEMP0 $TEMP1 || fail 'BAD: T.nextfile 1w' 55 56$AWK ' # same test but in a do loop 57{ print $0; 58 i = 1 59 do { 60 if (i++ == 1) 61 nextfile # print first line, quit 62 } while (i < 10) 63 print "nextfile do error" 64} 65' T.* > $TEMP1 66 67diff $TEMP0 $TEMP1 || fail 'BAD: T.nextfile 1d' 68 69 70# 100 lines of some files 71rm -f $TEMP0 72for i in T.* 73do 74 sed 100q $i >> $TEMP0 75done 76 77$AWK ' 78{ print } 79FNR == 100 { nextfile } # print first line, quit 80' T.* > $TEMP1 81 82diff $TEMP0 $TEMP1 || fail 'BAD: T.nextfile 2' 83 84 85> $TEMP0 # empty 86$AWK ' { nextfile; print $0 }' T.* > $TEMP1 87 88diff $TEMP0 $TEMP1 || fail 'BAD: T.nextfile 3' 89 90# skip weird args 91rm -f $TEMP0 92for i in T.* 93do 94 sed 1q $i >> $TEMP0 95done 96 97$AWK ' 98{ print $0; nextfile } # print first line, quit 99' T.* > $TEMP1 100 101diff $TEMP0 $TEMP1 || fail 'BAD: T.nextfile 4' 102 103exit $RESULT 104