awk nawk oawk

in 1977 there was awk.
this page attempts to explain the history of awk.
the 1978 7th Edition awk(1) man pages and report are here:
http://syl7ce6.yossman.net/fotc/

then they enhanced it and wrote a book.
to avoid confusion, the original was called oawk
and the new version nawk.
it has been a major source of confusion ever since.
the awk book from 1988
http://www.cs.bell-labs.com/cm/cs/awkbook/index.html
page v: original in 1977 / new version in 1985
page vi: This version in System V Rel 3.1
page 80: new things added
functions: close system atan2 sin cos rand srand match sub gsub
vars: ARC ARGV FNR RSTART RLENGTH SUBSEP
keywords: do delete function return
the latest One True awk:
http://www.cs.princeton.edu/~bwk/btl.mirror/index.html
from file FIXES - lists additions/changes since the awk book
toupper() tolower()
\a ("alert"), \v (vertical tab), \xhhh (hexadecimal),
ENVIRON[]
comand line: -v x=1 -v y=2
CONVFMT
nextfile
posix character class names like [:digit:]
length(arrayname)
undocumented command line switch -d dumps debug info.
valid filenames /dev/stdin /dev/stdout /dev/stderr

can use ** or **= in place of ^ for exponention.

array SYMTAB holds info, eg:

BEGIN	{
	_print_SYMTAB();
	exit(0);
}

function	_print_SYMTAB(  varname, fmt)  {
	fmt = "SYMTAB['%s'] = '%s'\n";
	for(varname in SYMTAB)					\
		if ((varname != "ENVIRON") && (varname != "ARGV")	\
			&& (varname != "SYMTAB")			\
			&& (varname != "_print_SYMTAB"))		\
			printf(fmt, varname, SYMTAB[varname]) > "/dev/stderr";
#:		can not access array or function names
	return(1);
}