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); }