gawk: Library Functions

 
 10 A Library of 'awk' Functions
 *******************************
 
 SeeUser-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 SeeSample 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.
 
    SeeExtract 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 SeeHow To Contribute, for more information.
 
    The programs in this major node and in SeeSample 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' (SeeNextfile 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