VM: munmap used by VM for itself is no longer used
[minix.git] / external / historical / nawk / bin / awk.1
blob505971056e5a7859479b218614819f1240fad800
1 .\"     $NetBSD: awk.1,v 1.2 2011/04/20 10:10:32 drochner Exp $
2 .\"
3 .\" Copyright (C) Lucent Technologies 1997
4 .\" All Rights Reserved
5 .\"
6 .\" Permission to use, copy, modify, and distribute this software and
7 .\" its documentation for any purpose and without fee is hereby
8 .\" granted, provided that the above copyright notice appear in all
9 .\" copies and that both that the copyright notice and this
10 .\" permission notice and warranty disclaimer appear in supporting
11 .\" documentation, and that the name Lucent Technologies or any of
12 .\" its entities not be used in advertising or publicity pertaining
13 .\" to distribution of the software without specific, written prior
14 .\" permission.
15 .\"
16 .\" LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
17 .\" INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
18 .\" IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
19 .\" SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
20 .\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
21 .\" IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
22 .\" ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
23 .\" THIS SOFTWARE.
24 .\"
25 .Dd May 25, 2008
26 .Dt AWK 1
27 .Os
28 .Sh NAME
29 .Nm awk
30 .Nd pattern-directed scanning and processing language
31 .Sh SYNOPSIS
32 .Nm
33 .Op Fl F Ar fs
34 .Op Fl v Ar var=value
35 .Op Fl safe
36 .Op Fl d Ns Op Ar N
37 .Op Ar prog | Fl f Ar filename
38 .Ar
39 .Nm
40 .Fl version
41 .Sh DESCRIPTION
42 .Nm
43 is the Bell Labs' implementation of the AWK programming language as
44 described in the
45 .Em The AWK Programming Language
47 A. V. Aho, B. W. Kernighan, and P. J. Weinberger.
48 .Pp
49 .Nm
50 scans each input
51 .Ar file
52 for lines that match any of a set of patterns specified literally in
53 .Ar prog
54 or in one or more files
55 specified as
56 .Fl f Ar filename .
57 With each pattern
58 there can be an associated action that will be performed
59 when a line of a
60 .Ar file
61 matches the pattern.
62 Each line is matched against the
63 pattern portion of every pattern-action statement;
64 the associated action is performed for each matched pattern.
65 The file name
66 .Ar -
67 means the standard input.
68 Any
69 .Ar file
70 of the form
71 .Ar var=value
72 is treated as an assignment, not a filename,
73 and is executed at the time it would have been opened if it were a filename.
74 .Pp
75 The options are as follows:
76 .Bl -tag -width indent
77 .It Fl d Ns Op Ar N
78 Set debug level to specified number
79 .Ar N .
80 If the number is omitted, debug level is set to 1.
81 .It Fl f Ar filename
82 Read the AWK program source from specified file
83 .Ar filename ,
84 instead of the first command line argument.
85 Multiple
86 .Fl f
87 options may be specified.
88 .It Fl F Ar fs
89 Set the input field separator
90 .Va FS
91 to the regular expression
92 .Ar fs .
93 .It Fl mr Ar NNN , Fl mf Ar NNN
94 Obsolete, no longer needed options.
95 Set limit on maximum record or
96 fields number.
97 .It Fl safe
98 Potentially unsafe functions such as
99 .Fn system
100 make the program abort (with a warning message).
101 .It Fl v Ar var Ns = Ns Ar value
102 Assign the value
103 .Ar value
104 to the variable
105 .Va var
106 before
107 .Ar prog
108 is executed.
109 Any number of
110 .Fl v
111 options may be present.
112 .It Fl version
113 Print
115 version on standard output and exit.
118 An input line is normally made up of fields separated by white space,
119 or by regular expression
120 .Va FS .
121 The fields are denoted
122 .Va $1 ,
123 .Va $2 ,
124 \&..., while
125 .Va $0
126 refers to the entire line.
128 .Va FS
129 is null, the input line is split into one field per character.
131 A pattern-action statement has the form
133 .Dl pattern \&{ action \&}
135 A missing \&{ action \&}
136 means print the line;
137 a missing pattern always matches.
138 Pattern-action statements are separated by newlines or semicolons.
140 An action is a sequence of statements.
141 Statements are terminated by
142 semicolons, newlines or right braces.
143 An empty
144 .Ar expression-list
145 stands for
146 .Va $0 .
147 String constants are quoted
148 .Em \&"\ \&" ,
149 with the usual C escapes recognized within.
150 Expressions take on string or numeric values as appropriate,
151 and are built using the
152 .Sx Operators
153 (see next subsection).
154 Variables may be scalars, array elements
155 (denoted
156 .Va x[i] )
157 or fields.
158 Variables are initialized to the null string.
159 Array subscripts may be any string,
160 not necessarily numeric;
161 this allows for a form of associative memory.
162 Multiple subscripts such as
163 .Va [i,j,k]
164 are permitted; the constituents are concatenated,
165 separated by the value of
166 .Va SUBSEP .
167 .Ss Operators
169 operators, in order of decreasing precedence, are:
171 .Bl -tag -width ident -compact
172 .It Ic (...)
173 Grouping
174 .It Ic $
175 Field reference
176 .It Ic ++ --
177 Increment and decrement, can be used either as postfix or prefix.
178 .It Ic ^
179 Exponentiation (the
180 .Ic **
181 form is also supported, and
182 .Ic **=
183 for the assignment operator).
184 .It + - \&!
185 Unary plus, unary minus and logical negation.
186 .It * / %
187 Multiplication, division and modulus.
188 .It + -
189 Addition and subtraction.
190 .It Ar space
191 String concatenation.
192 .It Ic \*[Lt] \*[Gt]
193 .It Ic \*[Le] \*[Ge]
194 .It Ic != ==
195 Regular relational operators
196 .It Ic ~ !~
197 Regular expression match and not match
198 .It Ic in
199 Array membership
200 .It Ic "\*[Am]\*[Am]"
201 Logical AND
202 .It Ic "||"
203 Logical OR
204 .It Ic ?:
205 C conditional expression.
206 This is used as
207 .Ar expr1 Ic \&? Ar expr2 Ic \&: Ar expr3 No .
209 .Ar expr1
210 is true, the result value is
211 .Ar expr2 ,
212 otherwise it is
213 .Ar expr3 .
214 Only one of
215 .Ar expr2
217 .Ar expr3
218 is evaluated.
219 .It Ic = += -=
220 .It Ic *= /= %= ^=
221 Assignment and Operator-Assignment
223 .Ss Control Statements
224 The control statements are as follows:
226 .Bl -hang -offset indent -width indent -compact
227 .It Ic if \&( Ar expression Ic \&) Ar statement Bq Ic else Ar statement
228 .It Ic while \&( Ar expression Ic \&) Ar statement
229 .It Ic for \&( Ar expression Ic \&; Ar expression Ic \&; \
230 Ar expression Ic \&) Ar statement
231 .It Ic for \&( Va var Ic in Ar array Ic \&) Ar statement
232 .It Ic do Ar statement Ic while \&( Ar expression Ic \&)
233 .It Ic break
234 .It Ic continue
235 .It Ic delete Va array Bq Ar expression
236 .It Ic delete Va array
237 .It Ic exit Bq Ar expression
238 .Ar expression
239 .It Ic return Bq Ar expression
240 .It Ic \&{ Ar [ statement ... ] Ic \&}
242 .Ss I/O Statements
243 The input/output statements are as follows:
245 .Bl -tag -width indent
246 .It Fn close expr
247 Closes the file or pipe
248 .Ar expr .
249 Returns zero on success; otherwise nonzero.
250 .It Fn fflush expr
251 Flushes any buffered output for the file or pipe
252 .Ar expr .
253 Returns zero on success; otherwise nonzero.
254 .It Ic getline Bq Va var
256 .Va var
258 .Va $0 if
259 .Va var
260 is not specified)
261 to the next input record from the current input file.
262 .Ic getline
263 returns 1 for a successful input,
264 0 for end of file, and \-1 for an error.
265 .It Ic getline Bo Va var Bc Ic \*[Lt] Ar file
267 .Va var
269 .Va $0 if
270 .Va var
271 is not specified)
272 to the next input record from the specified file
273 .Ar file .
274 .It Ar expr Ic \&| getline
275 Pipes the output of
276 .Ar expr
277 into
278 .Ic getline ;
279 each call of
280 .Ic getline
281 returns the next line of output from
282 .Ar expr .
283 .It Ic next
284 Skip remaining patterns on this input line.
285 .It Ic nextfile
286 Skip rest of this file, open next, start at top.
287 .It Ic print Bo Ar expr-list Bc Bq Ic \*[Gt] Ar file
289 .Ic print
290 statement prints its arguments on the standard output (or to a file
292 .Ic \*[Gt] file
293 or to a pipe if
294 .Ic | Ar expr
295 is present),
296 separated by the current output field separator
297 .Va OFS ,
298 and terminated by the
299 output record separator
300 .Va ORS .
301 Both
302 .Ar file
304 .Ar expr
305 may be literal names or parenthesized expressions; identical string values in
306 different statements denote the same open file.
307 .It Ic printf Ar format Bo Ic \&, Ar expr-list Bc Bq Ic \*[Gt] Ar file
308 Format and print its expression list according to
309 .Ar format .
311 .Xr printf 3
312 for list of supported formats and their meaning.
314 .Ss Mathematical and Numeric Functions
315 AWK has the following mathematical and numerical functions built-in:
317 .Bl -tag -width indent
318 .It Fn atan2 x y
319 Returns the arctangent of
320 .Ar x Ic / Ar y
321 in radians.
322 See also
323 .Xr atan2 3 .
324 .It Fn cos expr
325 Computes the cosine of
326 .Ar expr ,
327 measured in radians.
328 See also
329 .Xr cos 3 .
330 .It Fn exp expr
331 Computes the exponential value of the given argument
332 .Ar expr .
333 See also
334 .Xr exp 3 .
335 .It Fn int expr
336 Truncates
337 .Ar expr
338 to integer.
339 .It Fn log expr
340 Computes the value of the natural logarithm of argument
341 .Ar expr .
342 See also
343 .Xr log 3 .
344 .It Fn rand
345 Returns random number between 0 and 1.
346 .It Fn sin expr
347 Computes the sine of
348 .Ar expr ,
349 measured in radians.
350 See also
351 .Xr sin 3 .
352 .It Fn sqrt expr
353 Computes the non-negative square root of
354 .Ar expr .
355 See also
356 .Xr sqrt 3 .
357 .It Fn srand [expr]
358 Sets seed for random number generator (
359 .Fn rand )
360 and returns the previous seed.
362 .Ss String Functions
363 AWK has the following string functions built-in:
365 .Bl -tag -width indent
366 .It Fn gensub r s h [t]
367 Search the target string
368 .Ar t
369 for matches of the regular expression
370 .Ar r .
372 .Ar h
373 is a string beginning with
374 .Ic g
376 .Ic G ,
377 then replace all matches of
378 .Ar r
379 with
380 .Ar s .
381 Otherwise,
382 .Ar h
383 is a number indicating which match of
384 .Ar r
385 to replace.
386 If no
387 .Ar t
388 is supplied,
389 .Va $0
390 is used instead.
391 .\"Within the replacement text
392 .\".Ar s ,
393 .\"the sequence
394 .\".Ar \en ,
395 .\"where
396 .\".Ar n
397 .\"is a digit from 1 to 9, may be used to indicate just the text that
398 .\"matched the
399 .\".Ar n Ap th
400 .\"parenthesized subexpression.
401 .\"The sequence
402 .\".Ic \e0
403 .\"represents the entire text, as does the character
404 .\".Ic & .
405 Unlike
406 .Fn sub
408 .Fn gsub ,
409 the modified string is returned as the result of the function,
410 and the original target is
411 .Em not
412 changed.
413 Note that the
414 .Ar \en
415 sequences within replacement string
416 .Ar s
417 supported by GNU
420 .Em not
421 supported at this moment.
422 .It Fn gsub r t "[s]"
423 same as
424 .Fn sub
425 except that all occurrences of the regular expression
426 are replaced;
427 .Fn sub
429 .Fn gsub
430 return the number of replacements.
431 .It Fn index s t
432 the position in
433 .Ar s
434 where the string
435 .Ar t
436 occurs, or 0 if it does not.
437 .It Fn length "[string]"
438 the length of its argument
439 taken as a string,
440 or of
441 .Va $0
442 if no argument.
443 .It Fn match s r
444 the position in
445 .Ar s
446 where the regular expression
447 .Ar r
448 occurs, or 0 if it does not.
449 The variables
450 .Va RSTART
452 .Va RLENGTH
453 are set to the position and length of the matched string.
454 .It Fn split s a "[fs]"
455 splits the string
456 .Ar s
457 into array elements
458 .Va a[1] ,
459 .Va a[2] ,
460 \&...,
461 .Va a[n] ,
462 and returns
463 .Va n .
464 The separation is done with the regular expression
465 .Ar fs
466 or with the field separator
467 .Va FS
469 .Ar fs
470 is not given.
471 An empty string as field separator splits the string
472 into one array element per character.
473 .It Fn sprintf fmt expr "..."
474 Returns the string resulting from formatting
475 .Ar expr
476 according to the
477 .Xr printf 3
478 format
479 .Ar fmt .
480 .It Fn sub r t "[s]"
481 substitutes
482 .Ar t
483 for the first occurrence of the regular expression
484 .Ar r
485 in the string
486 .Ar s .
488 .Ar s
489 is not given,
490 .Va $0
491 is used.
492 .It Fn substr s m [n]
493 Returns the at most
494 .Ar n Ns No -character
495 substring of
496 .Ar s
497 starting at position
498 .Ar m ,
499 counted from 1.
501 .Ar n
502 is omitted, the rest of
503 .Ar s
504 is returned.
505 .It Fn tolower str
506 returns a copy of
507 .Ar str
508 with all upper-case characters translated to their
509 corresponding lower-case equivalents.
510 .It Fn toupper str
511 returns a copy of
512 .Ar str
513 with all lower-case characters translated to their
514 corresponding upper-case equivalents.
516 .Ss Time Functions
517 This
519 provides the following two functions for obtaining time
520 stamps and formatting them:
521 .Bl -tag -width indent
522 .It Fn systime
523 Returns the value of time in seconds since the start of
524 .Tn Unix
525 Epoch (Midnight, January 1, 1970, Coordinated Universal Time).
526 See also
527 .Xr time 3 .
528 .It Fn strftime "[format [, timestamp]]"
529 Formats the time
530 .Ar timestamp
531 according to the string
532 .Ar format .
533 .Ar timestamp
534 should be in same form as value returned by
535 .Fn systime .
537 .Ar timestamp
538 is missing, current time is used.
540 .Ar format
541 is missing, a default format equivalent to the output of
542 .Xr date 1
543 would be used.
544 See the specification of ANSI C
545 .Xr strftime 3
546 for the format conversions which are supported.
548 .Ss Other built-in functions
549 .Bl -tag -width indent
550 .It Fn system cmd
551 executes
552 .Ar cmd
553 and returns its exit status
555 .Ss Patterns
556 Patterns are arbitrary Boolean combinations
557 (with
558 .Ic "! || \*[Am]\*[Am]" )
559 of regular expressions and
560 relational expressions.
561 Regular expressions are as in
562 .Xr egrep 1 .
563 Isolated regular expressions
564 in a pattern apply to the entire line.
565 Regular expressions may also occur in
566 relational expressions, using the operators
567 .Ic ~
569 .Ic !~ .
570 .Ic / re /
571 is a constant regular expression;
572 any string (constant or variable) may be used
573 as a regular expression, except in the position of an isolated regular expression
574 in a pattern.
576 A pattern may consist of two patterns separated by a comma;
577 in this case, the action is performed for all lines
578 from an occurrence of the first pattern
579 though an occurrence of the second.
581 A relational expression is one of the following:
582 .Bl -tag -offset indent -width indent -compact
583 .It Ar expression matchop regular-expression
584 .It Ar expression relop expression
585 .It Ar expression Ic in Ar array-name
586 .It ( Ar expr , expr,\&... Ic ") in" Ar array-name
589 where a
590 .Ar relop
591 is any of the six relational operators in C,
592 and a
593 .Ar matchop
594 is either
595 .Ic ~
596 (matches)
598 .Ic !~
599 (does not match).
600 A conditional is an arithmetic expression,
601 a relational expression,
602 or a Boolean combination
603 of these.
605 The special patterns
606 .Ic BEGIN
608 .Ic END
609 may be used to capture control before the first input line is read
610 and after the last.
611 .Ic BEGIN
613 .Ic END
614 do not combine with other patterns.
615 .Ss Built-in Variables
616 Variable names with special meanings:
617 .Bl -hang -width FILENAMES
618 .It Va ARGC
619 argument count, assignable
620 .It Va ARGV
621 argument array, assignable;
622 non-null members are taken as filenames
623 .It Va CONVFMT
624 conversion format used when converting numbers
625 (default
626 .Qq %.6g )
627 .It Va ENVIRON
628 array of environment variables; subscripts are names.
629 .It Va FILENAME
630 the name of the current input file
631 .It Va FNR
632 ordinal number of the current record in the current file
633 .It Va FS
634 regular expression used to separate fields; also settable
635 by option
636 .Fl F Ar fs .
637 .It Va NF
638 number of fields in the current record
639 .It Va NR
640 ordinal number of the current record
641 .It Va OFMT
642 output format for numbers (default
643 .Qq "%.6g"
645 .It Va OFS
646 output field separator (default blank)
647 .It Va ORS
648 output record separator (default newline)
649 .It Va RS
650 input record separator (default newline)
651 .It Va RSTART
652 Position of the first character matched by
653 .Fn match ;
654 0 if not match.
655 .It Va RLENGTH
656 Length of the string matched by
657 .Fn match ;
658 -1 if no match.
659 .It Va SUBSEP
660 separates multiple subscripts (default 034)
662 .Ss Functions
663 Functions may be defined (at the position of a pattern-action statement) thus:
664 .Bd -filled -offset indent
665 .Ic function foo(a, b, c) { ...; return x }
668 Parameters are passed by value if scalar and by reference if array name;
669 functions may be called recursively.
670 Parameters are local to the function; all other variables are global.
671 Thus local variables may be created by providing excess parameters in
672 the function definition.
673 .Sh EXAMPLES
674 .Bl -tag -width indent -compact
675 .It Ic length($0) \*[Gt] 72
676 Print lines longer than 72 characters.
678 .It Ic \&{ print $2, $1 \&}
679 Print first two fields in opposite order.
681 .It Ic BEGIN { FS =  \&",[ \et]*|[ \et]+\&" }
682 .It Ic "\ \ \ \ \ \ {" print \&$2, \&$1 }
683 Same, with input fields separated by comma and/or blanks and tabs.
685 .It Ic "\ \ \ \ {" s += $1 }
686 .It Ic END { print \&"sum is\&", s, \&" average is\ \&",\ s/NR\ }
687 Add up first column, print sum and average.
689 .It Ic /start/, /stop/
690 Print all lines between start/stop pairs.
692 .It Ic BEGIN { # Simulate echo(1)
693 .It Ic "\ \ \ \ " for (i = 1; i \*[Lt] ARGC;\ i++)\ printf\ \&"%s\ \&",\ ARGV[i]
694 .It Ic "\ \ \ \ " printf \&"\en\&"
695 .It Ic "\ \ \ \ " exit }
697 .Sh SEE ALSO
698 .Xr egrep 1 ,
699 .Xr lex 1 ,
700 .Xr sed 1 ,
701 .Xr atan2 3 ,
702 .Xr cos 3 ,
703 .Xr exp 3 ,
704 .Xr log 3 ,
705 .Xr sin 3 ,
706 .Xr sqrt 3 ,
707 .Xr strftime 3 ,
708 .Xr time 3
710 A. V. Aho, B. W. Kernighan, P. J. Weinberger,
711 .Em The AWK Programming Language ,
712 Addison-Wesley, 1988.
713 ISBN 0-201-07981-X
715 .Em AWK Language Programming ,
716 Edition 1.0, published by the Free Software Foundation, 1995
717 .Sh HISTORY
718 .Nm nawk
719 has been the default system
721 since
722 .Nx 2.0 ,
723 replacing the previously used GNU
724 .Nm .
725 .Sh BUGS
726 There are no explicit conversions between numbers and strings.
727 To force an expression to be treated as a number add 0 to it;
728 to force it to be treated as a string concatenate
729 \&"\&" to it.
731 The scope rules for variables in functions are a botch;
732 the syntax is worse.