xref: /freebsd/usr.bin/awk/awk.1 (revision 7d93dd0f345a1ab4f43a9de1934132194010274f)
1e1fe74adSBaptiste Daroussin.\"	$OpenBSD: awk.1,v 1.44 2015/09/14 20:06:58 schwarze Exp $
2e1fe74adSBaptiste Daroussin.\"
3e1fe74adSBaptiste Daroussin.\" Copyright (C) Lucent Technologies 1997
4e1fe74adSBaptiste Daroussin.\" All Rights Reserved
5e1fe74adSBaptiste Daroussin.\"
6e1fe74adSBaptiste Daroussin.\" Permission to use, copy, modify, and distribute this software and
7e1fe74adSBaptiste Daroussin.\" its documentation for any purpose and without fee is hereby
8e1fe74adSBaptiste Daroussin.\" granted, provided that the above copyright notice appear in all
9e1fe74adSBaptiste Daroussin.\" copies and that both that the copyright notice and this
10e1fe74adSBaptiste Daroussin.\" permission notice and warranty disclaimer appear in supporting
11e1fe74adSBaptiste Daroussin.\" documentation, and that the name Lucent Technologies or any of
12e1fe74adSBaptiste Daroussin.\" its entities not be used in advertising or publicity pertaining
13e1fe74adSBaptiste Daroussin.\" to distribution of the software without specific, written prior
14e1fe74adSBaptiste Daroussin.\" permission.
15e1fe74adSBaptiste Daroussin.\"
16e1fe74adSBaptiste Daroussin.\" LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
17e1fe74adSBaptiste Daroussin.\" INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
18e1fe74adSBaptiste Daroussin.\" IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
19e1fe74adSBaptiste Daroussin.\" SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
20e1fe74adSBaptiste Daroussin.\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
21e1fe74adSBaptiste Daroussin.\" IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
22e1fe74adSBaptiste Daroussin.\" ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
23e1fe74adSBaptiste Daroussin.\" THIS SOFTWARE.
24e1fe74adSBaptiste Daroussin.\"
25e1fe74adSBaptiste Daroussin.\"	$FreeBSD$
26*7d93dd0fSYuri Pankov.Dd $Mdocdate: June 6 2020 $
27e1fe74adSBaptiste Daroussin.Dt AWK 1
28e1fe74adSBaptiste Daroussin.Os
29e1fe74adSBaptiste Daroussin.Sh NAME
30e1fe74adSBaptiste Daroussin.Nm awk
31e1fe74adSBaptiste Daroussin.Nd pattern-directed scanning and processing language
32e1fe74adSBaptiste Daroussin.Sh SYNOPSIS
33e1fe74adSBaptiste Daroussin.Nm awk
34e1fe74adSBaptiste Daroussin.Op Fl safe
35*7d93dd0fSYuri Pankov.Op Fl version
36e1fe74adSBaptiste Daroussin.Op Fl d Ns Op Ar n
37e1fe74adSBaptiste Daroussin.Op Fl F Ar fs
38e1fe74adSBaptiste Daroussin.Op Fl v Ar var Ns = Ns Ar value
39e1fe74adSBaptiste Daroussin.Op Ar prog | Fl f Ar progfile
40e1fe74adSBaptiste Daroussin.Ar
41e1fe74adSBaptiste Daroussin.Sh DESCRIPTION
42e1fe74adSBaptiste Daroussin.Nm
43e1fe74adSBaptiste Daroussinscans each input
44e1fe74adSBaptiste Daroussin.Ar file
45e1fe74adSBaptiste Daroussinfor lines that match any of a set of patterns specified literally in
46e1fe74adSBaptiste Daroussin.Ar prog
47e1fe74adSBaptiste Daroussinor in one or more files specified as
48e1fe74adSBaptiste Daroussin.Fl f Ar progfile .
49e1fe74adSBaptiste DaroussinWith each pattern there can be an associated action that will be performed
50e1fe74adSBaptiste Daroussinwhen a line of a
51e1fe74adSBaptiste Daroussin.Ar file
52e1fe74adSBaptiste Daroussinmatches the pattern.
53e1fe74adSBaptiste DaroussinEach line is matched against the
54e1fe74adSBaptiste Daroussinpattern portion of every pattern-action statement;
55e1fe74adSBaptiste Daroussinthe associated action is performed for each matched pattern.
56e1fe74adSBaptiste DaroussinThe file name
57e1fe74adSBaptiste Daroussin.Sq -
58e1fe74adSBaptiste Daroussinmeans the standard input.
59e1fe74adSBaptiste DaroussinAny
60e1fe74adSBaptiste Daroussin.Ar file
61e1fe74adSBaptiste Daroussinof the form
62e1fe74adSBaptiste Daroussin.Ar var Ns = Ns Ar value
63e1fe74adSBaptiste Daroussinis treated as an assignment, not a filename,
64e1fe74adSBaptiste Daroussinand is executed at the time it would have been opened if it were a filename.
65e1fe74adSBaptiste Daroussin.Pp
66e1fe74adSBaptiste DaroussinThe options are as follows:
67e1fe74adSBaptiste Daroussin.Bl -tag -width "-safe "
68e1fe74adSBaptiste Daroussin.It Fl d Ns Op Ar n
69e1fe74adSBaptiste DaroussinDebug mode.
70e1fe74adSBaptiste DaroussinSet debug level to
71e1fe74adSBaptiste Daroussin.Ar n ,
72e1fe74adSBaptiste Daroussinor 1 if
73e1fe74adSBaptiste Daroussin.Ar n
74e1fe74adSBaptiste Daroussinis not specified.
75e1fe74adSBaptiste DaroussinA value greater than 1 causes
76e1fe74adSBaptiste Daroussin.Nm
77e1fe74adSBaptiste Daroussinto dump core on fatal errors.
78e1fe74adSBaptiste Daroussin.It Fl F Ar fs
79e1fe74adSBaptiste DaroussinDefine the input field separator to be the regular expression
80e1fe74adSBaptiste Daroussin.Ar fs .
81e1fe74adSBaptiste Daroussin.It Fl f Ar progfile
82e1fe74adSBaptiste DaroussinRead program code from the specified file
83e1fe74adSBaptiste Daroussin.Ar progfile
84e1fe74adSBaptiste Daroussininstead of from the command line.
85e1fe74adSBaptiste Daroussin.It Fl safe
86e1fe74adSBaptiste DaroussinDisable file output
87e1fe74adSBaptiste Daroussin.Pf ( Ic print No > ,
88e1fe74adSBaptiste Daroussin.Ic print No >> ) ,
89e1fe74adSBaptiste Daroussinprocess creation
90e1fe74adSBaptiste Daroussin.Po
91e1fe74adSBaptiste Daroussin.Ar cmd | Ic getline ,
92e1fe74adSBaptiste Daroussin.Ic print | ,
93e1fe74adSBaptiste Daroussin.Ic system
94e1fe74adSBaptiste Daroussin.Pc
95e1fe74adSBaptiste Daroussinand access to the environment
96e1fe74adSBaptiste Daroussin.Pf ( Va ENVIRON ;
97e1fe74adSBaptiste Daroussinsee the section on variables below).
98e1fe74adSBaptiste DaroussinThis is a first
99e1fe74adSBaptiste Daroussin.Pq and not very reliable
100e1fe74adSBaptiste Daroussinapproximation to a
101e1fe74adSBaptiste Daroussin.Dq safe
102e1fe74adSBaptiste Daroussinversion of
103e1fe74adSBaptiste Daroussin.Nm .
104*7d93dd0fSYuri Pankov.It Fl version
105e1fe74adSBaptiste DaroussinPrint the version number of
106e1fe74adSBaptiste Daroussin.Nm
107e1fe74adSBaptiste Daroussinto standard output and exit.
108e1fe74adSBaptiste Daroussin.It Fl v Ar var Ns = Ns Ar value
109e1fe74adSBaptiste DaroussinAssign
110e1fe74adSBaptiste Daroussin.Ar value
111e1fe74adSBaptiste Daroussinto variable
112e1fe74adSBaptiste Daroussin.Ar var
113e1fe74adSBaptiste Daroussinbefore
114e1fe74adSBaptiste Daroussin.Ar prog
115e1fe74adSBaptiste Daroussinis executed;
116e1fe74adSBaptiste Daroussinany number of
117e1fe74adSBaptiste Daroussin.Fl v
118e1fe74adSBaptiste Daroussinoptions may be present.
119e1fe74adSBaptiste Daroussin.El
120e1fe74adSBaptiste Daroussin.Pp
121e1fe74adSBaptiste DaroussinThe input is normally made up of input lines
122e1fe74adSBaptiste Daroussin.Pq records
123e1fe74adSBaptiste Daroussinseparated by newlines, or by the value of
124e1fe74adSBaptiste Daroussin.Va RS .
125e1fe74adSBaptiste DaroussinIf
126e1fe74adSBaptiste Daroussin.Va RS
127e1fe74adSBaptiste Daroussinis null, then any number of blank lines are used as the record separator,
128e1fe74adSBaptiste Daroussinand newlines are used as field separators
129e1fe74adSBaptiste Daroussin(in addition to the value of
130e1fe74adSBaptiste Daroussin.Va FS ) .
131e1fe74adSBaptiste DaroussinThis is convenient when working with multi-line records.
132e1fe74adSBaptiste Daroussin.Pp
133e1fe74adSBaptiste DaroussinAn input line is normally made up of fields separated by whitespace,
134e1fe74adSBaptiste Daroussinor by the regular expression
135e1fe74adSBaptiste Daroussin.Va FS .
136e1fe74adSBaptiste DaroussinThe fields are denoted
137e1fe74adSBaptiste Daroussin.Va $1 , $2 , ... ,
138e1fe74adSBaptiste Daroussinwhile
139e1fe74adSBaptiste Daroussin.Va $0
140e1fe74adSBaptiste Daroussinrefers to the entire line.
141e1fe74adSBaptiste DaroussinIf
142e1fe74adSBaptiste Daroussin.Va FS
143e1fe74adSBaptiste Daroussinis null, the input line is split into one field per character.
144e1fe74adSBaptiste Daroussin.Pp
145e1fe74adSBaptiste DaroussinNormally, any number of blanks separate fields.
146e1fe74adSBaptiste DaroussinIn order to set the field separator to a single blank, use the
147e1fe74adSBaptiste Daroussin.Fl F
148e1fe74adSBaptiste Daroussinoption with a value of
149e1fe74adSBaptiste Daroussin.Sq [\ \&] .
150e1fe74adSBaptiste DaroussinIf a field separator of
151e1fe74adSBaptiste Daroussin.Sq t
152e1fe74adSBaptiste Daroussinis specified,
153e1fe74adSBaptiste Daroussin.Nm
154e1fe74adSBaptiste Daroussintreats it as if
155e1fe74adSBaptiste Daroussin.Sq \et
156e1fe74adSBaptiste Daroussinhad been specified and uses
157e1fe74adSBaptiste Daroussin.Aq TAB
158e1fe74adSBaptiste Daroussinas the field separator.
159e1fe74adSBaptiste DaroussinIn order to use a literal
160e1fe74adSBaptiste Daroussin.Sq t
161e1fe74adSBaptiste Daroussinas the field separator, use the
162e1fe74adSBaptiste Daroussin.Fl F
163e1fe74adSBaptiste Daroussinoption with a value of
164e1fe74adSBaptiste Daroussin.Sq [t] .
165e1fe74adSBaptiste Daroussin.Pp
166e1fe74adSBaptiste DaroussinA pattern-action statement has the form
167e1fe74adSBaptiste Daroussin.Pp
168e1fe74adSBaptiste Daroussin.D1 Ar pattern Ic \&{ Ar action Ic \&}
169e1fe74adSBaptiste Daroussin.Pp
170e1fe74adSBaptiste DaroussinA missing
171e1fe74adSBaptiste Daroussin.Ic \&{ Ar action Ic \&}
172e1fe74adSBaptiste Daroussinmeans print the line;
173e1fe74adSBaptiste Daroussina missing pattern always matches.
174e1fe74adSBaptiste DaroussinPattern-action statements are separated by newlines or semicolons.
175e1fe74adSBaptiste Daroussin.Pp
176e1fe74adSBaptiste DaroussinNewlines are permitted after a terminating statement or following a comma
177e1fe74adSBaptiste Daroussin.Pq Sq ,\& ,
178e1fe74adSBaptiste Daroussinan open brace
179e1fe74adSBaptiste Daroussin.Pq Sq { ,
180e1fe74adSBaptiste Daroussina logical AND
181e1fe74adSBaptiste Daroussin.Pq Sq && ,
182e1fe74adSBaptiste Daroussina logical OR
183e1fe74adSBaptiste Daroussin.Pq Sq || ,
184e1fe74adSBaptiste Daroussinafter the
185e1fe74adSBaptiste Daroussin.Sq do
186e1fe74adSBaptiste Daroussinor
187e1fe74adSBaptiste Daroussin.Sq else
188e1fe74adSBaptiste Daroussinkeywords,
189e1fe74adSBaptiste Daroussinor after the closing parenthesis of an
190e1fe74adSBaptiste Daroussin.Sq if ,
191e1fe74adSBaptiste Daroussin.Sq for ,
192e1fe74adSBaptiste Daroussinor
193e1fe74adSBaptiste Daroussin.Sq while
194e1fe74adSBaptiste Daroussinstatement.
195e1fe74adSBaptiste DaroussinAdditionally, a backslash
196e1fe74adSBaptiste Daroussin.Pq Sq \e
197e1fe74adSBaptiste Daroussincan be used to escape a newline between tokens.
198e1fe74adSBaptiste Daroussin.Pp
199e1fe74adSBaptiste DaroussinAn action is a sequence of statements.
200e1fe74adSBaptiste DaroussinA statement can be one of the following:
201e1fe74adSBaptiste Daroussin.Pp
202e1fe74adSBaptiste Daroussin.Bl -tag -width Ds -offset indent -compact
203e1fe74adSBaptiste Daroussin.It Ic if Ar ( expression ) Ar statement Op Ic else Ar statement
204e1fe74adSBaptiste Daroussin.It Ic while Ar ( expression ) Ar statement
205e1fe74adSBaptiste Daroussin.It Ic for Ar ( expression ; expression ; expression ) statement
206e1fe74adSBaptiste Daroussin.It Ic for Ar ( var Ic in Ar array ) statement
207e1fe74adSBaptiste Daroussin.It Ic do Ar statement Ic while Ar ( expression )
208e1fe74adSBaptiste Daroussin.It Ic break
209e1fe74adSBaptiste Daroussin.It Ic continue
210e1fe74adSBaptiste Daroussin.It Xo Ic {
211e1fe74adSBaptiste Daroussin.Op Ar statement ...
212e1fe74adSBaptiste Daroussin.Ic }
213e1fe74adSBaptiste Daroussin.Xc
214e1fe74adSBaptiste Daroussin.It Xo Ar expression
215e1fe74adSBaptiste Daroussin.No # commonly
216e1fe74adSBaptiste Daroussin.Ar var No = Ar expression
217e1fe74adSBaptiste Daroussin.Xc
218e1fe74adSBaptiste Daroussin.It Xo Ic print
219e1fe74adSBaptiste Daroussin.Op Ar expression-list
220e1fe74adSBaptiste Daroussin.Op > Ns Ar expression
221e1fe74adSBaptiste Daroussin.Xc
222e1fe74adSBaptiste Daroussin.It Xo Ic printf Ar format
223e1fe74adSBaptiste Daroussin.Op Ar ... , expression-list
224e1fe74adSBaptiste Daroussin.Op > Ns Ar expression
225e1fe74adSBaptiste Daroussin.Xc
226e1fe74adSBaptiste Daroussin.It Ic return Op Ar expression
227e1fe74adSBaptiste Daroussin.It Xo Ic next
228e1fe74adSBaptiste Daroussin.No # skip remaining patterns on this input line
229e1fe74adSBaptiste Daroussin.Xc
230e1fe74adSBaptiste Daroussin.It Xo Ic nextfile
231e1fe74adSBaptiste Daroussin.No # skip rest of this file, open next, start at top
232e1fe74adSBaptiste Daroussin.Xc
233e1fe74adSBaptiste Daroussin.It Xo Ic delete
234e1fe74adSBaptiste Daroussin.Sm off
235e1fe74adSBaptiste Daroussin.Ar array Ic \&[ Ar expression Ic \&]
236e1fe74adSBaptiste Daroussin.Sm on
237e1fe74adSBaptiste Daroussin.No # delete an array element
238e1fe74adSBaptiste Daroussin.Xc
239e1fe74adSBaptiste Daroussin.It Xo Ic delete Ar array
240e1fe74adSBaptiste Daroussin.No # delete all elements of array
241e1fe74adSBaptiste Daroussin.Xc
242e1fe74adSBaptiste Daroussin.It Xo Ic exit
243e1fe74adSBaptiste Daroussin.Op Ar expression
244e1fe74adSBaptiste Daroussin.No # exit immediately; status is Ar expression
245e1fe74adSBaptiste Daroussin.Xc
246e1fe74adSBaptiste Daroussin.El
247e1fe74adSBaptiste Daroussin.Pp
248e1fe74adSBaptiste DaroussinStatements are terminated by
249e1fe74adSBaptiste Daroussinsemicolons, newlines or right braces.
250e1fe74adSBaptiste DaroussinAn empty
251e1fe74adSBaptiste Daroussin.Ar expression-list
252e1fe74adSBaptiste Daroussinstands for
253e1fe74adSBaptiste Daroussin.Ar $0 .
254e1fe74adSBaptiste DaroussinString constants are quoted
255e1fe74adSBaptiste Daroussin.Li \&"" ,
256e1fe74adSBaptiste Daroussinwith the usual C escapes recognized within
257e1fe74adSBaptiste Daroussin(see
258e1fe74adSBaptiste Daroussin.Xr printf 1
259e1fe74adSBaptiste Daroussinfor a complete list of these).
260e1fe74adSBaptiste DaroussinExpressions take on string or numeric values as appropriate,
261e1fe74adSBaptiste Daroussinand are built using the operators
262e1fe74adSBaptiste Daroussin.Ic + \- * / % ^
263e1fe74adSBaptiste Daroussin.Pq exponentiation ,
264e1fe74adSBaptiste Daroussinand concatenation
265e1fe74adSBaptiste Daroussin.Pq indicated by whitespace .
266e1fe74adSBaptiste DaroussinThe operators
267e1fe74adSBaptiste Daroussin.Ic \&! ++ \-\- += \-= *= /= %= ^=
268*7d93dd0fSYuri Pankov.Ic > >= < <= == != ?\&:
269e1fe74adSBaptiste Daroussinare also available in expressions.
270e1fe74adSBaptiste DaroussinVariables may be scalars, array elements
271e1fe74adSBaptiste Daroussin(denoted
272e1fe74adSBaptiste Daroussin.Li x[i] )
273e1fe74adSBaptiste Daroussinor fields.
274e1fe74adSBaptiste DaroussinVariables are initialized to the null string.
275e1fe74adSBaptiste DaroussinArray subscripts may be any string,
276e1fe74adSBaptiste Daroussinnot necessarily numeric;
277e1fe74adSBaptiste Daroussinthis allows for a form of associative memory.
278e1fe74adSBaptiste DaroussinMultiple subscripts such as
279e1fe74adSBaptiste Daroussin.Li [i,j,k]
280e1fe74adSBaptiste Daroussinare permitted; the constituents are concatenated,
281e1fe74adSBaptiste Daroussinseparated by the value of
282e1fe74adSBaptiste Daroussin.Va SUBSEP
283e1fe74adSBaptiste Daroussin.Pq see the section on variables below .
284e1fe74adSBaptiste Daroussin.Pp
285e1fe74adSBaptiste DaroussinThe
286e1fe74adSBaptiste Daroussin.Ic print
287e1fe74adSBaptiste Daroussinstatement prints its arguments on the standard output
288e1fe74adSBaptiste Daroussin(or on a file if
289e1fe74adSBaptiste Daroussin.Pf > Ar file
290e1fe74adSBaptiste Daroussinor
291e1fe74adSBaptiste Daroussin.Pf >> Ar file
292e1fe74adSBaptiste Daroussinis present or on a pipe if
293e1fe74adSBaptiste Daroussin.Pf |\ \& Ar cmd
294e1fe74adSBaptiste Daroussinis present), separated by the current output field separator,
295e1fe74adSBaptiste Daroussinand terminated by the output record separator.
296e1fe74adSBaptiste Daroussin.Ar file
297e1fe74adSBaptiste Daroussinand
298e1fe74adSBaptiste Daroussin.Ar cmd
299e1fe74adSBaptiste Daroussinmay be literal names or parenthesized expressions;
300e1fe74adSBaptiste Daroussinidentical string values in different statements denote
301e1fe74adSBaptiste Daroussinthe same open file.
302e1fe74adSBaptiste DaroussinThe
303e1fe74adSBaptiste Daroussin.Ic printf
304e1fe74adSBaptiste Daroussinstatement formats its expression list according to the format
305e1fe74adSBaptiste Daroussin(see
306e1fe74adSBaptiste Daroussin.Xr printf 1 ) .
307e1fe74adSBaptiste Daroussin.Pp
308e1fe74adSBaptiste DaroussinPatterns are arbitrary Boolean combinations
309e1fe74adSBaptiste Daroussin(with
310e1fe74adSBaptiste Daroussin.Ic "\&! || &&" )
311e1fe74adSBaptiste Daroussinof regular expressions and
312e1fe74adSBaptiste Daroussinrelational expressions.
313e1fe74adSBaptiste Daroussin.Nm
314e1fe74adSBaptiste Daroussinsupports extended regular expressions
315e1fe74adSBaptiste Daroussin.Pq EREs .
316e1fe74adSBaptiste DaroussinSee
317e1fe74adSBaptiste Daroussin.Xr re_format 7
318e1fe74adSBaptiste Daroussinfor more information on regular expressions.
319e1fe74adSBaptiste DaroussinIsolated regular expressions
320e1fe74adSBaptiste Daroussinin a pattern apply to the entire line.
321e1fe74adSBaptiste DaroussinRegular expressions may also occur in
322e1fe74adSBaptiste Daroussinrelational expressions, using the operators
323e1fe74adSBaptiste Daroussin.Ic ~
324e1fe74adSBaptiste Daroussinand
325e1fe74adSBaptiste Daroussin.Ic !~ .
326e1fe74adSBaptiste Daroussin.Pf / Ar re Ns /
327e1fe74adSBaptiste Daroussinis a constant regular expression;
328e1fe74adSBaptiste Daroussinany string (constant or variable) may be used
329e1fe74adSBaptiste Daroussinas a regular expression, except in the position of an isolated regular expression
330e1fe74adSBaptiste Daroussinin a pattern.
331e1fe74adSBaptiste Daroussin.Pp
332e1fe74adSBaptiste DaroussinA pattern may consist of two patterns separated by a comma;
333e1fe74adSBaptiste Daroussinin this case, the action is performed for all lines
334e1fe74adSBaptiste Daroussinfrom an occurrence of the first pattern
335e1fe74adSBaptiste Daroussinthrough an occurrence of the second.
336e1fe74adSBaptiste Daroussin.Pp
337e1fe74adSBaptiste DaroussinA relational expression is one of the following:
338e1fe74adSBaptiste Daroussin.Pp
339e1fe74adSBaptiste Daroussin.Bl -tag -width Ds -offset indent -compact
340e1fe74adSBaptiste Daroussin.It Ar expression matchop regular-expression
341e1fe74adSBaptiste Daroussin.It Ar expression relop expression
342e1fe74adSBaptiste Daroussin.It Ar expression Ic in Ar array-name
343e1fe74adSBaptiste Daroussin.It Xo Ic \&( Ns
344e1fe74adSBaptiste Daroussin.Ar expr , expr , \&... Ns Ic \&) in
345e1fe74adSBaptiste Daroussin.Ar array-name
346e1fe74adSBaptiste Daroussin.Xc
347e1fe74adSBaptiste Daroussin.El
348e1fe74adSBaptiste Daroussin.Pp
349e1fe74adSBaptiste Daroussinwhere a
350e1fe74adSBaptiste Daroussin.Ar relop
351e1fe74adSBaptiste Daroussinis any of the six relational operators in C, and a
352e1fe74adSBaptiste Daroussin.Ar matchop
353e1fe74adSBaptiste Daroussinis either
354e1fe74adSBaptiste Daroussin.Ic ~
355e1fe74adSBaptiste Daroussin(matches)
356e1fe74adSBaptiste Daroussinor
357e1fe74adSBaptiste Daroussin.Ic !~
358e1fe74adSBaptiste Daroussin(does not match).
359e1fe74adSBaptiste DaroussinA conditional is an arithmetic expression,
360e1fe74adSBaptiste Daroussina relational expression,
361e1fe74adSBaptiste Daroussinor a Boolean combination
362e1fe74adSBaptiste Daroussinof these.
363e1fe74adSBaptiste Daroussin.Pp
364e1fe74adSBaptiste DaroussinThe special patterns
365e1fe74adSBaptiste Daroussin.Ic BEGIN
366e1fe74adSBaptiste Daroussinand
367e1fe74adSBaptiste Daroussin.Ic END
368e1fe74adSBaptiste Daroussinmay be used to capture control before the first input line is read
369e1fe74adSBaptiste Daroussinand after the last.
370e1fe74adSBaptiste Daroussin.Ic BEGIN
371e1fe74adSBaptiste Daroussinand
372e1fe74adSBaptiste Daroussin.Ic END
373e1fe74adSBaptiste Daroussindo not combine with other patterns.
374e1fe74adSBaptiste Daroussin.Pp
375e1fe74adSBaptiste DaroussinVariable names with special meanings:
376e1fe74adSBaptiste Daroussin.Pp
377e1fe74adSBaptiste Daroussin.Bl -tag -width "FILENAME " -compact
378e1fe74adSBaptiste Daroussin.It Va ARGC
379e1fe74adSBaptiste DaroussinArgument count, assignable.
380e1fe74adSBaptiste Daroussin.It Va ARGV
381e1fe74adSBaptiste DaroussinArgument array, assignable;
382e1fe74adSBaptiste Daroussinnon-null members are taken as filenames.
383e1fe74adSBaptiste Daroussin.It Va CONVFMT
384e1fe74adSBaptiste DaroussinConversion format when converting numbers
385e1fe74adSBaptiste Daroussin(default
386e1fe74adSBaptiste Daroussin.Qq Li %.6g ) .
387e1fe74adSBaptiste Daroussin.It Va ENVIRON
388e1fe74adSBaptiste DaroussinArray of environment variables; subscripts are names.
389e1fe74adSBaptiste Daroussin.It Va FILENAME
390e1fe74adSBaptiste DaroussinThe name of the current input file.
391e1fe74adSBaptiste Daroussin.It Va FNR
392e1fe74adSBaptiste DaroussinOrdinal number of the current record in the current file.
393e1fe74adSBaptiste Daroussin.It Va FS
394e1fe74adSBaptiste DaroussinRegular expression used to separate fields; also settable
395e1fe74adSBaptiste Daroussinby option
396e1fe74adSBaptiste Daroussin.Fl F Ar fs .
397e1fe74adSBaptiste Daroussin.It Va NF
398e1fe74adSBaptiste DaroussinNumber of fields in the current record.
399e1fe74adSBaptiste Daroussin.Va $NF
400e1fe74adSBaptiste Daroussincan be used to obtain the value of the last field in the current record.
401e1fe74adSBaptiste Daroussin.It Va NR
402e1fe74adSBaptiste DaroussinOrdinal number of the current record.
403e1fe74adSBaptiste Daroussin.It Va OFMT
404e1fe74adSBaptiste DaroussinOutput format for numbers (default
405e1fe74adSBaptiste Daroussin.Qq Li %.6g ) .
406e1fe74adSBaptiste Daroussin.It Va OFS
407e1fe74adSBaptiste DaroussinOutput field separator (default blank).
408e1fe74adSBaptiste Daroussin.It Va ORS
409e1fe74adSBaptiste DaroussinOutput record separator (default newline).
410e1fe74adSBaptiste Daroussin.It Va RLENGTH
411e1fe74adSBaptiste DaroussinThe length of the string matched by the
412e1fe74adSBaptiste Daroussin.Fn match
413e1fe74adSBaptiste Daroussinfunction.
414e1fe74adSBaptiste Daroussin.It Va RS
415e1fe74adSBaptiste DaroussinInput record separator (default newline).
416e1fe74adSBaptiste Daroussin.It Va RSTART
417e1fe74adSBaptiste DaroussinThe starting position of the string matched by the
418e1fe74adSBaptiste Daroussin.Fn match
419e1fe74adSBaptiste Daroussinfunction.
420e1fe74adSBaptiste Daroussin.It Va SUBSEP
421e1fe74adSBaptiste DaroussinSeparates multiple subscripts (default 034).
422e1fe74adSBaptiste Daroussin.El
423e1fe74adSBaptiste Daroussin.Sh FUNCTIONS
424e1fe74adSBaptiste DaroussinThe awk language has a variety of built-in functions:
425e1fe74adSBaptiste Daroussinarithmetic, string, input/output, general, and bit-operation.
426e1fe74adSBaptiste Daroussin.Pp
427e1fe74adSBaptiste DaroussinFunctions may be defined (at the position of a pattern-action statement)
428e1fe74adSBaptiste Daroussinthusly:
429e1fe74adSBaptiste Daroussin.Pp
430e1fe74adSBaptiste Daroussin.Dl function foo(a, b, c) { ...; return x }
431e1fe74adSBaptiste Daroussin.Pp
432e1fe74adSBaptiste DaroussinParameters are passed by value if scalar, and by reference if array name;
433e1fe74adSBaptiste Daroussinfunctions may be called recursively.
434e1fe74adSBaptiste DaroussinParameters are local to the function; all other variables are global.
435e1fe74adSBaptiste DaroussinThus local variables may be created by providing excess parameters in
436e1fe74adSBaptiste Daroussinthe function definition.
437e1fe74adSBaptiste Daroussin.Ss Arithmetic Functions
438e1fe74adSBaptiste Daroussin.Bl -tag -width "atan2(y, x)"
439e1fe74adSBaptiste Daroussin.It Fn atan2 y x
440e1fe74adSBaptiste DaroussinReturn the arctangent of
441e1fe74adSBaptiste Daroussin.Fa y Ns / Ns Fa x
442e1fe74adSBaptiste Daroussinin radians.
443e1fe74adSBaptiste Daroussin.It Fn cos x
444e1fe74adSBaptiste DaroussinReturn the cosine of
445e1fe74adSBaptiste Daroussin.Fa x ,
446e1fe74adSBaptiste Daroussinwhere
447e1fe74adSBaptiste Daroussin.Fa x
448e1fe74adSBaptiste Daroussinis in radians.
449e1fe74adSBaptiste Daroussin.It Fn exp x
450e1fe74adSBaptiste DaroussinReturn the exponential of
451e1fe74adSBaptiste Daroussin.Fa x .
452e1fe74adSBaptiste Daroussin.It Fn int x
453e1fe74adSBaptiste DaroussinReturn
454e1fe74adSBaptiste Daroussin.Fa x
455e1fe74adSBaptiste Daroussintruncated to an integer value.
456e1fe74adSBaptiste Daroussin.It Fn log x
457e1fe74adSBaptiste DaroussinReturn the natural logarithm of
458e1fe74adSBaptiste Daroussin.Fa x .
459e1fe74adSBaptiste Daroussin.It Fn rand
460e1fe74adSBaptiste DaroussinReturn a random number,
461e1fe74adSBaptiste Daroussin.Fa n ,
462e1fe74adSBaptiste Daroussinsuch that
463e1fe74adSBaptiste Daroussin.Sm off
464e1fe74adSBaptiste Daroussin.Pf 0 \*(Le Fa n No \*(Lt 1 .
465e1fe74adSBaptiste Daroussin.Sm on
466e1fe74adSBaptiste Daroussin.It Fn sin x
467e1fe74adSBaptiste DaroussinReturn the sine of
468e1fe74adSBaptiste Daroussin.Fa x ,
469e1fe74adSBaptiste Daroussinwhere
470e1fe74adSBaptiste Daroussin.Fa x
471e1fe74adSBaptiste Daroussinis in radians.
472e1fe74adSBaptiste Daroussin.It Fn sqrt x
473e1fe74adSBaptiste DaroussinReturn the square root of
474e1fe74adSBaptiste Daroussin.Fa x .
475e1fe74adSBaptiste Daroussin.It Fn srand expr
476e1fe74adSBaptiste DaroussinSets seed for
477e1fe74adSBaptiste Daroussin.Fn rand
478e1fe74adSBaptiste Daroussinto
479e1fe74adSBaptiste Daroussin.Fa expr
480e1fe74adSBaptiste Daroussinand returns the previous seed.
481e1fe74adSBaptiste DaroussinIf
482e1fe74adSBaptiste Daroussin.Fa expr
483e1fe74adSBaptiste Daroussinis omitted, the time of day is used instead.
484e1fe74adSBaptiste Daroussin.El
485e1fe74adSBaptiste Daroussin.Ss String Functions
486e1fe74adSBaptiste Daroussin.Bl -tag -width "split(s, a, fs)"
487e1fe74adSBaptiste Daroussin.It Fn gsub r t s
488e1fe74adSBaptiste DaroussinThe same as
489e1fe74adSBaptiste Daroussin.Fn sub
490e1fe74adSBaptiste Daroussinexcept that all occurrences of the regular expression are replaced.
491e1fe74adSBaptiste Daroussin.Fn gsub
492e1fe74adSBaptiste Daroussinreturns the number of replacements.
493e1fe74adSBaptiste Daroussin.It Fn index s t
494e1fe74adSBaptiste DaroussinThe position in
495e1fe74adSBaptiste Daroussin.Fa s
496e1fe74adSBaptiste Daroussinwhere the string
497e1fe74adSBaptiste Daroussin.Fa t
498e1fe74adSBaptiste Daroussinoccurs, or 0 if it does not.
499e1fe74adSBaptiste Daroussin.It Fn length s
500e1fe74adSBaptiste DaroussinThe length of
501e1fe74adSBaptiste Daroussin.Fa s
502e1fe74adSBaptiste Daroussintaken as a string,
503e1fe74adSBaptiste Daroussinor of
504e1fe74adSBaptiste Daroussin.Va $0
505e1fe74adSBaptiste Daroussinif no argument is given.
506e1fe74adSBaptiste Daroussin.It Fn match s r
507e1fe74adSBaptiste DaroussinThe position in
508e1fe74adSBaptiste Daroussin.Fa s
509e1fe74adSBaptiste Daroussinwhere the regular expression
510e1fe74adSBaptiste Daroussin.Fa r
511e1fe74adSBaptiste Daroussinoccurs, or 0 if it does not.
512e1fe74adSBaptiste DaroussinThe variable
513e1fe74adSBaptiste Daroussin.Va RSTART
514e1fe74adSBaptiste Daroussinis set to the starting position of the matched string
515e1fe74adSBaptiste Daroussin.Pq which is the same as the returned value
516e1fe74adSBaptiste Daroussinor zero if no match is found.
517e1fe74adSBaptiste DaroussinThe variable
518e1fe74adSBaptiste Daroussin.Va RLENGTH
519e1fe74adSBaptiste Daroussinis set to the length of the matched string,
520e1fe74adSBaptiste Daroussinor \-1 if no match is found.
521e1fe74adSBaptiste Daroussin.It Fn split s a fs
522e1fe74adSBaptiste DaroussinSplits the string
523e1fe74adSBaptiste Daroussin.Fa s
524e1fe74adSBaptiste Daroussininto array elements
525e1fe74adSBaptiste Daroussin.Va a[1] , a[2] , ... , a[n]
526e1fe74adSBaptiste Daroussinand returns
527e1fe74adSBaptiste Daroussin.Va n .
528e1fe74adSBaptiste DaroussinThe separation is done with the regular expression
529e1fe74adSBaptiste Daroussin.Ar fs
530e1fe74adSBaptiste Daroussinor with the field separator
531e1fe74adSBaptiste Daroussin.Va FS
532e1fe74adSBaptiste Daroussinif
533e1fe74adSBaptiste Daroussin.Ar fs
534e1fe74adSBaptiste Daroussinis not given.
535e1fe74adSBaptiste DaroussinAn empty string as field separator splits the string
536e1fe74adSBaptiste Daroussininto one array element per character.
537e1fe74adSBaptiste Daroussin.It Fn sprintf fmt expr ...
538e1fe74adSBaptiste DaroussinThe string resulting from formatting
539e1fe74adSBaptiste Daroussin.Fa expr , ...
540e1fe74adSBaptiste Daroussinaccording to the
541e1fe74adSBaptiste Daroussin.Xr printf 1
542e1fe74adSBaptiste Daroussinformat
543e1fe74adSBaptiste Daroussin.Fa fmt .
544e1fe74adSBaptiste Daroussin.It Fn sub r t s
545e1fe74adSBaptiste DaroussinSubstitutes
546e1fe74adSBaptiste Daroussin.Fa t
547e1fe74adSBaptiste Daroussinfor the first occurrence of the regular expression
548e1fe74adSBaptiste Daroussin.Fa r
549e1fe74adSBaptiste Daroussinin the string
550e1fe74adSBaptiste Daroussin.Fa s .
551e1fe74adSBaptiste DaroussinIf
552e1fe74adSBaptiste Daroussin.Fa s
553e1fe74adSBaptiste Daroussinis not given,
554e1fe74adSBaptiste Daroussin.Va $0
555e1fe74adSBaptiste Daroussinis used.
556e1fe74adSBaptiste DaroussinAn ampersand
557e1fe74adSBaptiste Daroussin.Pq Sq &
558e1fe74adSBaptiste Daroussinin
559e1fe74adSBaptiste Daroussin.Fa t
560e1fe74adSBaptiste Daroussinis replaced in string
561e1fe74adSBaptiste Daroussin.Fa s
562e1fe74adSBaptiste Daroussinwith regular expression
563e1fe74adSBaptiste Daroussin.Fa r .
564e1fe74adSBaptiste DaroussinA literal ampersand can be specified by preceding it with two backslashes
565e1fe74adSBaptiste Daroussin.Pq Sq \e\e .
566e1fe74adSBaptiste DaroussinA literal backslash can be specified by preceding it with another backslash
567e1fe74adSBaptiste Daroussin.Pq Sq \e\e .
568e1fe74adSBaptiste Daroussin.Fn sub
569e1fe74adSBaptiste Daroussinreturns the number of replacements.
570e1fe74adSBaptiste Daroussin.It Fn substr s m n
571e1fe74adSBaptiste DaroussinReturn at most the
572e1fe74adSBaptiste Daroussin.Fa n Ns -character
573e1fe74adSBaptiste Daroussinsubstring of
574e1fe74adSBaptiste Daroussin.Fa s
575e1fe74adSBaptiste Daroussinthat begins at position
576e1fe74adSBaptiste Daroussin.Fa m
577e1fe74adSBaptiste Daroussincounted from 1.
578e1fe74adSBaptiste DaroussinIf
579e1fe74adSBaptiste Daroussin.Fa n
580e1fe74adSBaptiste Daroussinis omitted, or if
581e1fe74adSBaptiste Daroussin.Fa n
582e1fe74adSBaptiste Daroussinspecifies more characters than are left in the string,
583e1fe74adSBaptiste Daroussinthe length of the substring is limited by the length of
584e1fe74adSBaptiste Daroussin.Fa s .
585e1fe74adSBaptiste Daroussin.It Fn tolower str
586e1fe74adSBaptiste DaroussinReturns a copy of
587e1fe74adSBaptiste Daroussin.Fa str
588e1fe74adSBaptiste Daroussinwith all upper-case characters translated to their
589e1fe74adSBaptiste Daroussincorresponding lower-case equivalents.
590e1fe74adSBaptiste Daroussin.It Fn toupper str
591e1fe74adSBaptiste DaroussinReturns a copy of
592e1fe74adSBaptiste Daroussin.Fa str
593e1fe74adSBaptiste Daroussinwith all lower-case characters translated to their
594e1fe74adSBaptiste Daroussincorresponding upper-case equivalents.
595e1fe74adSBaptiste Daroussin.El
596e1fe74adSBaptiste Daroussin.Ss Input/Output and General Functions
597e1fe74adSBaptiste Daroussin.Bl -tag -width "getline [var] < file"
598e1fe74adSBaptiste Daroussin.It Fn close expr
599e1fe74adSBaptiste DaroussinCloses the file or pipe
600e1fe74adSBaptiste Daroussin.Fa expr .
601e1fe74adSBaptiste Daroussin.Fa expr
602e1fe74adSBaptiste Daroussinshould match the string that was used to open the file or pipe.
603e1fe74adSBaptiste Daroussin.It Ar cmd | Ic getline Op Va var
604e1fe74adSBaptiste DaroussinRead a record of input from a stream piped from the output of
605e1fe74adSBaptiste Daroussin.Ar cmd .
606e1fe74adSBaptiste DaroussinIf
607e1fe74adSBaptiste Daroussin.Va var
608e1fe74adSBaptiste Daroussinis omitted, the variables
609e1fe74adSBaptiste Daroussin.Va $0
610e1fe74adSBaptiste Daroussinand
611e1fe74adSBaptiste Daroussin.Va NF
612e1fe74adSBaptiste Daroussinare set.
613e1fe74adSBaptiste DaroussinOtherwise
614e1fe74adSBaptiste Daroussin.Va var
615e1fe74adSBaptiste Daroussinis set.
616e1fe74adSBaptiste DaroussinIf the stream is not open, it is opened.
617e1fe74adSBaptiste DaroussinAs long as the stream remains open, subsequent calls
618e1fe74adSBaptiste Daroussinwill read subsequent records from the stream.
619e1fe74adSBaptiste DaroussinThe stream remains open until explicitly closed with a call to
620e1fe74adSBaptiste Daroussin.Fn close .
621e1fe74adSBaptiste Daroussin.Ic getline
622e1fe74adSBaptiste Daroussinreturns 1 for a successful input, 0 for end of file, and \-1 for an error.
623e1fe74adSBaptiste Daroussin.It Fn fflush [expr]
624e1fe74adSBaptiste DaroussinFlushes any buffered output for the file or pipe
625e1fe74adSBaptiste Daroussin.Fa expr ,
626e1fe74adSBaptiste Daroussinor all open files or pipes if
627e1fe74adSBaptiste Daroussin.Fa expr
628e1fe74adSBaptiste Daroussinis omitted.
629e1fe74adSBaptiste Daroussin.Fa expr
630e1fe74adSBaptiste Daroussinshould match the string that was used to open the file or pipe.
631e1fe74adSBaptiste Daroussin.It Ic getline
632e1fe74adSBaptiste DaroussinSets
633e1fe74adSBaptiste Daroussin.Va $0
634e1fe74adSBaptiste Daroussinto the next input record from the current input file.
635e1fe74adSBaptiste DaroussinThis form of
636e1fe74adSBaptiste Daroussin.Ic getline
637e1fe74adSBaptiste Daroussinsets the variables
638e1fe74adSBaptiste Daroussin.Va NF ,
639e1fe74adSBaptiste Daroussin.Va NR ,
640e1fe74adSBaptiste Daroussinand
641e1fe74adSBaptiste Daroussin.Va FNR .
642e1fe74adSBaptiste Daroussin.Ic getline
643e1fe74adSBaptiste Daroussinreturns 1 for a successful input, 0 for end of file, and \-1 for an error.
644e1fe74adSBaptiste Daroussin.It Ic getline Va var
645e1fe74adSBaptiste DaroussinSets
646e1fe74adSBaptiste Daroussin.Va $0
647e1fe74adSBaptiste Daroussinto variable
648e1fe74adSBaptiste Daroussin.Va var .
649e1fe74adSBaptiste DaroussinThis form of
650e1fe74adSBaptiste Daroussin.Ic getline
651e1fe74adSBaptiste Daroussinsets the variables
652e1fe74adSBaptiste Daroussin.Va NR
653e1fe74adSBaptiste Daroussinand
654e1fe74adSBaptiste Daroussin.Va FNR .
655e1fe74adSBaptiste Daroussin.Ic getline
656e1fe74adSBaptiste Daroussinreturns 1 for a successful input, 0 for end of file, and \-1 for an error.
657e1fe74adSBaptiste Daroussin.It Xo
658e1fe74adSBaptiste Daroussin.Ic getline Op Va var
659e1fe74adSBaptiste Daroussin.Pf \ \&< Ar file
660e1fe74adSBaptiste Daroussin.Xc
661e1fe74adSBaptiste DaroussinSets
662e1fe74adSBaptiste Daroussin.Va $0
663e1fe74adSBaptiste Daroussinto the next record from
664e1fe74adSBaptiste Daroussin.Ar file .
665e1fe74adSBaptiste DaroussinIf
666e1fe74adSBaptiste Daroussin.Va var
667e1fe74adSBaptiste Daroussinis omitted, the variables
668e1fe74adSBaptiste Daroussin.Va $0
669e1fe74adSBaptiste Daroussinand
670e1fe74adSBaptiste Daroussin.Va NF
671e1fe74adSBaptiste Daroussinare set.
672e1fe74adSBaptiste DaroussinOtherwise
673e1fe74adSBaptiste Daroussin.Va var
674e1fe74adSBaptiste Daroussinis set.
675e1fe74adSBaptiste DaroussinIf
676e1fe74adSBaptiste Daroussin.Ar file
677e1fe74adSBaptiste Daroussinis not open, it is opened.
678e1fe74adSBaptiste DaroussinAs long as the stream remains open, subsequent calls will read subsequent
679e1fe74adSBaptiste Daroussinrecords from
680e1fe74adSBaptiste Daroussin.Ar file .
681e1fe74adSBaptiste Daroussin.Ar file
682e1fe74adSBaptiste Daroussinremains open until explicitly closed with a call to
683e1fe74adSBaptiste Daroussin.Fn close .
684e1fe74adSBaptiste Daroussin.It Fn system cmd
685e1fe74adSBaptiste DaroussinExecutes
686e1fe74adSBaptiste Daroussin.Fa cmd
687e1fe74adSBaptiste Daroussinand returns its exit status.
688e1fe74adSBaptiste Daroussin.El
689e1fe74adSBaptiste Daroussin.Ss Bit-Operation Functions
690e1fe74adSBaptiste Daroussin.Bl -tag -width "lshift(a, b)"
691e1fe74adSBaptiste Daroussin.It Fn compl x
692e1fe74adSBaptiste DaroussinReturns the bitwise complement of integer argument x.
69373f7ff91SWarner Losh.It Fn and v1 v2 ...
69473f7ff91SWarner LoshPerforms a bitwise AND on all arguments provided, as integers.
69573f7ff91SWarner LoshThere must be at least two values.
69673f7ff91SWarner Losh.It Fn or v1 v2 ...
69773f7ff91SWarner LoshPerforms a bitwise OR on all arguments provided, as integers.
69873f7ff91SWarner LoshThere must be at least two values.
69973f7ff91SWarner Losh.It Fn xor v1 v2 ...
70073f7ff91SWarner LoshPerforms a bitwise Exclusive-OR on all arguments provided, as integers.
70173f7ff91SWarner LoshThere must be at least two values.
702e1fe74adSBaptiste Daroussin.It Fn lshift x n
703e1fe74adSBaptiste DaroussinReturns integer argument x shifted by n bits to the left.
704e1fe74adSBaptiste Daroussin.It Fn rshift x n
705e1fe74adSBaptiste DaroussinReturns integer argument x shifted by n bits to the right.
706e1fe74adSBaptiste Daroussin.El
707e1fe74adSBaptiste Daroussin.Sh EXIT STATUS
708e1fe74adSBaptiste Daroussin.Ex -std awk
709e1fe74adSBaptiste Daroussin.Pp
710e1fe74adSBaptiste DaroussinBut note that the
711e1fe74adSBaptiste Daroussin.Ic exit
712e1fe74adSBaptiste Daroussinexpression can modify the exit status.
713e1fe74adSBaptiste Daroussin.Sh EXAMPLES
714e1fe74adSBaptiste DaroussinPrint lines longer than 72 characters:
715e1fe74adSBaptiste Daroussin.Pp
716e1fe74adSBaptiste Daroussin.Dl length($0) > 72
717e1fe74adSBaptiste Daroussin.Pp
718e1fe74adSBaptiste DaroussinPrint first two fields in opposite order:
719e1fe74adSBaptiste Daroussin.Pp
720e1fe74adSBaptiste Daroussin.Dl { print $2, $1 }
721e1fe74adSBaptiste Daroussin.Pp
722e1fe74adSBaptiste DaroussinSame, with input fields separated by comma and/or blanks and tabs:
723e1fe74adSBaptiste Daroussin.Bd -literal -offset indent
724e1fe74adSBaptiste DaroussinBEGIN { FS = ",[ \et]*|[ \et]+" }
725e1fe74adSBaptiste Daroussin      { print $2, $1 }
726e1fe74adSBaptiste Daroussin.Ed
727e1fe74adSBaptiste Daroussin.Pp
728e1fe74adSBaptiste DaroussinAdd up first column, print sum and average:
729e1fe74adSBaptiste Daroussin.Bd -literal -offset indent
730e1fe74adSBaptiste Daroussin{ s += $1 }
731e1fe74adSBaptiste DaroussinEND { print "sum is", s, " average is", s/NR }
732e1fe74adSBaptiste Daroussin.Ed
733e1fe74adSBaptiste Daroussin.Pp
734e1fe74adSBaptiste DaroussinPrint all lines between start/stop pairs:
735e1fe74adSBaptiste Daroussin.Pp
736e1fe74adSBaptiste Daroussin.Dl /start/, /stop/
737e1fe74adSBaptiste Daroussin.Pp
738e1fe74adSBaptiste DaroussinSimulate echo(1):
739e1fe74adSBaptiste Daroussin.Bd -literal -offset indent
740e1fe74adSBaptiste DaroussinBEGIN { # Simulate echo(1)
741e1fe74adSBaptiste Daroussin        for (i = 1; i < ARGC; i++) printf "%s ", ARGV[i]
742e1fe74adSBaptiste Daroussin        printf "\en"
743e1fe74adSBaptiste Daroussin        exit }
744e1fe74adSBaptiste Daroussin.Ed
745e1fe74adSBaptiste Daroussin.Pp
746e1fe74adSBaptiste DaroussinPrint an error message to standard error:
747e1fe74adSBaptiste Daroussin.Bd -literal -offset indent
748e1fe74adSBaptiste Daroussin{ print "error!" > "/dev/stderr" }
749e1fe74adSBaptiste Daroussin.Ed
750e1fe74adSBaptiste Daroussin.Sh SEE ALSO
751e1fe74adSBaptiste Daroussin.Xr cut 1 ,
752e1fe74adSBaptiste Daroussin.Xr lex 1 ,
753e1fe74adSBaptiste Daroussin.Xr printf 1 ,
754e1fe74adSBaptiste Daroussin.Xr sed 1 ,
755*7d93dd0fSYuri Pankov.Xr re_format 7
756e1fe74adSBaptiste Daroussin.Rs
757e1fe74adSBaptiste Daroussin.%A A. V. Aho
758e1fe74adSBaptiste Daroussin.%A B. W. Kernighan
759e1fe74adSBaptiste Daroussin.%A P. J. Weinberger
760e1fe74adSBaptiste Daroussin.%T The AWK Programming Language
761e1fe74adSBaptiste Daroussin.%I Addison-Wesley
762e1fe74adSBaptiste Daroussin.%D 1988
763e1fe74adSBaptiste Daroussin.%O ISBN 0-201-07981-X
764e1fe74adSBaptiste Daroussin.Re
765e1fe74adSBaptiste Daroussin.Sh STANDARDS
766e1fe74adSBaptiste DaroussinThe
767e1fe74adSBaptiste Daroussin.Nm
768e1fe74adSBaptiste Daroussinutility is compliant with the
769e1fe74adSBaptiste Daroussin.St -p1003.1-2008
770e1fe74adSBaptiste Daroussinspecification,
771e1fe74adSBaptiste Daroussinexcept
772e1fe74adSBaptiste Daroussin.Nm
773e1fe74adSBaptiste Daroussindoes not support {n,m} pattern matching.
774e1fe74adSBaptiste Daroussin.Pp
775e1fe74adSBaptiste DaroussinThe flags
776*7d93dd0fSYuri Pankov.Fl d ,
777*7d93dd0fSYuri Pankov.Fl safe ,
778e1fe74adSBaptiste Daroussinand
779*7d93dd0fSYuri Pankov.Fl version
780e1fe74adSBaptiste Daroussinas well as the commands
781e1fe74adSBaptiste Daroussin.Cm fflush , compl , and , or ,
782e1fe74adSBaptiste Daroussin.Cm xor , lshift , rshift ,
783e1fe74adSBaptiste Daroussinare extensions to that specification.
784e1fe74adSBaptiste Daroussin.Sh HISTORY
785e1fe74adSBaptiste DaroussinAn
786e1fe74adSBaptiste Daroussin.Nm
787e1fe74adSBaptiste Daroussinutility appeared in
788e1fe74adSBaptiste Daroussin.At v7 .
789e1fe74adSBaptiste Daroussin.Sh BUGS
790e1fe74adSBaptiste DaroussinThere are no explicit conversions between numbers and strings.
791e1fe74adSBaptiste DaroussinTo force an expression to be treated as a number add 0 to it;
792e1fe74adSBaptiste Daroussinto force it to be treated as a string concatenate
793e1fe74adSBaptiste Daroussin.Li \&""
794e1fe74adSBaptiste Daroussinto it.
795e1fe74adSBaptiste Daroussin.Pp
796e1fe74adSBaptiste DaroussinThe scope rules for variables in functions are a botch;
797e1fe74adSBaptiste Daroussinthe syntax is worse.
798