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