Annotation of researchv10dc/man/man1/awk.1, revision 1.1.1.1

1.1       root        1: .TH AWK 1
                      2: .CT 1 files prog_other
                      3: .SH NAME
                      4: awk \- pattern-directed scanning and processing language
                      5: .SH SYNOPSIS
                      6: .B awk
                      7: [
                      8: .BI -F fs
                      9: ]
                     10: [
                     11: .BI -v
                     12: .I var=value
                     13: ] ...
                     14: [
                     15: .B -f
                     16: ]
                     17: .I prog
                     18: [
                     19: .I file ...
                     20: ]
                     21: .SH DESCRIPTION
                     22: .I Awk
                     23: scans each input
                     24: .I file
                     25: for lines that match any of a set of patterns in
                     26: .IR prog ,
                     27: which may appear as one literal argument or as one or more
                     28: file names each preceded by
                     29: .BR -f .
                     30: With each pattern
                     31: may be associated an action to be performed
                     32: when a line of a
                     33: .I file
                     34: matches the pattern.
                     35: Each line is matched against the
                     36: pattern portion of every pattern-action statement in order;
                     37: the associated action is performed for each matched pattern.
                     38: The file name 
                     39: .L -
                     40: means the standard input.
                     41: Any
                     42: .IR file
                     43: of the form
                     44: .I var=value
                     45: is treated as an assignment, not a filename,
                     46: and is executed at the time it would have been opened if it were a filename.
                     47: Option
                     48: .B -v
                     49: designates an assignment to be done before
                     50: .I prog
                     51: is executed.
                     52: .PP
                     53: An input line is made up of fields separated by white space,
                     54: or by regular expression
                     55: .BR FS .
                     56: The fields are denoted
                     57: .BR $1 ,
                     58: .BR $2 ,
                     59: \&..., while
                     60: .B $0
                     61: refers to the entire line.
                     62: .PP
                     63: A pattern-action statement has the form
                     64: .IP
                     65: .IB pattern " { " action " }
                     66: .PP
                     67: A missing 
                     68: .BI { " action " }
                     69: means print the line;
                     70: a missing pattern always matches.
                     71: Pattern-action statements are separated by newlines or semicolons.
                     72: .PP
                     73: An action is a sequence of statements.
                     74: A statement can be one of the following:
                     75: .PP
                     76: .EX
                     77: .ta \w'\f(CWdelete array[expression]'u
                     78: if(\fI expression \fP)\fI statement \fP\fR[ \fPelse\fI statement \fP\fR]\fP
                     79: while(\fI expression \fP)\fI statement\fP
                     80: for(\fI expression \fP;\fI expression \fP;\fI expression \fP)\fI statement\fP
                     81: for(\fI var \fPin\fI array \fP)\fI statement\fP
                     82: do\fI statement \fPwhile(\fI expression \fP)
                     83: break
                     84: continue
                     85: {\fR [\fP\fI statement ... \fP\fR] \fP}
                     86: \fIexpression\fP       #\fR commonly\fP\fI var = expression\fP
                     87: print\fR [ \fP\fIexpression-list \fP\fR] \fP\fR[ \fP>\fI expression \fP\fR]\fP
                     88: printf\fI format \fP\fR[ \fP,\fI expression-list \fP\fR] \fP\fR[ \fP>\fI expression \fP\fR]\fP
                     89: return\fR [ \fP\fIexpression \fP\fR]\fP
                     90: next   #\fR skip remaining patterns on this input line\fP
                     91: delete\fI array\fP[\fI expression \fP] #\fR delete an array element\fP
                     92: exit\fR [ \fP\fIexpression \fP\fR]\fP  #\fR exit immediately; status is \fP\fIexpression\fP
                     93: .EE
                     94: .DT
                     95: .PP
                     96: Statements are terminated by
                     97: semicolons, newlines or right braces.
                     98: An empty
                     99: .I expression-list
                    100: stands for
                    101: .BR $0 .
                    102: String constants are quoted \&\f(CW"\ "\fR,
                    103: with the usual C escapes recognized within.
                    104: Expressions take on string or numeric values as appropriate,
                    105: and are built using the operators
                    106: .B + - * / % ^
                    107: (exponentiation), and concatenation (indicated by white space).
                    108: The operators
                    109: .B
                    110: ! ++ -- += -= *= /= %= ^= > >= < <= == != && || ?:
                    111: are also available in expressions.
                    112: Variables may be scalars, array elements
                    113: (denoted
                    114: .IB x  [ i ] )
                    115: or fields.
                    116: Variables are initialized to the null string.
                    117: Array subscripts may be any string,
                    118: not necessarily numeric;
                    119: this allows for a form of associative memory.
                    120: Multiple subscripts such as
                    121: .B [i,j,k]
                    122: are permitted; the constituents are concatenated,
                    123: separated by the value of
                    124: .BR SUBSEP .
                    125: .PP
                    126: The
                    127: .B print
                    128: statement prints its arguments on the standard output
                    129: (or on a file if
                    130: .BI > file
                    131: or
                    132: .BI >> file
                    133: is present or on a pipe if
                    134: .BI | cmd
                    135: is present), separated by the current output field separator,
                    136: and terminated by the output record separator.
                    137: .I file
                    138: and
                    139: .I cmd
                    140: may be literal names or parenthesized expressions;
                    141: identical string values in different statements denote
                    142: the same open file.
                    143: The
                    144: .B printf
                    145: statement formats its expression list according to the format
                    146: (see
                    147: .IR printf (3)) .
                    148: The built-in function
                    149: .BI close( expr )
                    150: closes the file or pipe
                    151: .IR expr .
                    152: .PP
                    153: The mathematical functions
                    154: .BR exp ,
                    155: .BR log ,
                    156: .BR sqrt ,
                    157: .BR sin ,
                    158: .BR cos ,
                    159: and
                    160: .BR atan2 
                    161: are built in.
                    162: Other built-in functions:
                    163: .TF length
                    164: .TP
                    165: .B length
                    166: the length of its argument
                    167: taken as a string,
                    168: or of
                    169: .B $0
                    170: if no argument.
                    171: .TP
                    172: .B rand
                    173: random number on (0,1)
                    174: .TP
                    175: .B srand
                    176: sets seed for
                    177: .B rand
                    178: and returns the previous seed.
                    179: .TP
                    180: .B int
                    181: truncates to an integer value
                    182: .TP
                    183: .BI substr( s , " m" , " n\fB)
                    184: the
                    185: .IR n -character
                    186: substring of
                    187: .I s
                    188: that begins at position
                    189: .IR m 
                    190: counted from 1.
                    191: .TP
                    192: .BI index( s , " t" )
                    193: the position in
                    194: .I s
                    195: where the string
                    196: .I t
                    197: occurs, or 0 if it does not.
                    198: .TP
                    199: .BI match( s , " r" )
                    200: the position in
                    201: .I s
                    202: where the regular expression
                    203: .I r
                    204: occurs, or 0 if it does not.
                    205: The variables
                    206: .B RSTART
                    207: and
                    208: .B RLENGTH
                    209: are set to the position and length of the matched string.
                    210: .TP
                    211: .BI split( s , " a" , " fs\fB)
                    212: splits the string
                    213: .I s
                    214: into array elements
                    215: .IB a [1] ,
                    216: .IB a [2] ,
                    217: \&...,
                    218: .IB a [ n ] ,
                    219: and returns
                    220: .IR n .
                    221: The separation is done with the regular expression
                    222: .I fs
                    223: or with the field separator
                    224: .B FS
                    225: if
                    226: .I fs
                    227: is not given.
                    228: .TP
                    229: .BI sub( r , " t" , " s\fB)
                    230: substitutes
                    231: .I t
                    232: for the first occurrence of the regular expression
                    233: .I r
                    234: in the string
                    235: .IR s .
                    236: If
                    237: .I s
                    238: is not given,
                    239: .B $0
                    240: is used.
                    241: .TP
                    242: .B gsub
                    243: same as
                    244: .B sub
                    245: except that all occurrences of the regular expression
                    246: are replaced;
                    247: .B sub
                    248: and
                    249: .B gsub
                    250: return the number of replacements.
                    251: .TP
                    252: .BI sprintf( fmt , " expr" , " ...\fB )
                    253: the string resulting from formatting
                    254: .I expr ...
                    255: according to the
                    256: .IR printf (3)
                    257: format
                    258: .I fmt
                    259: .TP
                    260: .BI system( cmd )
                    261: executes
                    262: .I cmd
                    263: and returns its exit status
                    264: .PD
                    265: .PP
                    266: The ``function''
                    267: .B getline
                    268: sets
                    269: .B $0 to
                    270: the next input record from the current input file;
                    271: .B getline
                    272: .BI < file
                    273: sets
                    274: .B $0
                    275: to the next record from
                    276: .IR file .
                    277: .B getline
                    278: .I x
                    279: sets variable
                    280: .I x
                    281: instead.
                    282: Finally,
                    283: .IB cmd " | getline
                    284: pipes the output of
                    285: .I cmd
                    286: into
                    287: .BR getline ;
                    288: each call of
                    289: .B getline
                    290: returns the next line of output from
                    291: .IR cmd .
                    292: In all cases,
                    293: .B getline
                    294: returns 1 for a successful input,
                    295: 0 for end of file, and \-1 for an error.
                    296: .PP
                    297: Patterns are arbitrary Boolean combinations
                    298: (with
                    299: .BR "! || &&" )
                    300: of regular expressions and
                    301: relational expressions.
                    302: Regular expressions are as in
                    303: .IR egrep ; 
                    304: see
                    305: .IR gre (1).
                    306: Isolated regular expressions
                    307: in a pattern apply to the entire line.
                    308: Regular expressions may also occur in
                    309: relational expressions, using the operators
                    310: .BR ~
                    311: and
                    312: .BR !~ .
                    313: .BI / re /
                    314: is a constant regular expression;
                    315: any string (constant or variable) may be used
                    316: as a regular expression, except in the position of an isolated regular expression
                    317: in a pattern.
                    318: .PP
                    319: A pattern may consist of two patterns separated by a comma;
                    320: in this case, the action is performed for all lines
                    321: from an occurrence of the first pattern
                    322: though an occurrence of the second.
                    323: .PP
                    324: A relational expression is one of the following:
                    325: .IP
                    326: .I expression matchop regular-expression
                    327: .br
                    328: .I expression relop expression
                    329: .br
                    330: .IB expression " in " array-name
                    331: .br
                    332: .BI ( expr , expr,... ") in " array-name
                    333: .PP
                    334: where a relop is any of the six relational operators in C,
                    335: and a matchop is either
                    336: .B ~ 
                    337: (matches)
                    338: or
                    339: .B !~
                    340: (does not match).
                    341: A conditional is an arithmetic expression,
                    342: a relational expression,
                    343: or a Boolean combination
                    344: of these.
                    345: .PP
                    346: The special patterns
                    347: .B BEGIN
                    348: and
                    349: .B END
                    350: may be used to capture control before the first input line is read
                    351: and after the last.
                    352: .B BEGIN
                    353: and
                    354: .B END
                    355: do not combine with other patterns.
                    356: .PP
                    357: Variable names with special meanings:
                    358: .TF FILENAME
                    359: .TP
                    360: .B FS
                    361: regular expression used to separate fields; also settable
                    362: by option
                    363: .BI -F fs.
                    364: .TP
                    365: .BR NF
                    366: number of fields in the current record
                    367: .TP
                    368: .B NR
                    369: ordinal number of the current record
                    370: .TP
                    371: .B FNR
                    372: ordinal number of the current record in the current file
                    373: .TP
                    374: .B FILENAME
                    375: the name of the current input file
                    376: .TP
                    377: .B RS
                    378: input record separator (default newline)
                    379: .TP
                    380: .B OFS
                    381: output field separator (default blank)
                    382: .TP
                    383: .B ORS
                    384: output record separator (default newline)
                    385: .TP
                    386: .B OFMT
                    387: output format for numbers (default
                    388: .BR "%.6g" )
                    389: .TP
                    390: .B SUBSEP
                    391: separates multiple subscripts (default 034)
                    392: .TP
                    393: .B ARGC
                    394: argument count, assignable
                    395: .TP
                    396: .B ARGV
                    397: argument array, assignable;
                    398: non-null members are taken as filenames
                    399: .TP
                    400: .B ENVIRON
                    401: array of environment variables; subscripts are names.
                    402: .PD
                    403: .PP
                    404: Functions may be defined (at the position of a pattern-action statement) thus:
                    405: .IP
                    406: .L
                    407: function foo(a, b, c) { ...; return x }
                    408: .PP
                    409: Parameters are passed by value if scalar and by reference if array name;
                    410: functions may be called recursively.
                    411: Parameters are local to the function; all other variables are global.
                    412: Thus local variables may be created by providing excess parameters in
                    413: the function definition.
                    414: .SH EXAMPLES
                    415: .TP
                    416: .L
                    417: length > 72
                    418: Print lines longer than 72 characters.
                    419: .TP
                    420: .L
                    421: { print $2, $1 }
                    422: Print first two fields in opposite order.
                    423: .PP
                    424: .EX
                    425: BEGIN { FS = ",[ \et]*|[ \et]+" }
                    426:       { print $2, $1 }
                    427: .EE
                    428: .ns
                    429: .IP
                    430: Same, with input fields separated by comma and/or blanks and tabs.
                    431: .PP
                    432: .EX
                    433:        { s += $1 }
                    434: END    { print "sum is", s, " average is", s/NR }
                    435: .EE
                    436: .ns
                    437: .IP
                    438: Add up first column, print sum and average.
                    439: .TP
                    440: .L
                    441: /start/, /stop/
                    442: Print all lines between start/stop pairs.
                    443: .PP
                    444: .EX
                    445: BEGIN  {       # Simulate echo(1)
                    446:        for (i = 1; i < ARGC; i++) printf "%s ", ARGV[i]
                    447:        printf "\en"
                    448:        exit }
                    449: .EE
                    450: .SH SEE ALSO
                    451: .IR gre (1),
                    452: .IR lex (1), 
                    453: .IR sed (1)
                    454: .br
                    455: A. V. Aho, B. W. Kernighan, P. J. Weinberger,
                    456: .I
                    457: The AWK Programming Language,
                    458: Addison-Wesley, 1988.
                    459: .SH BUGS
                    460: There are no explicit conversions between numbers and strings.
                    461: To force an expression to be treated as a number add 0 to it;
                    462: to force it to be treated as a string concatenate
                    463: \&\f(CW""\fP to it.
                    464: .br
                    465: The scope rules for variables in functions are a botch;
                    466: the syntax is worse.

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.