Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ awk(1) — HP-UX 7.01

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

lex(1)

nawk(1)

sed(1)

malloc(3X)

environ(5)

lang(5)

regexp(5)

AWK(1)

NAME

awk − text pattern scanning and processing language

SYNOPSIS

awk [ −Fc ] [ prog | −f awkfile ] [ parameters ] [ file ... ]

Remarks:

For a newer version of this program, see nawk(1).

DESCRIPTION

Awk scans each input file for lines that match any pattern specified in prog. Each pattern in prog is associated with an action that is performed when a line of a file matches the pattern.  A set of pattern-action statements can appear literally as prog, or in a file specified by −f awkfile. The prog string should be enclosed in single quotes (’) to protect it from the shell. 

Parameters, in the form x=... y=... etc., can be passed to awk.

Awk reads each file in order; if none is given, awk reads the standard input.  The file name "hyphen" (−) also represents the standard input.  Each line of a file is matched against the pattern portion of every pattern-action statement; the associated action is performed for each matched pattern. 

An input line is comprised of fields separated by white space.  (This default can be changed by using field separators (see FS below).  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 ]
printf format [ , expression-list ] [ >expression ]
next# skip remaining patterns on this input line
exit# skip the rest of the input

Statements are terminated by semicolons, new-lines, or right braces.  An empty expression-list stands for the entire line.  Expressions take on string or numeric values as appropriate, and are built using the operators +, −, ∗, /, %, and concatenation (indicated by a blank).  The C operators ++, −−, +=, −=, ∗=, /=, and %= are also available in expressions.  Variables may be scalars, array elements (denoted x[i]) or fields. Variables are initialized to the null string. Array subscripts may be any string, not necessarily numeric; this allows for a form of associative memory. String constants are quoted ("); single quotes (’) are not recognized. 

The print statement prints its arguments to the standard output (or to a file if >expr is present), separated by the current output field separator, and terminated by the output record separator.  The printf statement formats its expression list according to the format (see printf(3S)).

The built-in function length returns the length of its argument taken as a string, or the length of the entire line if no argument is given.  There are also built-in functions exp, log, sqrt, and int. The last truncates its argument to an integer; The built-in function split(s1,arr.s2) assigns the fields of the string s1 to successive elements of the array arr , using the characters in string s2 as field separators.  Assignments start at array element arr[1].  substr(s, m, n) returns the n-character substring of s that begins at position m. The built-in function index(s1,s2) returns the leftmost position where the string s2 occurs in s1 or zero if s2 does not occur in s1.  The getline function immediately reads the next input record.  Fields NR and $0 are all set, but control is left at exactly the same spot in the awk program.  The getline function returns 0 on end of file, and 1 otherwise.  The function sprintf(fmt, expr, expr, ...) formats the expressions according to the printf(3S) format given by fmt and returns the resulting string. 

Patterns are arbitrary Boolean combinations ( !, ││, &&, and parentheses) of regular expressions and relational expressions.  Regular expressions must be surrounded by slashes and must be Extended Regular Expressions (see regexp(5)). Isolated regular expressions in a pattern 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 each occurrence of the first and second pattern.

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 can be used to capture control before the first input line and after the last input line is read.  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 −Fc option. 

Other variable names with special meanings include RS, the input record separator (set by new-line); 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; OFS, the output field separator (default blank); ORS, the output record separator (default new-line); and OFMT, the output format for numbers (default %.6g). 

DIAGNOSTICS

Too many fields The number of fields in a record exceeded 99. 

EXAMPLES

Print 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 }

Print file, filling in page numbers starting at 5:

/Page/ { $2 = n++; }
       { print }

     command line:  awk −f program n=5 input

WARNINGS

Input white space is not preserved on output if fields are involved. 

There 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 concatenate the null string () to it.

Awk(1) is obsolescent and will be replaced by nawk(1) in a future HP-UX release. 

SEE ALSO

lex(1), nawk(1), sed(1), malloc(3X), environ(5), lang(5), regexp(5). 

Awk: A Programming Language for Manipulating Data, tutorial in HP-UX Concepts and Tutorials: Text Editors and Processors. 

EXTERNAL INFLUENCES

Environment Variables

LC_COLLATE determines the collating sequence used when evaluating regular expressions and by the relational operators when performing comparisons on string values. 

LC_CTYPE determines the interpretation of text as single and/or multi-byte characters, and the characters matched by character-class expressions in regular expressions. 

If LC_COLLATE or LC_CTYPE is not specified in the environment or is set to the empty string, the value of LANG is used as a default for each unspecified or empty variable.  If LANG is not specified or is set to the empty string, a default of "C" (see lang(5)) is used instead of LANG.  If any internationalization variable contains an invalid setting, awk behaves as if all internationalization variables are set to "C".  See environ(5).

International Code Set Support

Single- and multi-byte character code sets are supported except that variable names must contain only ASCII characters and regular expressions must contain only single-byte characters. 

STANDARDS CONFORMANCE

awk: SVID2, XPG2, XPG3

Hewlett-Packard Company  —  HP-UX Release 7.0: Sept 1989

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026