gawk: Library Functions
10 A Library of 'awk' Functions
*******************************
User-defined describes how to write your own 'awk' functions.
Writing functions is important, because it allows you to encapsulate
algorithms and program tasks in a single place. It simplifies
programming, making program development more manageable and making
programs more readable.
In their seminal 1976 book, 'Software Tools',(1) Brian Kernighan and
P.J. Plauger wrote:
Good Programming is not learned from generalities, but by seeing
how significant programs can be made clean, easy to read, easy to
maintain and modify, human-engineered, efficient and reliable, by
the application of common sense and good programming practices.
Careful study and imitation of good programs leads to better
writing.
In fact, they felt this idea was so important that they placed this
statement on the cover of their book. Because we believe strongly that
their statement is correct, this major node and Sample Programs,
provide a good-sized body of code for you to read and, we hope, to learn
from.
This major node presents a library of useful 'awk' functions. Many
of the sample programs presented later in this Info file use these
functions. The functions are presented here in a progression from
simple to complex.
Extract Program presents a program that you can use to
extract the source code for these example library functions and programs
from the Texinfo source for this Info file. (This has already been done
as part of the 'gawk' distribution.)
If you have written one or more useful, general-purpose 'awk'
functions and would like to contribute them to the 'awk' user community,
see How To Contribute, for more information.
The programs in this major node and in Sample Programs,
freely use 'gawk'-specific features. Rewriting these programs for
different implementations of 'awk' is pretty straightforward:
* Diagnostic error messages are sent to '/dev/stderr'. Use '| "cat
1>&2"' instead of '> "/dev/stderr"' if your system does not have a
'/dev/stderr', or if you cannot use 'gawk'.
* A number of programs use 'nextfile' (Nextfile Statement) to
skip any remaining input in the input file.
* Finally, some of the programs choose to ignore upper- and lowercase
distinctions in their input. They do so by assigning one to
'IGNORECASE'. You can achieve almost the same effect(2) by adding
the following rule to the beginning of the program:
# ignore case
{ $0 = tolower($0) }
Also, verify that all regexp and string constants used in
comparisons use only lowercase letters.
Menu