|
|
1.1 root 1: .\" @(#)awk.1 6.1 (Berkeley) 4/29/85
2: .\"
3: .TH AWK 1 "April 29, 1985"
4: .AT 3
5: .SH NAME
6: awk \- pattern scanning and processing language
7: .SH SYNOPSIS
8: .B awk
9: [
10: .BI \-F c
11: ]
12: [ prog ] [ file ] ...
13: .SH DESCRIPTION
14: .I Awk
15: scans each input
16: .I file
17: for lines that match any of a set of patterns specified in
18: .IR prog .
19: With each pattern in
20: .I prog
21: there can be an associated action that will be performed
22: when a line of a
23: .I file
24: matches the pattern.
25: The set of patterns may appear literally as
26: .I prog,
27: or in a file
28: specified as
29: .B \-f
30: .IR file .
31: .PP
32: Files are read in order;
33: if there are no files, the standard input is read.
34: The file name `\-'
35: means the standard input.
36: Each line is matched against the
37: pattern portion of every pattern-action statement;
38: the associated action is performed for each matched pattern.
39: .PP
40: An input line is made up of fields separated by white space.
41: (This default can be changed by using FS,
42: .IR "vide infra" ".)"
43: The fields are denoted $1, $2, ... ;
44: $0 refers to the entire line.
45: .PP
46: .PP
47: A pattern-action statement has the form
48: .PP
49: pattern { action }
50: .PP
51: A missing { action } means print the line;
52: a missing pattern always matches.
53: .PP
54: An action is a sequence of statements.
55: A statement can be one of the following:
56: .PP
57: .nf
58: if ( conditional ) statement [ else statement ]
59: while ( conditional ) statement
60: for ( expression ; conditional ; expression ) statement
61: break
62: continue
63: { [ statement ] ... }
64: variable = expression
65: print [ expression-list ] [ >expression ]
66: printf format [ , expression-list ] [ >expression ]
67: next # skip remaining patterns on this input line
68: exit # skip the rest of the input
69: .fi
70: .PP
71: Statements are terminated by
72: semicolons, newlines or right braces.
73: An empty expression-list stands for the whole line.
74: Expressions take on string or numeric values as appropriate,
75: and are built using the operators
76: +, \-, *, /, %, and concatenation (indicated by a blank).
77: The C operators ++, \-\-, +=, \-=, *=, /=, and %=
78: are also available in expressions.
79: Variables may be scalars, array elements
80: (denoted
81: x[i])
82: or fields.
83: Variables are initialized to the null string.
84: Array subscripts may be any string,
85: not necessarily numeric;
86: this allows for a form of associative memory.
87: String constants are quoted "...".
88: .PP
89: The
90: .I print
91: statement prints its arguments on the standard output
92: (or on a file if
93: .I >file
94: is present), separated by the current output field separator,
95: and terminated by the output record separator.
96: The
97: .I printf
98: statement formats its expression list according to the format
99: (see
100: .IR printf (3S)).
101: .PP
102: The built-in function
103: .I length
104: returns the length of its argument
105: taken as a string,
106: or of the whole line if no argument.
107: There are also built-in functions
108: .I exp,
109: .I log,
110: .I sqrt,
111: and
112: .IR int .
113: The last truncates its argument to an integer.
114: .IR substr(s,\ m,\ n)
115: returns the
116: .IR n -character
117: substring of
118: .I s
119: that begins at position
120: .IR m .
121: The function
122: .IR sprintf(fmt,\ expr,\ expr,\ ...)
123: formats the expressions
124: according to the
125: .IR printf (3S)
126: format given by
127: .I fmt
128: and returns the resulting string.
129: .PP
130: Patterns are arbitrary Boolean combinations
131: (!, \(or\(or, &&, and parentheses) of
132: regular expressions and
133: relational expressions.
134: Regular expressions must be surrounded
135: by slashes and are as in
136: .IR egrep .
137: Isolated regular expressions
138: in a pattern apply to the entire line.
139: Regular expressions may also occur in
140: relational expressions.
141: .PP
142: A pattern may consist of two patterns separated by a comma;
143: in this case, the action is performed for all lines
144: between an occurrence of the first pattern
145: and the next occurrence of the second.
146: .PP
147: .nf
148: A relational expression is one of the following:
149: .PP
150: .nf
151: expression matchop regular-expression
152: expression relop expression
153: .PP
154: .fi
155: where a relop is any of the six relational operators in C,
156: and a matchop is either ~ (for contains)
157: or !~ (for does not contain).
158: A conditional is an arithmetic expression,
159: a relational expression,
160: or a Boolean combination
161: of these.
162: .PP
163: The special patterns
164: BEGIN
165: and
166: END
167: may be used to capture control before the first input line is read
168: and after the last.
169: BEGIN must be the first pattern, END the last.
170: .PP
171: A single character
172: .I c
173: may be used to separate the fields by starting
174: the program with
175: .PP
176: BEGIN { FS = "c" }
177: .PP
178: or by using the
179: .BI \-F c
180: option.
181: .PP
182: Other variable names with special meanings
183: include NF, the number of fields in the current record;
184: NR, the ordinal number of the current record;
185: FILENAME, the name of the current input file;
186: OFS, the output field separator (default blank);
187: ORS, the output record separator (default newline);
188: and
189: OFMT, the output format for numbers (default "%.6g").
190: .PP
191: .SH EXAMPLES
192: .PP
193: Print lines longer than 72 characters:
194: .PP
195: .nf
196: length > 72
197: .fi
198: .PP
199: Print first two fields in opposite order:
200: .PP
201: .nf
202: { print $2, $1 }
203: .fi
204: .PP
205: Add up first column, print sum and average:
206: .PP
207: .nf
208: { s += $1 }
209: END { print "sum is", s, " average is", s/NR }
210: .fi
211: .PP
212: Print fields in reverse order:
213: .PP
214: .nf
215: { for (i = NF; i > 0; \-\-i) print $i }
216: .fi
217: .PP
218: Print all lines between start/stop pairs:
219: .PP
220: .nf
221: /start/, /stop/
222: .fi
223: .PP
224: Print all lines whose first field is different from previous one:
225: .PP
226: .nf
227: $1 != prev { print; prev = $1 }
228: .fi
229: .SH SEE ALSO
230: .PP
231: lex(1), sed(1)
232: .br
233: A. V. Aho, B. W. Kernighan, P. J. Weinberger,
234: .I
235: Awk \- a pattern scanning and processing language
236: .SH BUGS
237: There are no explicit conversions between numbers and strings.
238: To force an expression to be treated as a number add 0 to it;
239: to force it to be treated as a string concatenate ""
240: to it.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.