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