home *** CD-ROM | disk | FTP | other *** search
Text File | 1994-12-19 | 59.8 KB | 1,453 lines |
-
-
-
- GAWK(1) Utility Commands GAWK(1)
-
-
- NNAAMMEE
- gawk - pattern scanning and processing language
-
- SSYYNNOOPPSSIISS
- ggaawwkk [ POSIX or GNU style options ] --ff _p_r_o_g_r_a_m_-_f_i_l_e [ ---- ]
- file ...
- ggaawwkk [ POSIX or GNU style options ] [ ---- ] _p_r_o_g_r_a_m_-_t_e_x_t
- file ...
-
- DDEESSCCRRIIPPTTIIOONN
- _G_a_w_k is the GNU Project's implementation of the AWK pro-
- gramming language. It conforms to the definition of the
- language in the POSIX 1003.2 Command Language And Utili-
- ties Standard. This version in turn is based on the
- description in _T_h_e _A_W_K _P_r_o_g_r_a_m_m_i_n_g _L_a_n_g_u_a_g_e, by Aho,
- Kernighan, and Weinberger, with the additional features
- defined in the System V Release 4 version of UNIX _a_w_k.
- _G_a_w_k also provides some GNU-specific extensions.
-
- The command line consists of options to _g_a_w_k itself, the
- AWK program text (if not supplied via the --ff or ----ffiillee
- options), and values to be made available in the AARRGGCC and
- AARRGGVV pre-defined AWK variables.
-
- OOPPTTIIOONNSS
- _G_a_w_k options may be either the traditional POSIX one let-
- ter options, or the GNU style long options. POSIX style
- options start with a single ``-'', while GNU long options
- start with ``--''. GNU style long options are provided
- for both GNU-specific features and for POSIX mandated fea-
- tures. Other implementations of the AWK language are
- likely to only accept the traditional one letter options.
-
- Following the POSIX standard, _g_a_w_k-specific options are
- supplied via arguments to the --WW option. Multiple --WW
- options may be supplied, or multiple arguments may be sup-
- plied together if they are separated by commas, or
- enclosed in quotes and separated by white space. Case is
- ignored in arguments to the --WW option. Each --WW option has
- a corresponding GNU style long option, as detailed below.
- Arguments to GNU style long options are either joined with
- the option by an == sign, with no intervening spaces, or
- they may be provided in the next command line argument.
-
- _G_a_w_k accepts the following options.
-
- --FF _f_s
- ----ffiieelldd--sseeppaarraattoorr==_f_s
- Use _f_s for the input field separator (the value of
- the FFSS predefined variable).
-
- --vv _v_a_r==_v_a_l
- ----aassssiiggnn==_v_a_r==_v_a_l
- Assign the value _v_a_l, to the variable _v_a_r, before
-
-
-
- Free Software Foundation Apr 18 1994 1
-
-
-
-
-
- GAWK(1) Utility Commands GAWK(1)
-
-
- execution of the program begins. Such variable
- values are available to the BBEEGGIINN block of an AWK
- program.
-
- --ff _p_r_o_g_r_a_m_-_f_i_l_e
- ----ffiillee==_p_r_o_g_r_a_m_-_f_i_l_e
- Read the AWK program source from the file _p_r_o_g_r_a_m_-
- _f_i_l_e, instead of from the first command line argu-
- ment. Multiple --ff (or ----ffiillee) options may be used.
-
- --mmff==_N_N_N
- --mmrr==_N_N_N
- Set various memory limits to the value _N_N_N. The ff
- flag sets the maximum number of fields, and the rr
- flag sets the maximum record size. These two flags
- and the --mm option are from the AT&T Bell Labs
- research version of UNIX _a_w_k. They are ignored by
- _g_a_w_k, since _g_a_w_k has no pre-defined limits.
- --WW ccoommppaatt
- ----ccoommppaatt Run in _c_o_m_p_a_t_i_b_i_l_i_t_y mode. In compatibility
- mode, _g_a_w_k behaves identically to UNIX _a_w_k;
- none of the GNU-specific extensions are recog-
- nized. See GGNNUU EEXXTTEENNSSIIOONNSS, below, for more
- information.
-
- --WW ccooppyylleefftt
- --WW ccooppyyrriigghhtt
- ----ccooppyylleefftt
- ----ccooppyyrriigghhtt Print the short version of the GNU copyright
- information message on the error output.
-
- --WW hheellpp
- --WW uussaaggee
- ----hheellpp
- ----uussaaggee Print a relatively short summary of the avail-
- able options on the error output. Per the GNU
- Coding Standards, these options cause an imme-
- diate, successful exit.
-
- --WW lliinntt
- ----lliinntt Provide warnings about constructs that are
- dubious or non-portable to other AWK implemen-
- tations.
- --WW ppoossiixx
- ----ppoossiixx This turns on _c_o_m_p_a_t_i_b_i_l_i_t_y mode, with the
- following additional restrictions:
-
- +o \\xx escape sequences are not recognized.
-
- +o The synonym ffuunncc for the keyword ffuunnccttiioonn is
- not recognized.
-
- +o The operators **** and ****== cannot be used in
- place of ^^ and ^^==.
-
-
-
- Free Software Foundation Apr 18 1994 2
-
-
-
-
-
- GAWK(1) Utility Commands GAWK(1)
-
-
- --WW ssoouurrccee==_p_r_o_g_r_a_m_-_t_e_x_t
- ----ssoouurrccee==_p_r_o_g_r_a_m_-_t_e_x_t
- Use _p_r_o_g_r_a_m_-_t_e_x_t as AWK program source code.
- This option allows the easy intermixing of
- library functions (used via the --ff and ----ffiillee
- options) with source code entered on the com-
- mand line. It is intended primarily for
- medium to large size AWK programs used in
- shell scripts.
- The --WW ssoouurrccee== form of this option uses the
- rest of the command line argument for _p_r_o_g_r_a_m_-
- _t_e_x_t; no other options to --WW will be recog-
- nized in the same argument.
-
- --WW vveerrssiioonn
- ----vveerrssiioonn Print version information for this particular
- copy of _g_a_w_k on the error output. This is
- useful mainly for knowing if the current copy
- of _g_a_w_k on your system is up to date with
- respect to whatever the Free Software Founda-
- tion is distributing. Per the GNU Coding
- Standards, these options cause an immediate,
- successful exit.
-
- ---- Signal the end of options. This is useful to
- allow further arguments to the AWK program
- itself to start with a ``-''. This is mainly
- for consistency with the argument parsing con-
- vention used by most other POSIX programs.
-
- In compatibility mode, any other options are flagged as
- illegal, but are otherwise ignored. In normal operation,
- as long as program text has been supplied, unknown options
- are passed on to the AWK program in the AARRGGVV array for
- processing. This is particularly useful for running AWK
- programs via the ``#!'' executable interpreter mechanism.
-
- AAWWKK PPRROOGGRRAAMM EEXXEECCUUTTIIOONN
- An AWK program consists of a sequence of pattern-action
- statements and optional function definitions.
-
- _p_a_t_t_e_r_n {{ _a_c_t_i_o_n _s_t_a_t_e_m_e_n_t_s }}
- ffuunnccttiioonn _n_a_m_e((_p_a_r_a_m_e_t_e_r _l_i_s_t)) {{ _s_t_a_t_e_m_e_n_t_s }}
-
- _G_a_w_k first reads the program source from the _p_r_o_g_r_a_m_-
- _f_i_l_e(s) if specified, from arguments to --WW ssoouurrccee==, or
- from the first non-option argument on the command line.
- The --ff and --WW ssoouurrccee== options may be used multiple times
- on the command line. _G_a_w_k will read the program text as
- if all the _p_r_o_g_r_a_m_-_f_i_l_es and command line source texts had
- been concatenated together. This is useful for building
- libraries of AWK functions, without having to include them
- in each new AWK program that uses them. It also provides
- the ability to mix library functions with command line
-
-
-
- Free Software Foundation Apr 18 1994 3
-
-
-
-
-
- GAWK(1) Utility Commands GAWK(1)
-
-
- programs.
-
- The environment variable AAWWKKPPAATTHH specifies a search path
- to use when finding source files named with the --ff option.
- If this variable does not exist, the default path is
- ""..:://llooccaall//lliibb//aawwkk:://ggnnuu//lliibb//aawwkk"". If a file name given to
- the --ff option contains a ``/'' character, no path search
- is performed.
-
- _G_a_w_k executes AWK programs in the following order. First,
- all variable assignments specified via the --vv option are
- performed. Next, _g_a_w_k compiles the program into an inter-
- nal form. Then, _g_a_w_k executes the code in the BBEEGGIINN
- block(s) (if any), and then proceeds to read each file
- named in the AARRGGVV array. If there are no files named on
- the command line, _g_a_w_k reads the standard input.
-
- If a filename on the command line has the form _v_a_r==_v_a_l it
- is treated as a variable assignment. The variable _v_a_r will
- be assigned the value _v_a_l. (This happens after any BBEEGGIINN
- block(s) have been run.) Command line variable assignment
- is most useful for dynamically assigning values to the
- variables AWK uses to control how input is broken into
- fields and records. It is also useful for controlling
- state if multiple passes are needed over a single data
- file.
-
- If the value of a particular element of AARRGGVV is empty
- (""""), _g_a_w_k skips over it.
-
- For each line in the input, _g_a_w_k tests to see if it
- matches any _p_a_t_t_e_r_n in the AWK program. For each pattern
- that the line matches, the associated _a_c_t_i_o_n is executed.
- The patterns are tested in the order they occur in the
- program.
-
- Finally, after all the input is exhausted, _g_a_w_k executes
- the code in the EENNDD block(s) (if any).
-
- VVAARRIIAABBLLEESS AANNDD FFIIEELLDDSS
- AWK variables are dynamic; they come into existence when
- they are first used. Their values are either floating-
- point numbers or strings, or both, depending upon how they
- are used. AWK also has one dimensional arrays; arrays with
- multiple dimensions may be simulated. Several pre-defined
- variables are set as a program runs; these will be
- described as needed and summarized below.
-
- FFiieellddss
- As each input line is read, _g_a_w_k splits the line into
- _f_i_e_l_d_s, using the value of the FFSS variable as the field
- separator. If FFSS is a single character, fields are sepa-
- rated by that character. Otherwise, FFSS is expected to be
- a full regular expression. In the special case that FFSS is
-
-
-
- Free Software Foundation Apr 18 1994 4
-
-
-
-
-
- GAWK(1) Utility Commands GAWK(1)
-
-
- a single blank, fields are separated by runs of blanks
- and/or tabs. Note that the value of IIGGNNOORREECCAASSEE (see
- below) will also affect how fields are split when FFSS is a
- regular expression.
-
- If the FFIIEELLDDWWIIDDTTHHSS variable is set to a space separated
- list of numbers, each field is expected to have fixed
- width, and _g_a_w_k will split up the record using the speci-
- fied widths. The value of FFSS is ignored. Assigning a new
- value to FFSS overrides the use of FFIIEELLDDWWIIDDTTHHSS, and restores
- the default behavior.
-
- Each field in the input line may be referenced by its
- position, $$11, $$22, and so on. $$00 is the whole line. The
- value of a field may be assigned to as well. Fields need
- not be referenced by constants:
-
- nn == 55
- pprriinntt $$nn
-
- prints the fifth field in the input line. The variable NNFF
- is set to the total number of fields in the input line.
-
- References to non-existent fields (i.e. fields after $$NNFF)
- produce the null-string. However, assigning to a non-
- existent field (e.g., $$((NNFF++22)) == 55) will increase the value
- of NNFF, create any intervening fields with the null string
- as their value, and cause the value of $$00 to be recom-
- puted, with the fields being separated by the value of
- OOFFSS. References to negative numbered fields cause a fatal
- error.
-
- BBuuiilltt--iinn VVaarriiaabblleess
- AWK's built-in variables are:
-
-
- AARRGGCC The number of command line arguments (does not
- include options to _g_a_w_k, or the program
- source).
-
- AARRGGIINNDD The index in AARRGGVV of the current file being
- processed.
-
- AARRGGVV Array of command line arguments. The array is
- indexed from 0 to AARRGGCC - 1. Dynamically
- changing the contents of AARRGGVV can control the
- files used for data.
-
- CCOONNVVFFMMTT The conversion format for numbers, ""%%..66gg"", by
- default.
-
- EENNVVIIRROONN An array containing the values of the current
- environment. The array is indexed by the
- environment variables, each element being the
-
-
-
- Free Software Foundation Apr 18 1994 5
-
-
-
-
-
- GAWK(1) Utility Commands GAWK(1)
-
-
- value of that variable (e.g., EENNVVIIRROONN[[""HHOOMMEE""]]
- might be //uu//aarrnnoolldd). Changing this array does
- not affect the environment seen by programs
- which _g_a_w_k spawns via redirection or the ssyyss--
- tteemm(()) function. (This may change in a future
- version of _g_a_w_k.)
-
- EERRRRNNOO If a system error occurs either doing a redi-
- rection for ggeettlliinnee, during a read for ggeett--
- lliinnee, or during a cclloossee(()), then EERRRRNNOO will
- contain a string describing the error.
-
- FFIIEELLDDWWIIDDTTHHSS A white-space separated list of fieldwidths.
- When set, _g_a_w_k parses the input into fields of
- fixed width, instead of using the value of the
- FFSS variable as the field separator. The fixed
- field width facility is still experimental;
- expect the semantics to change as _g_a_w_k evolves
- over time.
-
- FFIILLEENNAAMMEE The name of the current input file. If no
- files are specified on the command line, the
- value of FFIILLEENNAAMMEE is ``-''. However, FFIILLEENNAAMMEE
- is undefined inside the BBEEGGIINN block.
-
- FFNNRR The input record number in the current input
- file.
-
- FFSS The input field separator, a blank by default.
-
- IIGGNNOORREECCAASSEE Controls the case-sensitivity of all regular
- expression operations. If IIGGNNOORREECCAASSEE has a
- non-zero value, then pattern matching in
- rules, field splitting with FFSS, regular
- expression matching with ~~ and !!~~, and the
- ggssuubb(()), iinnddeexx(()), mmaattcchh(()), sspplliitt(()), and ssuubb(())
- pre-defined functions will all ignore case
- when doing regular expression operations.
- Thus, if IIGGNNOORREECCAASSEE is not equal to zero, //aaBB//
- matches all of the strings ""aabb"", ""aaBB"", ""AAbb"",
- and ""AABB"". As with all AWK variables, the ini-
- tial value of IIGGNNOORREECCAASSEE is zero, so all regu-
- lar expression operations are normally case-
- sensitive.
-
- NNFF The number of fields in the current input
- record.
-
- NNRR The total number of input records seen so far.
-
- OOFFMMTT The output format for numbers, ""%%..66gg"", by
- default.
-
- OOFFSS The output field separator, a blank by
-
-
-
- Free Software Foundation Apr 18 1994 6
-
-
-
-
-
- GAWK(1) Utility Commands GAWK(1)
-
-
- default.
-
- OORRSS The output record separator, by default a new-
- line.
-
- RRSS The input record separator, by default a new-
- line. RRSS is exceptional in that only the
- first character of its string value is used
- for separating records. (This will probably
- change in a future release of _g_a_w_k.) If RRSS is
- set to the null string, then records are sepa-
- rated by blank lines. When RRSS is set to the
- null string, then the newline character always
- acts as a field separator, in addition to
- whatever value FFSS may have.
-
- RRSSTTAARRTT The index of the first character matched by
- mmaattcchh(()); 0 if no match.
-
- RRLLEENNGGTTHH The length of the string matched by mmaattcchh(());
- -1 if no match.
-
- SSUUBBSSEEPP The character used to separate multiple sub-
- scripts in array elements, by default ""\\003344"".
-
- AArrrraayyss
- Arrays are subscripted with an expression between square
- brackets ([[ and ]]). If the expression is an expression
- list (_e_x_p_r, _e_x_p_r ...) then the array subscript is a
- string consisting of the concatenation of the (string)
- value of each expression, separated by the value of the
- SSUUBBSSEEPP variable. This facility is used to simulate multi-
- ply dimensioned arrays. For example:
-
- ii == ""AA"" ;; jj == ""BB"" ;; kk == ""CC""
- xx[[ii,, jj,, kk]] == ""hheelllloo,, wwoorrlldd\\nn""
-
- assigns the string ""hheelllloo,, wwoorrlldd\\nn"" to the element of the
- array xx which is indexed by the string ""AA\\003344BB\\003344CC"". All
- arrays in AWK are associative, i.e. indexed by string val-
- ues.
-
- The special operator iinn may be used in an iiff or wwhhiillee
- statement to see if an array has an index consisting of a
- particular value.
-
- iiff ((vvaall iinn aarrrraayy))
- pprriinntt aarrrraayy[[vvaall]]
-
- If the array has multiple subscripts, use ((ii,, jj)) iinn aarrrraayy.
-
- The iinn construct may also be used in a ffoorr loop to iterate
- over all the elements of an array.
-
-
-
-
- Free Software Foundation Apr 18 1994 7
-
-
-
-
-
- GAWK(1) Utility Commands GAWK(1)
-
-
- An element may be deleted from an array using the ddeelleettee
- statement. The ddeelleettee statement may also be used to
- delete the entire contents of an array.
-
- VVaarriiaabbllee TTyyppiinngg AAnndd CCoonnvveerrssiioonn
- Variables and fields may be (floating point) numbers, or
- strings, or both. How the value of a variable is inter-
- preted depends upon its context. If used in a numeric
- expression, it will be treated as a number, if used as a
- string it will be treated as a string.
-
- To force a variable to be treated as a number, add 0 to
- it; to force it to be treated as a string, concatenate it
- with the null string.
-
- When a string must be converted to a number, the conver-
- sion is accomplished using _a_t_o_f(3). A number is converted
- to a string by using the value of CCOONNVVFFMMTT as a format
- string for _s_p_r_i_n_t_f(3), with the numeric value of the vari-
- able as the argument. However, even though all numbers in
- AWK are floating-point, integral values are _a_l_w_a_y_s con-
- verted as integers. Thus, given
-
- CCOONNVVFFMMTT == ""%%22..22ff""
- aa == 1122
- bb == aa """"
-
- the variable bb has a string value of ""1122"" and not ""1122..0000"".
-
- _G_a_w_k performs comparisons as follows: If two variables are
- numeric, they are compared numerically. If one value is
- numeric and the other has a string value that is a
- ``numeric string,'' then comparisons are also done numeri-
- cally. Otherwise, the numeric value is converted to a
- string and a string comparison is performed. Two strings
- are compared, of course, as strings. According to the
- POSIX standard, even if two strings are numeric strings, a
- numeric comparison is performed. However, this is clearly
- incorrect, and _g_a_w_k does not do this.
-
- Uninitialized variables have the numeric value 0 and the
- string value "" (the null, or empty, string).
-
- PPAATTTTEERRNNSS AANNDD AACCTTIIOONNSS
- AWK is a line oriented language. The pattern comes first,
- and then the action. Action statements are enclosed in {{
- and }}. Either the pattern may be missing, or the action
- may be missing, but, of course, not both. If the pattern
- is missing, the action will be executed for every single
- line of input. A missing action is equivalent to
-
- {{ pprriinntt }}
-
- which prints the entire line.
-
-
-
- Free Software Foundation Apr 18 1994 8
-
-
-
-
-
- GAWK(1) Utility Commands GAWK(1)
-
-
- Comments begin with the ``#'' character, and continue
- until the end of the line. Blank lines may be used to
- separate statements. Normally, a statement ends with a
- newline, however, this is not the case for lines ending in
- a ``,'', ``{'', ``?'', ``:'', ``&&'', or ``||''. Lines
- ending in ddoo or eellssee also have their statements automati-
- cally continued on the following line. In other cases, a
- line can be continued by ending it with a ``\'', in which
- case the newline will be ignored.
-
- Multiple statements may be put on one line by separating
- them with a ``;''. This applies to both the statements
- within the action part of a pattern-action pair (the usual
- case), and to the pattern-action statements themselves.
-
- PPaatttteerrnnss
- AWK patterns may be one of the following:
-
- BBEEGGIINN
- EENNDD
- //_r_e_g_u_l_a_r _e_x_p_r_e_s_s_i_o_n//
- _r_e_l_a_t_i_o_n_a_l _e_x_p_r_e_s_s_i_o_n
- _p_a_t_t_e_r_n &&&& _p_a_t_t_e_r_n
- _p_a_t_t_e_r_n |||| _p_a_t_t_e_r_n
- _p_a_t_t_e_r_n ?? _p_a_t_t_e_r_n :: _p_a_t_t_e_r_n
- ((_p_a_t_t_e_r_n))
- !! _p_a_t_t_e_r_n
- _p_a_t_t_e_r_n_1,, _p_a_t_t_e_r_n_2
-
- BBEEGGIINN and EENNDD are two special kinds of patterns which are
- not tested against the input. The action parts of all
- BBEEGGIINN patterns are merged as if all the statements had
- been written in a single BBEEGGIINN block. They are executed
- before any of the input is read. Similarly, all the EENNDD
- blocks are merged, and executed when all the input is
- exhausted (or when an eexxiitt statement is executed). BBEEGGIINN
- and EENNDD patterns cannot be combined with other patterns in
- pattern expressions. BBEEGGIINN and EENNDD patterns cannot have
- missing action parts.
-
- For //_r_e_g_u_l_a_r _e_x_p_r_e_s_s_i_o_n// patterns, the associated state-
- ment is executed for each input line that matches the reg-
- ular expression. Regular expressions are the same as
- those in _e_g_r_e_p(1), and are summarized below.
-
- A _r_e_l_a_t_i_o_n_a_l _e_x_p_r_e_s_s_i_o_n may use any of the operators
- defined below in the section on actions. These generally
- test whether certain fields match certain regular expres-
- sions.
-
- The &&&&, ||||, and !! operators are logical AND, logical OR,
- and logical NOT, respectively, as in C. They do short-
- circuit evaluation, also as in C, and are used for combin-
- ing more primitive pattern expressions. As in most
-
-
-
- Free Software Foundation Apr 18 1994 9
-
-
-
-
-
- GAWK(1) Utility Commands GAWK(1)
-
-
- languages, parentheses may be used to change the order of
- evaluation.
-
- The ??:: operator is like the same operator in C. If the
- first pattern is true then the pattern used for testing is
- the second pattern, otherwise it is the third. Only one of
- the second and third patterns is evaluated.
-
- The _p_a_t_t_e_r_n_1,, _p_a_t_t_e_r_n_2 form of an expression is called a
- _r_a_n_g_e _p_a_t_t_e_r_n. It matches all input records starting with
- a line that matches _p_a_t_t_e_r_n_1, and continuing until a
- record that matches _p_a_t_t_e_r_n_2, inclusive. It does not com-
- bine with any other sort of pattern expression.
-
- RReegguullaarr EExxpprreessssiioonnss
- Regular expressions are the extended kind found in _e_g_r_e_p.
- They are composed of characters as follows:
-
- _c matches the non-metacharacter _c.
-
- _\_c matches the literal character _c.
-
- .. matches any character except newline.
-
- ^^ matches the beginning of a line or a string.
-
- $$ matches the end of a line or a string.
-
- [[_a_b_c_._._.]] character class, matches any of the characters
- _a_b_c_._._..
-
- [[^^_a_b_c_._._.]] negated character class, matches any character
- except _a_b_c_._._. and newline.
-
- _r_1||_r_2 alternation: matches either _r_1 or _r_2.
-
- _r_1_r_2 concatenation: matches _r_1, and then _r_2.
-
- _r++ matches one or more _r's.
-
- _r** matches zero or more _r's.
-
- _r?? matches zero or one _r's.
-
- ((_r)) grouping: matches _r.
-
- The escape sequences that are valid in string constants
- (see below) are also legal in regular expressions.
-
- AAccttiioonnss
- Action statements are enclosed in braces, {{ and }}. Action
- statements consist of the usual assignment, conditional,
- and looping statements found in most languages. The opera-
- tors, control statements, and input/output statements
-
-
-
- Free Software Foundation Apr 18 1994 10
-
-
-
-
-
- GAWK(1) Utility Commands GAWK(1)
-
-
- available are patterned after those in C.
-
- OOppeerraattoorrss
- The operators in AWK, in order of increasing precedence,
- are
-
-
- == ++== --==
- **== //== %%== ^^== Assignment. Both absolute assignment ((_v_a_r ==
- _v_a_l_u_e)) and operator-assignment (the other
- forms) are supported.
-
- ??:: The C conditional expression. This has the
- form _e_x_p_r_1 ?? _e_x_p_r_2 :: _e_x_p_r_3. If _e_x_p_r_1 is true,
- the value of the expression is _e_x_p_r_2, other-
- wise it is _e_x_p_r_3. Only one of _e_x_p_r_2 and _e_x_p_r_3
- is evaluated.
-
- |||| Logical OR.
-
- &&&& Logical AND.
-
- ~~ !!~~ Regular expression match, negated match.
- NNOOTTEE:: Do not use a constant regular expression
- (//ffoooo//) on the left-hand side of a ~~ or !!~~.
- Only use one on the right-hand side. The
- expression //ffoooo// ~~ _e_x_p has the same meaning as
- (((($$00 ~~ //ffoooo//)) ~~ _e_x_p)). This is usually _n_o_t
- what was intended.
-
- << >>
- <<== >>==
- !!== ==== The regular relational operators.
-
- _b_l_a_n_k String concatenation.
-
- ++ -- Addition and subtraction.
-
- ** // %% Multiplication, division, and modulus.
-
- ++ -- !! Unary plus, unary minus, and logical negation.
-
- ^^ Exponentiation (**** may also be used, and ****==
- for the assignment operator).
-
- ++++ ---- Increment and decrement, both prefix and post-
- fix.
-
- $$ Field reference.
-
- CCoonnttrrooll SSttaatteemmeennttss
- The control statements are as follows:
-
- iiff ((_c_o_n_d_i_t_i_o_n)) _s_t_a_t_e_m_e_n_t [ eellssee _s_t_a_t_e_m_e_n_t ]
-
-
-
- Free Software Foundation Apr 18 1994 11
-
-
-
-
-
- GAWK(1) Utility Commands GAWK(1)
-
-
- wwhhiillee ((_c_o_n_d_i_t_i_o_n)) _s_t_a_t_e_m_e_n_t
- ddoo _s_t_a_t_e_m_e_n_t wwhhiillee ((_c_o_n_d_i_t_i_o_n))
- ffoorr ((_e_x_p_r_1;; _e_x_p_r_2;; _e_x_p_r_3)) _s_t_a_t_e_m_e_n_t
- ffoorr ((_v_a_r iinn _a_r_r_a_y)) _s_t_a_t_e_m_e_n_t
- bbrreeaakk
- ccoonnttiinnuuee
- ddeelleettee _a_r_r_a_y[[_i_n_d_e_x]]
- ddeelleettee _a_r_r_a_y
- eexxiitt [ _e_x_p_r_e_s_s_i_o_n ]
- {{ _s_t_a_t_e_m_e_n_t_s }}
-
- II//OO SSttaatteemmeennttss
- The input/output statements are as follows:
-
-
- cclloossee((_f_i_l_e_n_a_m_e)) Close file (or pipe, see below).
-
- ggeettlliinnee Set $$00 from next input record; set
- NNFF, NNRR, FFNNRR.
-
- ggeettlliinnee <<_f_i_l_e Set $$00 from next record of _f_i_l_e; set
- NNFF.
-
- ggeettlliinnee _v_a_r Set _v_a_r from next input record; set
- NNFF, FFNNRR.
-
- ggeettlliinnee _v_a_r <<_f_i_l_e Set _v_a_r from next record of _f_i_l_e.
-
- nneexxtt Stop processing the current input
- record. The next input record is
- read and processing starts over with
- the first pattern in the AWK pro-
- gram. If the end of the input data
- is reached, the EENNDD block(s), if
- any, are executed.
-
- nneexxtt ffiillee Stop processing the current input
- file. The next input record read
- comes from the next input file.
- FFIILLEENNAAMMEE is updated, FFNNRR is reset to
- 1, and processing starts over with
- the first pattern in the AWK pro-
- gram. If the end of the input data
- is reached, the EENNDD block(s), if
- any, are executed.
-
- pprriinntt Prints the current record.
-
- pprriinntt _e_x_p_r_-_l_i_s_t Prints expressions. Each expression
- is separated by the value of the OOFFSS
- variable. The output record is ter-
- minated with the value of the OORRSS
- variable.
-
-
-
-
- Free Software Foundation Apr 18 1994 12
-
-
-
-
-
- GAWK(1) Utility Commands GAWK(1)
-
-
- pprriinntt _e_x_p_r_-_l_i_s_t >>_f_i_l_e Prints expressions on _f_i_l_e. Each
- expression is separated by the value
- of the OOFFSS variable. The output
- record is terminated with the value
- of the OORRSS variable.
-
- pprriinnttff _f_m_t_, _e_x_p_r_-_l_i_s_t Format and print.
-
- pprriinnttff _f_m_t_, _e_x_p_r_-_l_i_s_t >>_f_i_l_e
- Format and print on _f_i_l_e.
-
- ssyysstteemm((_c_m_d_-_l_i_n_e)) Execute the command _c_m_d_-_l_i_n_e, and
- return the exit status. (This may
- not be available on non-POSIX sys-
- tems.)
-
- Other input/output redirections are also allowed. For
- pprriinntt and pprriinnttff, >>>>_f_i_l_e appends output to the _f_i_l_e, while
- || _c_o_m_m_a_n_d writes on a pipe. In a similar fashion, _c_o_m_m_a_n_d
- || ggeettlliinnee pipes into ggeettlliinnee. The ggeettlliinnee command will
- return 0 on end of file, and -1 on an error.
-
- TThhee _p_r_i_n_t_f SSttaatteemmeenntt
- The AWK versions of the pprriinnttff statement and sspprriinnttff(())
- function (see below) accept the following conversion spec-
- ification formats:
-
- %%cc An ASCII character. If the argument used for %%cc is
- numeric, it is treated as a character and printed.
- Otherwise, the argument is assumed to be a string,
- and the only first character of that string is
- printed.
-
- %%dd A decimal number (the integer part).
-
- %%ii Just like %%dd.
-
- %%ee A floating point number of the form
- [[--]]dd..ddddddddddddEE[[++--]]dddd.
-
- %%ff A floating point number of the form [[--]]dddddd..dddddddddddd.
-
- %%gg Use ee or ff conversion, whichever is shorter, with
- nonsignificant zeros suppressed.
-
- %%oo An unsigned octal number (again, an integer).
-
- %%ss A character string.
-
- %%xx An unsigned hexadecimal number (an integer).
-
- %%XX Like %%xx, but using AABBCCDDEEFF instead of aabbccddeeff.
-
- %%%% A single %% character; no argument is converted.
-
-
-
- Free Software Foundation Apr 18 1994 13
-
-
-
-
-
- GAWK(1) Utility Commands GAWK(1)
-
-
- There are optional, additional parameters that may lie
- between the %% and the control letter:
-
- -- The expression should be left-justified within its
- field.
-
- _w_i_d_t_h The field should be padded to this width. If the
- number has a leading zero, then the field will be
- padded with zeros. Otherwise it is padded with
- blanks. This applies even to the non-numeric out-
- put formats.
-
- .._p_r_e_c A number indicating the maximum width of strings or
- digits to the right of the decimal point.
-
- The dynamic _w_i_d_t_h and _p_r_e_c capabilities of the ANSI C
- pprriinnttff(()) routines are supported. A ** in place of either
- the wwiiddtthh or pprreecc specifications will cause their values
- to be taken from the argument list to pprriinnttff or sspprriinnttff(()).
-
- SSppeecciiaall FFiillee NNaammeess
- When doing I/O redirection from either pprriinntt or pprriinnttff
- into a file, or via ggeettlliinnee from a file, _g_a_w_k recognizes
- certain special filenames internally. These filenames
- allow access to open file descriptors inherited from
- _g_a_w_k's parent process (usually the shell). Other special
- filenames provide access information about the running
- ggaawwkk process. The filenames are:
-
- //ddeevv//ppiidd Reading this file returns the process ID of
- the current process, in decimal, terminated
- with a newline.
-
- //ddeevv//ppppiidd Reading this file returns the parent process
- ID of the current process, in decimal, termi-
- nated with a newline.
-
- //ddeevv//ppggrrppiidd Reading this file returns the process group ID
- of the current process, in decimal, terminated
- with a newline.
-
- //ddeevv//uusseerr Reading this file returns a single record ter-
- minated with a newline. The fields are sepa-
- rated with blanks. $$11 is the value of the
- _g_e_t_u_i_d(2) system call, $$22 is the value of the
- _g_e_t_e_u_i_d(2) system call, $$33 is the value of the
- _g_e_t_g_i_d(2) system call, and $$44 is the value of
- the _g_e_t_e_g_i_d(2) system call. If there are any
- additional fields, they are the group IDs
- returned by _g_e_t_g_r_o_u_p_s(2). Multiple groups may
- not be supported on all systems.
-
- //ddeevv//ssttddiinn The standard input.
-
-
-
-
- Free Software Foundation Apr 18 1994 14
-
-
-
-
-
- GAWK(1) Utility Commands GAWK(1)
-
-
- //ddeevv//ssttddoouutt The standard output.
-
- //ddeevv//ssttddeerrrr The standard error output.
-
- //ddeevv//ffdd//_n The file associated with the open file
- descriptor _n.
-
- These are particularly useful for error messages. For
- example:
-
- pprriinntt ""YYoouu bblleeww iitt!!"" >> ""//ddeevv//ssttddeerrrr""
-
- whereas you would otherwise have to use
-
- pprriinntt ""YYoouu bblleeww iitt!!"" || ""ccaatt 11>>&&22""
-
- These file names may also be used on the command line to
- name data files.
-
- NNuummeerriicc FFuunnccttiioonnss
- AWK has the following pre-defined arithmetic functions:
-
-
- aattaann22((_y,, _x)) returns the arctangent of _y_/_x in radians.
-
- ccooss((_e_x_p_r)) returns the cosine in radians.
-
- eexxpp((_e_x_p_r)) the exponential function.
-
- iinntt((_e_x_p_r)) truncates to integer.
-
- lloogg((_e_x_p_r)) the natural logarithm function.
-
- rraanndd(()) returns a random number between 0 and 1.
-
- ssiinn((_e_x_p_r)) returns the sine in radians.
-
- ssqqrrtt((_e_x_p_r)) the square root function.
-
- ssrraanndd((_e_x_p_r)) use _e_x_p_r as a new seed for the random number
- generator. If no _e_x_p_r is provided, the time of
- day will be used. The return value is the
- previous seed for the random number generator.
-
- SSttrriinngg FFuunnccttiioonnss
- AWK has the following pre-defined string functions:
-
-
- ggssuubb((_r,, _s,, _t)) for each substring matching the
- regular expression _r in the string
- _t, substitute the string _s, and
- return the number of substitu-
- tions. If _t is not supplied, use
- $$00.
-
-
-
- Free Software Foundation Apr 18 1994 15
-
-
-
-
-
- GAWK(1) Utility Commands GAWK(1)
-
-
- iinnddeexx((_s,, _t)) returns the index of the string _t
- in the string _s, or 0 if _t is not
- present.
-
- lleennggtthh((_s)) returns the length of the string
- _s, or the length of $$00 if _s is not
- supplied.
-
- mmaattcchh((_s,, _r)) returns the position in _s where
- the regular expression _r occurs,
- or 0 if _r is not present, and sets
- the values of RRSSTTAARRTT and RRLLEENNGGTTHH.
-
- sspplliitt((_s,, _a,, _r)) splits the string _s into the array
- _a on the regular expression _r, and
- returns the number of fields. If _r
- is omitted, FFSS is used instead.
- The array _a is cleared first.
-
- sspprriinnttff((_f_m_t,, _e_x_p_r_-_l_i_s_t)) prints _e_x_p_r_-_l_i_s_t according to _f_m_t,
- and returns the resulting string.
-
- ssuubb((_r,, _s,, _t)) just like ggssuubb(()), but only the
- first matching substring is
- replaced.
-
- ssuubbssttrr((_s,, _i,, _n)) returns the _n-character substring
- of _s starting at _i. If _n is omit-
- ted, the rest of _s is used.
-
- ttoolloowweerr((_s_t_r)) returns a copy of the string _s_t_r,
- with all the upper-case characters
- in _s_t_r translated to their corre-
- sponding lower-case counterparts.
- Non-alphabetic characters are left
- unchanged.
-
- ttoouuppppeerr((_s_t_r)) returns a copy of the string _s_t_r,
- with all the lower-case characters
- in _s_t_r translated to their corre-
- sponding upper-case counterparts.
- Non-alphabetic characters are left
- unchanged.
-
- TTiimmee FFuunnccttiioonnss
- Since one of the primary uses of AWK programs is process-
- ing log files that contain time stamp information, _g_a_w_k
- provides the following two functions for obtaining time
- stamps and formatting them.
-
-
- ssyyssttiimmee(()) returns the current time of day as the number of
- seconds since the Epoch (Midnight UTC, January
- 1, 1970 on POSIX systems).
-
-
-
- Free Software Foundation Apr 18 1994 16
-
-
-
-
-
- GAWK(1) Utility Commands GAWK(1)
-
-
- ssttrrffttiimmee((_f_o_r_m_a_t, _t_i_m_e_s_t_a_m_p))
- formats _t_i_m_e_s_t_a_m_p according to the specification
- in _f_o_r_m_a_t_. The _t_i_m_e_s_t_a_m_p should be of the same
- form as returned by ssyyssttiimmee(()). If _t_i_m_e_s_t_a_m_p is
- missing, the current time of day is used. See
- the specification for the ssttrrffttiimmee(()) function in
- ANSI C for the format conversions that are guar-
- anteed to be available. A public-domain version
- of _s_t_r_f_t_i_m_e(3) and a man page for it are shipped
- with _g_a_w_k; if that version was used to build
- _g_a_w_k, then all of the conversions described in
- that man page are available to _g_a_w_k_.
-
- SSttrriinngg CCoonnssttaannttss
- String constants in AWK are sequences of characters
- enclosed between double quotes (""). Within strings, cer-
- tain _e_s_c_a_p_e _s_e_q_u_e_n_c_e_s are recognized, as in C. These are:
-
-
- \\\\ A literal backslash.
-
- \\aa The ``alert'' character; usually the ASCII BEL char-
- acter.
-
- \\bb backspace.
-
- \\ff form-feed.
-
- \\nn new line.
-
- \\rr carriage return.
-
- \\tt horizontal tab.
-
- \\vv vertical tab.
-
- \\xx_h_e_x _d_i_g_i_t_s
- The character represented by the string of hexadeci-
- mal digits following the \\xx. As in ANSI C, all fol-
- lowing hexadecimal digits are considered part of the
- escape sequence. (This feature should tell us some-
- thing about language design by committee.) E.g.,
- ""\\xx11BB"" is the ASCII ESC (escape) character.
-
- \\_d_d_d The character represented by the 1-, 2-, or 3-digit
- sequence of octal digits. E.g. ""\\003333"" is the ASCII
- ESC (escape) character.
-
- \\_c The literal character _c.
-
- The escape sequences may also be used inside constant reg-
- ular expressions (e.g., //[[ \\tt\\ff\\nn\\rr\\vv]]// matches whitespace
- characters).
-
-
-
-
- Free Software Foundation Apr 18 1994 17
-
-
-
-
-
- GAWK(1) Utility Commands GAWK(1)
-
-
- FFUUNNCCTTIIOONNSS
- Functions in AWK are defined as follows:
-
- ffuunnccttiioonn _n_a_m_e((_p_a_r_a_m_e_t_e_r _l_i_s_t)) {{ _s_t_a_t_e_m_e_n_t_s }}
-
- Functions are executed when called from within the action
- parts of regular pattern-action statements. Actual parame-
- ters supplied in the function call are used to instantiate
- the formal parameters declared in the function. Arrays
- are passed by reference, other variables are passed by
- value.
-
- Since functions were not originally part of the AWK lan-
- guage, the provision for local variables is rather clumsy:
- They are declared as extra parameters in the parameter
- list. The convention is to separate local variables from
- real parameters by extra spaces in the parameter list. For
- example:
-
- ffuunnccttiioonn ff((pp,, qq,, aa,, bb)) {{ ## aa && bb aarree llooccaall
- .......... }}
-
- //aabbcc// {{ ...... ;; ff((11,, 22)) ;; ...... }}
-
- The left parenthesis in a function call is required to
- immediately follow the function name, without any inter-
- vening white space. This is to avoid a syntactic ambigu-
- ity with the concatenation operator. This restriction
- does not apply to the built-in functions listed above.
-
- Functions may call each other and may be recursive. Func-
- tion parameters used as local variables are initialized to
- the null string and the number zero upon function invoca-
- tion.
-
- The word ffuunncc may be used in place of ffuunnccttiioonn.
-
- EEXXAAMMPPLLEESS
- Print and sort the login names of all users:
-
- BBEEGGIINN {{ FFSS == ""::"" }}
- {{ pprriinntt $$11 || ""ssoorrtt"" }}
-
- Count lines in a file:
-
- {{ nnlliinneess++++ }}
- EENNDD {{ pprriinntt nnlliinneess }}
-
- Precede each line by its number in the file:
-
- {{ pprriinntt FFNNRR,, $$00 }}
-
- Concatenate and line number (a variation on a theme):
-
-
-
-
- Free Software Foundation Apr 18 1994 18
-
-
-
-
-
- GAWK(1) Utility Commands GAWK(1)
-
-
- {{ pprriinntt NNRR,, $$00 }}
-
- SSEEEE AALLSSOO
- _e_g_r_e_p(1), _g_e_t_p_i_d(2), _g_e_t_p_p_i_d(2), _g_e_t_p_g_r_p(2), _g_e_t_u_i_d(2),
- _g_e_t_e_u_i_d(2), _g_e_t_g_i_d(2), _g_e_t_e_g_i_d(2), _g_e_t_g_r_o_u_p_s(2)
-
- _T_h_e _A_W_K _P_r_o_g_r_a_m_m_i_n_g _L_a_n_g_u_a_g_e, Alfred V. Aho, Brian W.
- Kernighan, Peter J. Weinberger, Addison-Wesley, 1988. ISBN
- 0-201-07981-X.
-
- _T_h_e _G_A_W_K _M_a_n_u_a_l, Edition 0.15, published by the Free Soft-
- ware Foundation, 1993.
-
- PPOOSSIIXX CCOOMMPPAATTIIBBIILLIITTYY
- A primary goal for _g_a_w_k is compatibility with the POSIX
- standard, as well as with the latest version of UNIX _a_w_k.
- To this end, _g_a_w_k incorporates the following user visible
- features which are not described in the AWK book, but are
- part of _a_w_k in System V Release 4, and are in the POSIX
- standard.
-
- The --vv option for assigning variables before program exe-
- cution starts is new. The book indicates that command
- line variable assignment happens when _a_w_k would otherwise
- open the argument as a file, which is after the BBEEGGIINN
- block is executed. However, in earlier implementations,
- when such an assignment appeared before any file names,
- the assignment would happen _b_e_f_o_r_e the BBEEGGIINN block was
- run. Applications came to depend on this ``feature.''
- When _a_w_k was changed to match its documentation, this
- option was added to accommodate applications that depended
- upon the old behavior. (This feature was agreed upon by
- both the AT&T and GNU developers.)
-
- The --WW option for implementation specific features is from
- the POSIX standard.
-
- When processing arguments, _g_a_w_k uses the special option
- ``----'' to signal the end of arguments. In compatibility
- mode, it will warn about, but otherwise ignore, undefined
- options. In normal operation, such arguments are passed
- on to the AWK program for it to process.
-
- The AWK book does not define the return value of ssrraanndd(()).
- The System V Release 4 version of UNIX _a_w_k (and the POSIX
- standard) has it return the seed it was using, to allow
- keeping track of random number sequences. Therefore
- ssrraanndd(()) in _g_a_w_k also returns its current seed.
-
- Other new features are: The use of multiple --ff options
- (from MKS _a_w_k); the EENNVVIIRROONN array; the \\aa, and \\vv escape
- sequences (done originally in _g_a_w_k and fed back into
- AT&T's); the ttoolloowweerr(()) and ttoouuppppeerr(()) built-in functions
- (from AT&T); and the ANSI C conversion specifications in
-
-
-
- Free Software Foundation Apr 18 1994 19
-
-
-
-
-
- GAWK(1) Utility Commands GAWK(1)
-
-
- pprriinnttff (done first in AT&T's version).
-
- GGNNUU EEXXTTEENNSSIIOONNSS
- _G_a_w_k has some extensions to POSIX _a_w_k. They are described
- in this section. All the extensions described here can be
- disabled by invoking _g_a_w_k with the --WW ccoommppaatt option.
-
- The following features of _g_a_w_k are not available in POSIX
- _a_w_k.
-
- +o The \\xx escape sequence.
-
- +o The ssyyssttiimmee(()) and ssttrrffttiimmee(()) functions.
-
- +o The special file names available for I/O redirec-
- tion are not recognized.
-
- +o The AARRGGIINNDD and EERRRRNNOO variables are not special.
-
- +o The IIGGNNOORREECCAASSEE variable and its side-effects are
- not available.
-
- +o The FFIIEELLDDWWIIDDTTHHSS variable and fixed width field
- splitting.
-
- +o No path search is performed for files named via
- the --ff option. Therefore the AAWWKKPPAATTHH environment
- variable is not special.
-
- +o The use of nneexxtt ffiillee to abandon processing of the
- current input file.
-
- +o The use of ddeelleettee _a_r_r_a_y to delete the entire con-
- tents of an array.
-
- The AWK book does not define the return value of the
- cclloossee(()) function. _G_a_w_k's cclloossee(()) returns the value from
- _f_c_l_o_s_e(3), or _p_c_l_o_s_e(3), when closing a file or pipe,
- respectively.
-
- When _g_a_w_k is invoked with the --WW ccoommppaatt option, if the _f_s
- argument to the --FF option is ``t'', then FFSS will be set to
- the tab character. Since this is a rather ugly special
- case, it is not the default behavior. This behavior also
- does not occur if --WW ppoossiixx has been specified.
-
- HHIISSTTOORRIICCAALL FFEEAATTUURREESS
- There are two features of historical AWK implementations
- that _g_a_w_k supports. First, it is possible to call the
- lleennggtthh(()) built-in function not only with no argument, but
- even without parentheses! Thus,
-
- aa == lleennggtthh
-
-
-
-
- Free Software Foundation Apr 18 1994 20
-
-
-
-
-
- GAWK(1) Utility Commands GAWK(1)
-
-
- is the same as either of
-
- aa == lleennggtthh(())
- aa == lleennggtthh(($$00))
-
- This feature is marked as ``deprecated'' in the POSIX
- standard, and _g_a_w_k will issue a warning about its use if
- --WW lliinntt is specified on the command line.
-
- The other feature is the use of the ccoonnttiinnuuee statement
- outside the body of a wwhhiillee, ffoorr, or ddoo loop. Traditional
- AWK implementations have treated such usage as equivalent
- to the nneexxtt statement. _G_a_w_k will support this usage if --WW
- ppoossiixx has not been specified.
-
- EENNVVIIRROONNMMEENNTT VVAARRIIAABBLLEESS
- If PPOOSSIIXXLLYY__CCOORRRREECCTT exists in the environment, then _g_a_w_k
- behaves exactly as if ----ppoossiixx had been specified on the
- command line. If ----lliinntt has been specified, _g_a_w_k will
- issue a warning message to this effect.
-
- BBUUGGSS
- The --FF option is not necessary given the command line
- variable assignment feature; it remains only for backwards
- compatibility.
-
- If your system actually has support for //ddeevv//ffdd and the
- associated //ddeevv//ssttddiinn, //ddeevv//ssttddoouutt, and //ddeevv//ssttddeerrrr files,
- you may get different output from _g_a_w_k than you would get
- on a system without those files. When _g_a_w_k interprets
- these files internally, it synchronizes output to the
- standard output with output to //ddeevv//ssttddoouutt, while on a
- system with those files, the output is actually to differ-
- ent open files. Caveat Emptor.
-
- VVEERRSSIIOONN IINNFFOORRMMAATTIIOONN
- This man page documents _g_a_w_k, version 2.15.
-
- Starting with the 2.15 version of _g_a_w_k, the --cc, --VV, --CC,
- --aa, and --ee options of the 2.11 version are no longer rec-
- ognized. This fact will not even be documented in the
- manual page for version 2.16.
-
- AAUUTTHHOORRSS
- The original version of UNIX _a_w_k was designed and imple-
- mented by Alfred Aho, Peter Weinberger, and Brian
- Kernighan of AT&T Bell Labs. Brian Kernighan continues to
- maintain and enhance it.
-
- Paul Rubin and Jay Fenlason, of the Free Software Founda-
- tion, wrote _g_a_w_k, to be compatible with the original ver-
- sion of _a_w_k distributed in Seventh Edition UNIX. John
- Woods contributed a number of bug fixes. David Trueman,
- with contributions from Arnold Robbins, made _g_a_w_k
-
-
-
- Free Software Foundation Apr 18 1994 21
-
-
-
-
-
- GAWK(1) Utility Commands GAWK(1)
-
-
- compatible with the new version of UNIX _a_w_k.
-
- The initial DOS port was done by Conrad Kwok and Scott
- Garfinkle. Scott Deifik is the current DOS maintainer.
- Pat Rankin did the port to VMS, and Michal Jaegermann did
- the port to the Atari ST. The port to OS/2 was done by
- Kai Uwe Rommel, with contributions and help from Darrel
- Hankerson.
-
- AACCKKNNOOWWLLEEDDGGEEMMEENNTTSS
- Brian Kernighan of Bell Labs provided valuable assistance
- during testing and debugging. We thank him.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Free Software Foundation Apr 18 1994 22
-
-
-