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