# syntax: GAWK -f STREAM_MERGE.AWK filename(s) >output # handles 1 .. N files # # variable purpose # ---------- ------- # data_arr holds last record read # fn_arr filenames on command line # fnr_arr record counts for each file # status_arr file status: 1=more data, 0=EOF, -1=error # BEGIN { files = ARGC-1 # get filename, file status and first record for (i=1; i<=files; i++) { fn_arr[i] = ARGV[i] status_arr[i] = getline $0) { error(sprintf("FILENAME=%s, FNR=%d, out of sequence",fn_arr[fno],fnr_arr[fno])) } data_arr[fno] = $0 } } # EOJ printf("input: %d files, %d records, %d errors\n",files,nr,errors) >"con" exit(0) } function error(message) { printf("error: %s\n",message) >"con" errors++ }