Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ awk(1) — A/UX 2.0

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

grep(1)

lex(1)

sed(1)




awk(1) awk(1)
NAME awk - pattern scanning and processing language SYNOPSIS awk [-f file...] [-Fc] [prog] [parameters] [file...] DESCRIPTION awk scans each input file for lines that match any of a set of patterns specified in prog. With each pattern in prog there can be an associated action that will be performed when a line of a file matches the pattern. The set of pat- terns may appear literally as prog, or in a file specified as -f file. The prog string should be enclosed in single quotes (') to protect it from the shell. parameters, in the form x=... y=... etc., may be passed to awk. Files are read in order; if there are no files, the standard input is read. The filename - 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; see below). The fields are denoted $1, $2, ...; the variable $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 al- ways 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 break continue { [ statement ] ... } variable = expression print [ expression-list ] [ >expression ] printf format [ , expression-list ] [ >expression ] next exit Statements are terminated by semicolons, newlines, or right braces. An empty expression-list stands for the whole line. Expressions take on string or numeric values as appropriate, April, 1990 1



awk(1) awk(1)
and are built using the operators +, -, *, /, %, and con- catenation (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. Ar- ray subscripts may be any string, not necessarily numeric; this allows for a form of associative memory. String con- stants are quoted ("). The print statement prints its arguments on the standard output (or on 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 expres- sion list according to the format specified (see printf(3S)). The built-in function length 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 exp, log, sqrt, and int. The last truncates its argument to an integer; substr (s ,m ,n) returns the n-character substring of s that begins at position m. 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 expres- sions. Regular expressions must be surrounded by slashes and are as in egrep (see grep(1)). Isolated regular expres- sions in a pattern apply to the entire line. Regular ex- pressions may also occur in relational expressions. A pat- tern 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 re- lational 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: 2 April, 1990



awk(1) awk(1)
BEGIN { FS = c } or by using the -Fc flag 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; OFS, the output field separator (default blank); ORS, the output record separator (default newline); and OFMT, the output format for numbers (default %.6g). EXAMPLES The command awk "length > 72" filea prints lines longer than 72 characters on the standard out- put. awk '{ print $2, $1 }' filea prints the first two fields of each line in opposite order. awk '{ s += $1 } END {print "sum is", s, "average is", s/NR }' filea adds up the first column and prints the sum and average. awk '{ for (i = NF; i > 0; --i) print $i }' filea prints all the fields of each line in reverse order. The output prints one field per line. awk "/start/, /stop/" filea prints all lines between start/stop pattern pairs, for every such pair in the file. FILES /usr/bin/awk SEE ALSO grep(1), lex(1), sed(1). ``awk Reference'' in A/UX Programming Languages and Tools, Volume 2. BUGS Input white space is not preserved on output if fields are involved. April, 1990 3



awk(1) awk(1)
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, con- catenate the null string ("") to it. 4 April, 1990

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