home *** CD-ROM | disk | FTP | other *** search
/ The Unsorted BBS Collection / thegreatunsorted.tar / thegreatunsorted / programming / misc_programming / awk.man < prev    next >
Text File  |  1991-05-04  |  21KB  |  510 lines

  1.  
  2. AWK                                                                    AWK
  3.  
  4.  
  5. NAME
  6.  
  7.         awk - pattern scanning and processing language
  8.  
  9.  
  10. SYNOPSIS
  11.  
  12.         awk [-ffile] [-Fstr] [-t] [-l] [program] [var=text] [file] ...
  13.  
  14.  
  15. DESCRIPTION
  16.  
  17. Awk scans each input file for lines that match any of a set of patterns 
  18. specified in the program.  With each pattern in the program there can be an 
  19. associated action that will be performed when a line of a file matches the 
  20. pattern.
  21.  
  22. The AWK program may be specified as a file with the -f option as:
  23.  
  24.         -ffilename.ext
  25.         -f filename.ext
  26.  
  27. in which case the AWK program is read from the named file.  If the file does 
  28. not exist then an error message will be printed. 
  29.  
  30. The AWK program may also be specified as a single argument as:
  31.  
  32.         filename.ext
  33.         filename[.awk]
  34.  
  35. or as a valid AWK program:
  36.  
  37.         { for (i in ARGV) printf ("%d: %s\n", i, ARGV[i]) }
  38.  
  39. AWK will first try to open the first argument as a file, it it can't open a 
  40. file, it then adds the extension ".awk" and tries again to open a file, 
  41. finally AWK will attempt to read the argument directly as an AWK program. 
  42.  
  43. If the filename is a minus sign (-) then the AWK program is read from the 
  44. standard input.  The program may then be terminated with either a ctrl-Z or
  45. a period (.) on a line by itself.  The second method is useful for entering 
  46. an AWK program followed by the data for the program.  If no program file is 
  47. specified then the program is read from standard input.
  48.  
  49. If the -f option is selected the full path/name/extension must be specified.  
  50. If only the filename is specified AWK will first attempt to open the named 
  51. file, then the file with the extension ".AWK", finally AWK will attempt to 
  52. parse the parameter as a program.  Multiple -f options may be used to get
  53. the program source from many files.
  54.  
  55. Files are read in order, the file name '-' means standard input.  Each line 
  56. is matched against the pattern portion of every pattern-action statement; 
  57. the associated action is performed for each matched pattern.
  58.  
  59. If a file name has the form variable=value, program variables may be changed 
  60. before a file is read.  The assignment takes place when the argument would be 
  61. treated as the next file to read.   Any assignments before the first file
  62. take place before the first BEGIN block is executed.  An assignment after 
  63. the last file will occur before any END block unless an exit was performed.
  64.  
  65.         awk "{ print code, NR, $$0 }" code=10 file1 code=75 file2
  66.  
  67. If no files are specified the input is read from standard input.
  68.  
  69. An input line is made up of fields separated by the field separator FS.  
  70. The fields are denoted by $1, $2 ...; $0 denotes the entire line:
  71.  
  72.         $0 = "now is the time"
  73.  
  74.         $1 = "now"      $2 = "is"
  75.         $3 = "the"      $4 = "time"
  76.  
  77. with the default FS (white space).  If the field separator is set to comma (,)
  78. with "-F," on the command line then the fields might be:
  79.  
  80.         $0 = "a, b,c,, ,"
  81.  
  82.         $1 = "a"        $2 = " b"       $3 = "c"
  83.         $4 = ""         $5 = " "        $6 = ""
  84.  
  85. A pattern-action statement has the form:
  86.  
  87.         pattern { action }
  88.  
  89. A missing { action } has the same effect as { print $0 }, a missing pattern 
  90. always matches. 
  91.  
  92. Pattern-Actions are separated by semicolons or newlines.  A statement may be 
  93. continued on the next line by putting a backslash (\) at the end of the line. 
  94.  
  95.         { words += NF }; END { print words }
  96.  
  97. A pattern is a test that is performed on each input line.  If the pattern 
  98. matches the input line then the corresponding action is performed.
  99.  
  100. Patterns come in several forms:
  101.  
  102. Form            Example         Meaning
  103.  
  104. BEGIN           BEGIN {N=1}     initialize N before input is read
  105. END             END {print N}   print N after all input is read
  106. function        function x(y)   define a function called x
  107. text match      /stop/          line contains the string "stop"
  108. expression      $1 == 3         first field is the number 3
  109. compound        /x/ && NF > 2   more that two fields and contain "x"
  110. range           NR==10,NR==20   records ten through twenty inclusive
  111.  
  112. BEGIN and END patterns are special patterns that match before any files are 
  113. read and after all files have been read respectivly.  There may be multiple 
  114. occurances of these patterns and the associated actions are executed in the 
  115. order that they occur.  
  116.  
  117. If there is only a series of BEGIN blocks in the awk program and no other 
  118. pattern/action blocks except function declarations then no input files are 
  119. read.  If only END blocks are defined then all the files are read and NR will 
  120. be set to the number of records in all the files.
  121.  
  122.         BEGIN { page = 5 }
  123.  
  124. A function pattern is never matched and serves to declare a user defined 
  125. function.  You can declare a function with more parameters than are 
  126. passed as arguments so that the extra parameters can act as local 
  127. variables.  
  128.  
  129.         function show(a, i) { for (i in a) print a[i] }
  130.  
  131. A regular expression by itself is matched against the input record ($0). That 
  132. is "/abc/" is equivalent to "$0 ~ /abc/". 
  133.  
  134. Any expression will match if it evaluates to != 0 or !="".  Also any logical 
  135. combination of expressions and regular expressions may be used as a pattern.
  136.  
  137.         FILENAME != oldname && FILENAME != "skip"
  138.  
  139. The last special pattern is two patterns separated by a comma.  This pattern 
  140. specifies a range of records that match the pattern.  The pattern starts to 
  141. match when the first pattern matches and stops matching when the second 
  142. pattern matches.  If they both match on the same input record then only that 
  143. record will match the pattern.
  144.  
  145.         /AUTHOR/,/NOTES/
  146.  
  147. An action is a sequence of statements that are performed when a pattern 
  148. matches.  
  149.  
  150. A statement can be one of the following: 
  151.  
  152.         { STATEMENT_LIST }
  153.         EXPRESSION
  154.         print EXPRESSION-LIST
  155.         printf FORMAT, EXPRESSION_LIST
  156.         if ( EXPRESSION ) STATEMENT [ else STATEMENT ]
  157.         for ( VARIABLE in ARRAY ) STATEMENT
  158.         for ( EXPRESSION; EXPRESSION; EXPRESSION) STATEMENT
  159.         while ( EXPRESSION ) STATEMENT
  160.         do STATEMENT while ( EXPRESSION )
  161.         break
  162.         continue
  163.         next
  164.         delete ARRAY[SUBSCRIPT]
  165.         exit [ EXPRESSION ]
  166.         return [EXPRESSION ]
  167.  
  168. A STATEMENT_LIST is a list of statements separated by newlines or semicolons.
  169. As with pattern-actions statements may be extended over more than one line 
  170. with backslash (\). 
  171.         {
  172.             print "value:", i, \
  173.                   "number:", j
  174.             i = i + $3; j++
  175.         }
  176.  
  177. Expressions take on string or numeric values depending on the operators.
  178. There is only one string operator, concatenation, indicated by adjacent 
  179. expressions.  The following are the operators in order of increasing 
  180. precedence:
  181.  
  182. Operation           Operator      Example     Meaning
  183.  
  184. assignment          = *= /= %=    x += 2      two is added to x
  185.                     += -= ^=
  186. conditional         ?:            x?y:z       if x then y else z
  187. logical OR          ||            x||y        if (x) 1 else if (y) 1 else 0
  188. logical AND         &&            x&&y        if (x) if (y) 1 else 0 else 0
  189. array membership    in            x in y      if (exists(y[x])) 1 else 0
  190. matching            ~ !~          $1~/x/      if ($1 contains x) 1 else 0
  191. relational          == != >       x==y        if (x equals y) 1 else 0
  192.                     <= >= <
  193. concatenation                     "x" "y"     a new string "xy"
  194. add, subtract       +  -          x+y         sum of x and y
  195. mul, div, mod       * / %         x*y         product of x and y
  196. unary plus minus    + -           -x          negative of x
  197. logical not         !             !x          if (x is 0 or null) 1 else 0
  198. exponentiation      ^             x^y         x to the yth power
  199. inc, dec            ++ --         x++         x then add 1 to x
  200. field               $             $3          the 3rd field
  201. grouping            ()            ($1)++      increment the 1st field
  202.  
  203. Variables may be scalars, array elements (denoted x[i]) or fields (denoted 
  204. $expression).  Variable names begin with a letter or underscore and may 
  205. contain any number of letters, digits, or underscores.
  206.  
  207. Variables are initialized to both zero and the null string.  Fields and the 
  208. command line arguments will be both string and numeric if they can be 
  209. completely represented as numbers.  The range for numbers is 1E-306..1E306.
  210.  
  211. Array subscripts may be any string.  Multi dimensional arrays are simulated in 
  212. AWK by concatenating the individual indexes with the subscript separator 
  213. between them.  So array[1,1] is equivalent to array[1 SUBSEP 1].   Individual
  214. array elements may be removed with the delete statement, and the whole array
  215. erased with an assignment to the bare variable.
  216.  
  217.         delete a[i]             # delete one element
  218.         a = ""                  # delete all elements
  219.  
  220. Simply referencing an array element will cause it to be created and 
  221. initialized.  To avoid creating unwanted elements use the in operator.
  222.  
  223.         if (i in a) print a[i]  # print one element (if it exists)
  224.         for (i in a) print a[i] # print all elements (that exist)
  225.  
  226. Comparison will be numeric if both operands are numeric otherwise a string 
  227. comparison will be made.  Operands will be coerced to strings if necessary.  
  228. Uninitialized variables will compare as numeric if the other operand is 
  229. numeric or uninitialized.  Eg. 2 > "10" and 2 < 10.
  230.  
  231. There are a number of built in variables they are:
  232.  
  233. Variable        Meaning                                         Default
  234.  
  235. ARGC            number of command line arguments                   -
  236. ARGV            array of command line arguments                    -
  237. FILENAME        name of current input file                         -
  238. FNR             record number in current file                      -
  239. FS              controls the input field separator                " "
  240. NF              number of fields in current record                 -
  241. NR              number of records read so far                      -
  242. OFMT            output format for records                        "%.6g"
  243. OFS             output field separator                            " "
  244. ORS             output record separator                           "\n"
  245. RLENGTH         length of string matched by match function         -
  246. RS              controls input record separator                   "\n"
  247. RSTART          start of string match by match function            -
  248. SUBSEP          subscript separator                              "\034"
  249.  
  250.  
  251. ARGC and ARGV are the count and values of the command line arguments. ARGV[0] 
  252. is the full path/name of AWK.EXE, and the rest are all the command line 
  253. arguments except the "-F", "-f" and program arguments which are used by AWK.
  254.  
  255. The field separator is a string that is interpreted as a regular expression.
  256. A single space has a special meaning and is changed to /[ \t]+/, any leading 
  257. spaces or tabs are removed.  A BEGIN action may be used to set the separator 
  258. or it may be set by using the -F command line option. 
  259.  
  260.         BEGIN { FS = "," }      sets FS to a single comma
  261.         "-F[ ]"                 sets FS to a single space
  262.  
  263. The record separator is a string that is either a newline or the null string.
  264. If the record separator RS is set to the null string then multi line records 
  265. may be read.  In this case the record separator is an empty line. Setting RS 
  266. to "\n" will restore the default behavior.
  267.  
  268. There are a number of built in functions:
  269.  
  270. Function            Value returned
  271.  
  272. atan2(y, x)         arctangent of y/x           in the range -pi to pi
  273. cos(x)              cosine of x                 x in radians
  274. exp(x)              exponentiation of x         (e ^ x)
  275. gsub(r, s)          number of substitutions     substitute s for all r in $0
  276. gsub(r, s, t)       number of substitutions     substitute s for all r in t     
  277. index(s)            position of s in $0         0 if not in $0
  278. index(s, t)         position of t in s          0 if not in s
  279. int(x)              integer part of x
  280. length(s)           number of characters in s
  281. log(x)              natural log of x
  282. match(s, r)         position of r in s or 0     sets RSTART and RLENGTH
  283. rand()              random number               0 <= rand < 1
  284. sin(x)              sine of x                   x in radians
  285. split(s, a)         number of fields            split s into a on FS 
  286. split(s, a, fs)     number of fields            split s into a on fs
  287. sprintf(f, e, ...)  formatted string
  288. sqrt(x)             square root of x
  289. sub(r, s)           number of substitutions     substitute s for one r in $0
  290. sub(r, s, t)        number of substitutions     substitute s for one r in t
  291. substr(s, p)        substring of s from p to end
  292. substr(s, p, n)     substring of s from p of length n
  293. system(s)           exit status                 execute command s
  294.  
  295. The numeric procedure srand(x) sets a new seed for the random number 
  296. generator.  srand() sets the seed from the system time.
  297.  
  298. The regular expression arguments of sub, gsub, and match may be either regular 
  299. expressions delimited by slashes or any expression.  The expression is coerced 
  300. to a string and the resulting string is converted into a regular expression.  
  301. This coersion and conversion occurs every time the procedure is called so the 
  302. regular expression form will always be faster. 
  303.  
  304. The print and printf statements come in several forms:
  305.  
  306. Form                            Meaning
  307.  
  308. print                           print $0 on standard output
  309. print expression, ...           prints expressions separated by OFS
  310. print(expression, ...)  
  311. printf format, expression, ...
  312. printf(format, expression, ...)
  313. print >"file"                   print $0 on file "file"
  314. print >>"file"                  append $0 to file "file"
  315. printf(format, ...) >"file"
  316. printf(format, ...) >>"file"
  317.  
  318. close("file")                   close the file "file"
  319.  
  320. The print statement prints its arguments on the standard output, or the 
  321. specified file, separated by the current output field separator, and 
  322. terminated by the output record separator.  The printf statement formats its 
  323. expression-list according to the format.  The file is only opened once unless 
  324. it is closed between executions of the print statement.  A file than is open 
  325. for output must be closed if it is to be used for input.  The "file" argument 
  326. may any expression that evaluates to a DOS file name. 
  327.  
  328. There is one function that is used for input.  It has several forms
  329.  
  330. Form                            Meaning
  331.  
  332. getline                         read the next record into $0
  333. getline s                       read the next record into s
  334. getline <"file"                 read a record from file "file" into $0
  335. getline s <"file"               read a record from file "file" into s
  336.  
  337. getline returns -1 if there is an error (such as non existent file), 0 on 
  338. end of file and 1 otherwise.  The pipe form mentioned in the book is not 
  339. implemented in this version.
  340.  
  341. The for ( i in a ) statement assigns to i the indexes of a for all elements 
  342. in a.  The while (), do while (), and for (;;) statement is as in C as are 
  343. break and continue. 
  344.  
  345. The next statements stops processing the pattern action statements and reads 
  346. in the next record.  An exit will cause the END actions to be performed or if 
  347. encountered in an END action will cause termination of the program.  The 
  348. optional expression is returned as the exit status unless overridden by a 
  349. further exit statement in an END action. 
  350.  
  351. The return statement may be used only in function declarations.  It may have 
  352. an option value to return as the value of the function.  The value of a 
  353. function defaults to zero/null (0/""). 
  354.  
  355. REGULAR EXPRESSIONS
  356.  
  357. A \ followed by a single character matches that character.
  358.  
  359. The ^ matches the beginning of the string.
  360.  
  361. The $ matches the end of the string.
  362.  
  363. A . matches any character.
  364.  
  365. A single character with no special meaning matches that character.
  366.  
  367. A string enclosed in brackets [] matches any single character in that string.  
  368. Ranges of ASCII character codes may be abbreviated as 'a-z0-9'.  A left 
  369. bracket ] may occur only as the first character of the string.  A literal - 
  370. must be placed where it can't be mistaken as a range indicator. If the first 
  371. character is the caret ^ then any character not in the string will match. 
  372.  
  373. A regular expression followed by * matches a sequence of 0 or more
  374. matches of the regular expression.
  375.  
  376. A regular expression followed by + matches a sequence of 1 or more
  377. matches of the regular expression.
  378.  
  379. A regular expression followed by ? matches a sequence of 0 or 1
  380. matches of the regular expression.
  381.  
  382. Two adjacent (concatenated) regular expressions match a match of the first 
  383. followed by a match of the second. 
  384.  
  385. Two regular expressions separated by | match either a match for the
  386. first or a match for the second.
  387.  
  388. A regular expression enclosed in parentheses matches a match for the
  389. regular expression.
  390.  
  391. The order of precedence of operators at the same parenthesis level is 
  392. [] then *+? then concatenation then |.
  393.  
  394.  
  395. PRINTF FORMAT
  396.  
  397. Any character except % and \ is printed as that character.
  398.  
  399. A \ followed by up to three octal digits is the ASCII character
  400. represented by that number.
  401.  
  402. A \ followed by n, t, r, b, f, v, or p is newline, tab, return, backspace, 
  403. form feed, vertical tab, or escape. 
  404.  
  405. %[-][number][.number][l][c|d|E|e|F|f|G|g|o|s|X|x|%] prints an expression:
  406.  
  407. The optional leading - means left justified in the field
  408. The optional first number is the field width
  409. The optional . and second number is the precision
  410. The optional l denotes a long expression
  411. The final character denotes the form of the expression
  412.  
  413.         c character
  414.         d decimal
  415.         e exponential floating point
  416.         f fixed, or exponential floating point
  417.         g decimal, fixed, or exponential floating point
  418.         o octal
  419.         s string
  420.         x hexadecimal 
  421.  
  422. An upper case E, F, or G denotes use of upper case E in exponential format.
  423. An upper case X denotest hexadecimal in upper case.
  424. Two percent characters (%%) will print as one.
  425.  
  426. A format will match the regular expression:
  427.  
  428.         /[^%]*(%(%|(-?([0-9]+)?(\.[0-9]+)?l?[cdEeFfGgosXx]))[^%]*)*/
  429.  
  430. EXAMPLES
  431.  
  432. Print lines longer than 72 characters (missing action is print):
  433.  
  434.         length($0) > 72
  435.  
  436. Print first two fields in opposite order (missing pattern is always match):
  437.  
  438.         { print $2, $1 }
  439.  
  440. Add up first column, print sum and average:
  441.  
  442.                 { s = s + $1 }
  443.         END     { print "sum is", s, "average is", s/NR }
  444.  
  445. Print fields in reverse order:
  446.  
  447.         { for (i = NF; i > 0; --i ) print $i }
  448.  
  449. Print all lines between start/stop pairs:
  450.  
  451.         /start/,/stop/
  452.  
  453. Print all lines whose first field is different from previous one:
  454.  
  455.         $1 != prev { print; prev = $1 }
  456.  
  457. Convert date from MM/DD/YY to metric (YYMMDD):
  458.  
  459.         { n = split(date, a, "/"); date = a[3] a[1] a[2] }
  460.  
  461. Copy a C program and insert include files:
  462.  
  463.         $1 == "#include" && $2 ~ /^"/ {
  464.                 include = $2;
  465.                 gsub(/"/, "", include);
  466.                 while ((getline <include) > 0) print
  467.                 next
  468.         }
  469.         { print }
  470.  
  471. AUTHOR
  472.  
  473.         Rob Duff,  Vancouver,  B.C.,  V5N 1Y9
  474.         BBS: (604)877-7752  Fido: 1:153/713.0
  475.  
  476. DATE
  477.  
  478.         08-Feb-90
  479.  
  480. SEE ALSO
  481.  
  482. M. E. Lesk and E. Schmidt,
  483.         LEX - Lexical Analyser Generator
  484.  
  485. A. V Aho, B. W Kernighan, P. J. Weinberger,
  486.         Awk - a pattern scanning and processing language
  487.  
  488. A. V Aho, B. W Kernighan, P. J. Weinberger,
  489.         The AWK Programming Language 
  490.         Addison-Wesley 1988   ISBN 0-201-07981-X
  491.  
  492.  
  493. NOTES
  494.  
  495. There are no explicit conversions between numbers and strings.  To force an 
  496. expression to b treated as a number add 0 to it; to force it to be a string 
  497. concatenate "" to it.  Array indices are strings and may have the same 
  498. numerical value but will index different values (eg "01" vs "1").
  499.  
  500. LIMITS
  501.  
  502.         stack depth is 500
  503.         number of files is 10
  504.         largest string is 4000
  505.         input line size is 2000
  506.         number of variables is 100
  507.         function call depth is 100
  508.         highest field number is 100
  509.  
  510.