[0m


AWK(1)		    UNIX Programmer's Manual		   AWK(1)



[1mNAME
     [0mawk - pattern scanning and processing language

[1mSYNOPSIS
     awk [0m[ [1m-F[0m_c ] [ prog ] [ parameters ][ file ] ...

[1mDESCRIPTION
     [0m_A_w_k scans each input _f_i_l_e for lines that match any of a set
     of patterns specified in _p_r_o_g.  With each pattern in _p_r_o_g
     there can be an associated action that will be performed
     when a line of a _f_i_l_e matches the pattern.  The set of pat-
     terns may appear literally as _p_r_o_g, or in a file specified
     as [1m-f [0m_f_i_l_e.

     Files are read in order; if there are no files, the standard
     input is read.  The file name `-' means the standard input.
     Each line is matched against the pattern portion of every
     pattern-action statement; the associated action is performed
     for each matched pattern.

     An input line is made up of fields separated by white space.
     (This default can be changed by using FS, _v_i_d_e _i_n_f_r_a.) The
     fields are denoted $1, $2, ... ; $0 refers to the entire
     line.

     A pattern-action statement has the form

	  pattern { action }

     A missing { action } means print the line; a missing pattern
     always matches.

     An action is a sequence of statements.  A statement can be
     one of the following:

	  if ( conditional ) statement [ else statement ]
	  while ( conditional ) statement
	  for ( expression ; conditional ; expression ) statement
	  for ( variable in array ) statement
	  break
	  continue
	  { [ statement ] ... }
	  variable = expression
	  print [ expression-list ] [ >expression ]
	  print [ expression-list ] [ >>expression ]
	  print [ expression-list ] [ |expression ]
	  printf format [ , expression-list ] [ >expression ]
	  printf format [ , expression-list ] [ >>expression ]
	  printf format [ , expression-list ] [ |expression ]
	  next (skip remaining patterns on this input line)
	  exit (skip the rest of the input)
	  #    (comment; ignore text up to end of line)



Printed 21/11/91    Revision 1.4 of 09/10/90			1






AWK(1)		    UNIX Programmer's Manual		   AWK(1)



     Statements are terminated by semicolons, newlines or right
     braces.  Long statements may be split across multiple lines
     by ending each partial line with backslash, `\'.  An empty
     expression-list stands for the whole line.  Expressions take
     on string or numeric values as appropriate, and are built
     using the operators +, -, *, /, %,  and concatenation (indi-
     cated by a blank).  The C operators ++, --, +=, -=, *=, /=,
     and %= are also available in expressions.

     Variables may be scalars, array elements (denoted x[i]) or
     fields.  String constants are quoted "...".  Variables may
     be initialized to specific values from the command line by
     including arguments of the form _n_a_m_e=_v_a_l_u_e before any _f_i_l_e
     arguments.  Otherwise all variables are initialized to the
     null string.

     Array subscripts may be any string, not necessarily numeric;
     this allows for a form of associative memory.  Arrays may be
     traversed by means of the second form of the _f_o_r loop shown
     above.  In this the _v_a_r_i_a_b_l_e is set to each of the valid
     indexes of _a_r_r_a_y in turn.	The order in which the indexes
     are returned is undefined.

     The _p_r_i_n_t statement prints its arguments on the standard
     output, separated by the current output field separator, and
     terminated by the output record separator.  The _p_r_i_n_t_f
     statement formats its expression list according to the for-
     mat (see _p_r_i_n_t_f(3S)).

     If >_e_x_p_r_e_s_s_i_o_n is appended to either of these commands, the
     output is sent to the file named by the expression.  If
     >>_e_x_p_r_e_s_s_i_o_n is present, the file is appended.  If |_e_x_p_r_e_s_-
     _s_i_o_n is present, the output is sent to the standard input of
     the named command.  Files and pipes are kept open for the
     duration of the awk program; subsequent output goes to the
     same file or pipe provided the spelling of _e_x_p_r_e_s_s_i_o_n is
     identical.  Up to ten commands and/or files may be used.

     The built-in function _l_e_n_g_t_h returns the length of its argu-
     ment taken as a string, or of the whole line if no argument.
     There are also built-in functions _e_x_p, _l_o_g, _s_q_r_t, and _i_n_t,
     which perform exponential, natural logarithm, square root
     and truncation to integer respectively.

     The function _s_u_b_s_t_r(_s, _m, _n) returns the _n-character sub-
     string of _s that begins at position _m.  The function
     _s_p_l_i_t(_s_1, _a_r_r, _s_2) assigns the fields of string _s_1 to suc-
     cessive elements of array _a_r_r using the characters of string
     _s_2 as field separators.  Assignments start at _a_r_r[_1].  The
     function _i_n_d_e_x(_s_1, _s_2) returns the leftmost position at
     which the string _s_2 occurs in _s_1, or 0 if it does not occur.
     String positions for _i_n_d_e_x and _s_u_b_s_t_r start at 1.



Printed 21/11/91    Revision 1.4 of 09/10/90			2






AWK(1)		    UNIX Programmer's Manual		   AWK(1)



     The _g_e_t_l_i_n_e function (note: no parentheses) immediately
     reads the next input record and sets $_0 and _N_R accordingly.
     This does not alter control flow within the awk program, and
     the line fetched will not be compared against any of the
     patterns.	The _g_e_t_l_i_n_e function returns 0 on end of file, 1
     otherwise.

     The function _s_p_r_i_n_t_f(_f_m_t, _e_x_p_r, _e_x_p_r, ...) formats the
     expressions according to the _p_r_i_n_t_f(3S) format given by _f_m_t
     and returns the resulting string.

     Patterns are arbitrary Boolean combinations (!, ||, &&, and
     parentheses) of regular expressions and relational expres-
     sions.  Regular expressions must be surrounded by slashes
     and are as in _e_g_r_e_p.  Isolated regular expressions in a pat-
     tern apply to the entire line.  Regular expressions may also
     occur in relational expressions.

     A pattern may consist of two patterns separated by a comma;
     in this case, the action is performed for all lines between
     an occurrence of the first pattern and the next occurrence
     of the second.

     A relational expression is one of the following:

	  expression matchop regular-expression
	  expression relop expression

     where a relop is any of the six relational operators in C,
     and a matchop is either ~ (for contains) or !~ (for does not
     contain).	A conditional is an arithmetic expression, a
     relational expression, or a Boolean combination of these.

     The special patterns BEGIN and END may be used to capture
     control before the first input line is read and after the
     last.  BEGIN must be the first pattern, END the last.

     A single character _c may be used to separate the fields by
     starting the program with

	  BEGIN { FS = "c" }

     or by using the [1m-F[0m_c option.

     Other variable names with special meanings include NF, the
     number of fields in the current record; NR, the ordinal
     number of the current record; FILENAME, the name of the
     current input file; RS, the input record separator (default
     newline); OFS, the output field separator (default blank);
     ORS, the output record separator (default newline); and
     OFMT, the output format for numbers (default "%.6g").




Printed 21/11/91    Revision 1.4 of 09/10/90			3






AWK(1)		    UNIX Programmer's Manual		   AWK(1)



[1mEXAMPLES
     [0mPrint lines longer than 72 characters:

	  length > 72

     Print first two fields in opposite order:

	  { print $2, $1 }

     Add up first column, print sum and average:

	       { s += $1 }
	  END  { print "sum is", s, " average is", s/NR }

     Print fields in reverse order:

	  { for (i = NF; i > 0; --i) print $i }

     Print all lines between start/stop pairs:

	  /start/, /stop/

     Print all lines whose first field is different from previous
     one:

	  $1 != prev { print; prev = $1 }

[1mSEE ALSO
     [0mlex(1), sed(1)
     A. V. Aho, B. W. Kernighan, P. J. Weinberger, _A_w_k - _a _p_a_t_-
     _t_e_r_n _s_c_a_n_n_i_n_g _a_n_d _p_r_o_c_e_s_s_i_n_g _l_a_n_g_u_a_g_e

[1mBUGS
     [0mThere are no explicit conversions between numbers and
     strings.  To force an expression to be treated as a number
     add 0 to it; to force it to be treated as a string concaten-
     ate "" to it.

     Within a character class regular expression (ie "[ ... ]" )
     _a_w_k treats [1m'\' [0mfollowed by [1m']' [0mas an escaped [1m']'[0m, for rea-
     sons of historic compatibility.














Printed 21/11/91    Revision 1.4 of 09/10/90			4



[0m