"Listen to people who program, not to people who want to tell you how to program."
- Ronald P. Loui
"Good design is as little design as possible."
- Dieter Rams
"When we have on occasion rewritten an Awk program in a conventional programming language like C or C++, the result was usually much longer, and much harder to debug." - Arnold Robbins & Nelson Beebe
AWK is a superb language for testing algorithms and applications with some complexity, especially where the problem can be broken into chunks which can streamed as part of a pipe. It's an ideal tool for augmenting the features of shell programming as it is ubiquitous; found in some form on almost all Unix/Linux/BSD systems. Many problems dealing with text, log lines or symbol tables are handily solved or at the very least prototyped with awk along with the other tools found on Unix/Linux systems.
(Other languages like Perl is) a good programming language for
writing self-contained programs, but pre-compilation and
long start-up time are worth paying only if once the program has
loaded it can do everything in one go. This contrasts sharply with
the Operator-stream Paradigm, where operators are chained together
in pipelines of two, three or more programs. The overhead associated
with initializing (say) Perl at every stage of the pipeline makes pipelining
inefficient. A better way of manipulating structured ASCII
files is to use the AWK programming language, which is much smaller,
more specialized for this task, and is very fast at
startup.