summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArnold D. Robbins <arnold@skeeve.com>2014-03-07 10:46:18 +0200
committerArnold D. Robbins <arnold@skeeve.com>2014-03-07 10:46:18 +0200
commit4c0b1ddb06fd9329fd34db65a93e067d6426a7d1 (patch)
treeeeb93f2dfd1a0bb879877580d12f602d21893605
parent31206f0309881ee76cb7aba8c7537b15c34b78aa (diff)
downloadgawk-4c0b1ddb06fd9329fd34db65a93e067d6426a7d1.tar.gz
First round of indexing improvements.
-rw-r--r--doc/ChangeLog6
-rw-r--r--doc/gawk.info850
-rw-r--r--doc/gawk.texi118
-rw-r--r--doc/gawktexi.in116
4 files changed, 640 insertions, 450 deletions
diff --git a/doc/ChangeLog b/doc/ChangeLog
index 5e42570d..cf61ad19 100644
--- a/doc/ChangeLog
+++ b/doc/ChangeLog
@@ -1,6 +1,10 @@
+2014-03-07 Arnold D. Robbins <arnold@skeeve.com>
+
+ * gawktexi.in: Indexing improvements.
+
2014-03-02 John E. Malmberg <wb8tyw@qsl.net>
- * gawktext.in: Remove paragraph about obsolete VMS
+ * gawktexi.in: Remove paragraph about obsolete VMS
compilers. Update reference about building PCSI kit.
2014-02-27 Arnold D. Robbins <arnold@skeeve.com>
diff --git a/doc/gawk.info b/doc/gawk.info
index 11e5a71a..6fb7ee3e 100644
--- a/doc/gawk.info
+++ b/doc/gawk.info
@@ -8559,6 +8559,10 @@ worked around; range patterns do not combine with other patterns:
error--> gawk: cmd. line:1: (/1/,/2/) || /Yes/
error--> gawk: cmd. line:1: ^ syntax error
+ As a minor point of interest, although it is poor style, POSIX
+allows you to put a newline after the comma in a range pattern.
+(d.c.)
+

File: gawk.info, Node: BEGIN/END, Next: BEGINFILE/ENDFILE, Prev: Ranges, Up: Pattern Overview
@@ -9379,12 +9383,12 @@ listed in `ARGV'.
standard. See the Austin Group website
(http://austingroupbugs.net/view.php?id=607).
- The current version of the Brian Kernighan's `awk' (*note Other
-Versions::) also supports `nextfile'. However, it doesn't allow the
-`nextfile' statement inside function bodies (*note User-defined::).
-`gawk' does; a `nextfile' inside a function body reads the next record
-and starts processing it with the first rule in the program, just as
-any other `nextfile' statement.
+ The current version of the Brian Kernighan's `awk', and `mawk'
+(*note Other Versions::) also support `nextfile'. However, they don't
+allow the `nextfile' statement inside function bodies (*note
+User-defined::). `gawk' does; a `nextfile' inside a function body
+reads the next record and starts processing it with the first rule in
+the program, just as any other `nextfile' statement.

File: gawk.info, Node: Exit Statement, Prev: Nextfile Statement, Up: Statements
@@ -29964,11 +29968,11 @@ Index
* # (number sign), #! (executable scripts): Executable Scripts.
(line 6)
* # (number sign), commenting: Comments. (line 6)
-* $ (dollar sign): Regexp Operators. (line 35)
* $ (dollar sign), $ field operator <1>: Precedence. (line 43)
* $ (dollar sign), $ field operator: Fields. (line 19)
* $ (dollar sign), incrementing fields and arrays: Increment Ops.
(line 30)
+* $ (dollar sign), regexp operator: Regexp Operators. (line 35)
* % (percent sign), % operator: Precedence. (line 55)
* % (percent sign), %= operator <1>: Precedence. (line 95)
* % (percent sign), %= operator: Assignment Ops. (line 129)
@@ -29995,12 +29999,12 @@ Index
* * (asterisk), **= operator: Assignment Ops. (line 129)
* * (asterisk), *= operator <1>: Precedence. (line 95)
* * (asterisk), *= operator: Assignment Ops. (line 129)
-* + (plus sign): Regexp Operators. (line 102)
* + (plus sign), + operator: Precedence. (line 52)
* + (plus sign), ++ operator <1>: Precedence. (line 46)
* + (plus sign), ++ operator: Increment Ops. (line 11)
* + (plus sign), += operator <1>: Precedence. (line 95)
* + (plus sign), += operator: Assignment Ops. (line 82)
+* + (plus sign), regexp operator: Regexp Operators. (line 102)
* , (comma), in range patterns: Ranges. (line 6)
* - (hyphen), - operator: Precedence. (line 52)
* - (hyphen), -- operator <1>: Precedence. (line 46)
@@ -30106,17 +30110,18 @@ Index
(line 147)
* / (forward slash), patterns and: Expression Patterns. (line 24)
* /= operator vs. /=.../ regexp constant: Assignment Ops. (line 147)
-* /dev/... special files (gawk): Special FD. (line 46)
-* /dev/fd/N special files: Special FD. (line 46)
+* /dev/... special files: Special FD. (line 46)
+* /dev/fd/N special files (gawk): Special FD. (line 46)
* /inet/... special files (gawk): TCP/IP Networking. (line 6)
* /inet4/... special files (gawk): TCP/IP Networking. (line 6)
* /inet6/... special files (gawk): TCP/IP Networking. (line 6)
-* ; (semicolon): Statements/Lines. (line 91)
* ; (semicolon), AWKPATH variable and: PC Using. (line 10)
* ; (semicolon), separating statements in actions <1>: Statements.
(line 10)
-* ; (semicolon), separating statements in actions: Action Overview.
+* ; (semicolon), separating statements in actions <2>: Action Overview.
(line 19)
+* ; (semicolon), separating statements in actions: Statements/Lines.
+ (line 91)
* < (left angle bracket), < operator <1>: Precedence. (line 65)
* < (left angle bracket), < operator: Comparison Operators.
(line 11)
@@ -30137,10 +30142,10 @@ Index
(line 11)
* > (right angle bracket), >> operator (I/O) <1>: Precedence. (line 65)
* > (right angle bracket), >> operator (I/O): Redirection. (line 50)
-* ? (question mark) regexp operator <1>: GNU Regexp Operators.
- (line 59)
-* ? (question mark) regexp operator: Regexp Operators. (line 111)
* ? (question mark), ?: operator: Precedence. (line 92)
+* ? (question mark), regexp operator <1>: GNU Regexp Operators.
+ (line 59)
+* ? (question mark), regexp operator: Regexp Operators. (line 111)
* [] (square brackets): Regexp Operators. (line 55)
* \ (backslash) <1>: Regexp Operators. (line 18)
* \ (backslash) <2>: Quoting. (line 31)
@@ -30192,20 +30197,21 @@ Index
* \ (backslash), in escape sequences, POSIX and: Escape Sequences.
(line 112)
* \ (backslash), in regexp constants: Computed Regexps. (line 28)
-* ^ (caret): GNU Regexp Operators.
- (line 59)
* ^ (caret), ^ operator: Precedence. (line 49)
* ^ (caret), ^= operator <1>: Precedence. (line 95)
* ^ (caret), ^= operator: Assignment Ops. (line 129)
* ^ (caret), in bracket expressions: Bracket Expressions. (line 17)
-* ^ (caret), regexp operator: Regexp Operators. (line 22)
-* ^, in FS: Regexp Field Splitting.
+* ^ (caret), in FS: Regexp Field Splitting.
+ (line 59)
+* ^ (caret), regexp operator <1>: GNU Regexp Operators.
(line 59)
+* ^ (caret), regexp operator: Regexp Operators. (line 22)
* _ (underscore), C macro: Explaining gettext. (line 70)
* _ (underscore), in names of private variables: Library Names.
(line 29)
* _ (underscore), translatable string: Programmer i18n. (line 69)
* _gr_init() user-defined function: Group Functions. (line 82)
+* _ord_init() user-defined function: Ordinal Functions. (line 16)
* _pw_init() user-defined function: Passwd Functions. (line 105)
* accessing fields: Fields. (line 6)
* account information <1>: Group Functions. (line 6)
@@ -30219,8 +30225,6 @@ Index
* adding, fields: Changing Fields. (line 53)
* advanced features, fixed-width data: Constant Size. (line 10)
* advanced features, gawk: Advanced Features. (line 6)
-* advanced features, network connections, See Also networks, connections: Advanced Features.
- (line 6)
* advanced features, network programming: TCP/IP Networking. (line 6)
* advanced features, nondecimal input data: Nondecimal Data. (line 6)
* advanced features, processes, communicating with: Two-way I/O.
@@ -30242,6 +30246,7 @@ Index
* ampersand (&), gsub()/gensub()/sub() functions and: Gory Details.
(line 6)
* anagram.awk program: Anagram Program. (line 22)
+* anagrams, finding: Anagram Program. (line 6)
* AND bitwise operation: Bitwise Functions. (line 6)
* and Boolean-logic operator: Boolean Ops. (line 6)
* and() function (gawk): Bitwise Functions. (line 39)
@@ -30440,8 +30445,8 @@ Index
* backslash (\), in regexp constants: Computed Regexps. (line 28)
* backtrace debugger command: Execution Stack. (line 13)
* BBS-list file: Sample Data Files. (line 6)
-* Beebe, Nelson <1>: Other Versions. (line 78)
-* Beebe, Nelson: Acknowledgments. (line 60)
+* Beebe, Nelson H.F. <1>: Other Versions. (line 78)
+* Beebe, Nelson H.F.: Acknowledgments. (line 60)
* BEGIN pattern <1>: Profiling. (line 62)
* BEGIN pattern <2>: BEGIN/END. (line 6)
* BEGIN pattern <3>: Field Separators. (line 45)
@@ -30467,7 +30472,9 @@ Index
* BEGINFILE pattern, Boolean patterns and: Expression Patterns.
(line 73)
* beginfile() user-defined function: Filetrans Function. (line 62)
+* Bentley, Jon: Glossary. (line 151)
* Benzinger, Michael: Contributors. (line 97)
+* Berry, Karl <1>: Ranges and Locales. (line 74)
* Berry, Karl: Acknowledgments. (line 33)
* binary input/output: User-modified. (line 10)
* bindtextdomain() function (C library): Explaining gettext. (line 49)
@@ -30509,9 +30516,28 @@ Index
* Brennan, Michael <1>: Other Versions. (line 6)
* Brennan, Michael <2>: Two-way I/O. (line 6)
* Brennan, Michael <3>: Simple Sed. (line 25)
-* Brennan, Michael: Delete. (line 56)
-* Brian Kernighan's awk: Other Versions. (line 13)
+* Brennan, Michael <4>: Delete. (line 56)
+* Brennan, Michael: Foreword. (line 83)
+* Brian Kernighan's awk <1>: I/O Functions. (line 40)
+* Brian Kernighan's awk <2>: Gory Details. (line 15)
+* Brian Kernighan's awk <3>: String Functions. (line 489)
+* Brian Kernighan's awk <4>: Delete. (line 48)
+* Brian Kernighan's awk <5>: Nextfile Statement. (line 47)
+* Brian Kernighan's awk <6>: Continue Statement. (line 43)
+* Brian Kernighan's awk <7>: Break Statement. (line 51)
+* Brian Kernighan's awk <8>: I/O And BEGIN/END. (line 16)
+* Brian Kernighan's awk <9>: Concatenation. (line 36)
+* Brian Kernighan's awk <10>: Getline/Pipe. (line 62)
+* Brian Kernighan's awk <11>: Regexp Field Splitting.
+ (line 67)
+* Brian Kernighan's awk <12>: GNU Regexp Operators.
+ (line 83)
+* Brian Kernighan's awk <13>: Escape Sequences. (line 116)
+* Brian Kernighan's awk <14>: When. (line 21)
+* Brian Kernighan's awk: Preface. (line 15)
* Brian Kernighan's awk, extensions: BTL. (line 6)
+* Brian Kernighan's awk, source code: Other Versions. (line 13)
+* Brini, Davide: Signature Program. (line 6)
* Broder, Alan J.: Contributors. (line 88)
* Brown, Martin: Contributors. (line 82)
* BSD-based operating systems: Glossary. (line 624)
@@ -30538,12 +30564,12 @@ Index
(line 47)
* call by value: Pass By Value/Reference.
(line 18)
-* caret (^): GNU Regexp Operators.
- (line 59)
* caret (^), ^ operator: Precedence. (line 49)
* caret (^), ^= operator <1>: Precedence. (line 95)
* caret (^), ^= operator: Assignment Ops. (line 129)
* caret (^), in bracket expressions: Bracket Expressions. (line 17)
+* caret (^), regexp operator <1>: GNU Regexp Operators.
+ (line 59)
* caret (^), regexp operator: Regexp Operators. (line 22)
* case keyword: Switch Statement. (line 6)
* case sensitivity, array indices and: Array Intro. (line 91)
@@ -30554,6 +30580,8 @@ Index
* case sensitivity, regexps and: Case-sensitivity. (line 6)
* case sensitivity, string comparisons and: User-modified. (line 82)
* CGI, awk scripts for: Options. (line 125)
+* character classes, See bracket expressions: Regexp Operators.
+ (line 55)
* character lists, See bracket expressions: Regexp Operators. (line 55)
* character sets (machine character encodings) <1>: Glossary. (line 141)
* character sets (machine character encodings): Ordinal Functions.
@@ -30894,6 +30922,8 @@ Index
(line 23)
* differences in awk and gawk, close() function: Close Files And Pipes.
(line 81)
+* differences in awk and gawk, command line directories: Command line directories.
+ (line 6)
* differences in awk and gawk, ERRNO variable: Auto-set. (line 73)
* differences in awk and gawk, error messages: Special FD. (line 16)
* differences in awk and gawk, FIELDWIDTHS variable: User-modified.
@@ -30936,8 +30966,6 @@ Index
(line 346)
* differences in awk and gawk, strings: Scalar Constants. (line 20)
* differences in awk and gawk, strings, storing: Records. (line 191)
-* differences in awk and gawk, strtonum() function (gawk): String Functions.
- (line 401)
* differences in awk and gawk, SYMTAB variable: Auto-set. (line 274)
* differences in awk and gawk, TEXTDOMAIN variable: User-modified.
(line 162)
@@ -30957,11 +30985,11 @@ Index
* documentation, of awk programs: Library Names. (line 6)
* documentation, online: Manual History. (line 11)
* documents, searching: Dupword Program. (line 6)
-* dollar sign ($): Regexp Operators. (line 35)
* dollar sign ($), $ field operator <1>: Precedence. (line 43)
* dollar sign ($), $ field operator: Fields. (line 19)
* dollar sign ($), incrementing fields and arrays: Increment Ops.
(line 30)
+* dollar sign ($), regexp operator: Regexp Operators. (line 35)
* double precision floating-point: General Arithmetic. (line 21)
* double quote (") <1>: Quoting. (line 37)
* double quote ("): Read Terminal. (line 25)
@@ -31078,6 +31106,7 @@ Index
* extensions, common, \x escape sequence: Escape Sequences. (line 61)
* extensions, common, BINMODE variable: PC Using. (line 33)
* extensions, common, delete to delete entire arrays: Delete. (line 39)
+* extensions, common, fflush() function: I/O Functions. (line 40)
* extensions, common, func keyword: Definition Syntax. (line 83)
* extensions, common, length() applied to an array: String Functions.
(line 193)
@@ -31199,10 +31228,10 @@ Index
* fixed-width data: Constant Size. (line 10)
* flag variables <1>: Tee Program. (line 20)
* flag variables: Boolean Ops. (line 67)
-* floating-point numbers, arbitrary precision: Arbitrary Precision Arithmetic.
- (line 6)
* floating-point, numbers <1>: Unexpected Results. (line 6)
* floating-point, numbers: General Arithmetic. (line 6)
+* floating-point, numbers, arbitrary precision: Arbitrary Precision Arithmetic.
+ (line 6)
* floating-point, VAX/VMS: VMS Running. (line 51)
* fnmatch() extension function: Extension Sample Fnmatch.
(line 12)
@@ -31605,14 +31634,16 @@ Index
* Kahrs, Ju"rgen: Acknowledgments. (line 60)
* Kasal, Stepan: Acknowledgments. (line 60)
* Kenobi, Obi-Wan: Undocumented. (line 6)
-* Kernighan, Brian <1>: Basic Data Typing. (line 55)
-* Kernighan, Brian <2>: Other Versions. (line 13)
-* Kernighan, Brian <3>: Contributors. (line 11)
-* Kernighan, Brian <4>: BTL. (line 6)
-* Kernighan, Brian <5>: Library Functions. (line 12)
-* Kernighan, Brian <6>: Concatenation. (line 6)
-* Kernighan, Brian <7>: Acknowledgments. (line 72)
-* Kernighan, Brian <8>: Conventions. (line 34)
+* Kernighan, Brian <1>: Glossary. (line 151)
+* Kernighan, Brian <2>: Basic Data Typing. (line 55)
+* Kernighan, Brian <3>: Other Versions. (line 13)
+* Kernighan, Brian <4>: Contributors. (line 11)
+* Kernighan, Brian <5>: BTL. (line 6)
+* Kernighan, Brian <6>: Library Functions. (line 12)
+* Kernighan, Brian <7>: Concatenation. (line 6)
+* Kernighan, Brian <8>: Getline/Pipe. (line 6)
+* Kernighan, Brian <9>: Acknowledgments. (line 72)
+* Kernighan, Brian <10>: Conventions. (line 34)
* Kernighan, Brian: History. (line 17)
* kill command, dynamic profiling: Profiling. (line 188)
* Knights, jedi: Undocumented. (line 6)
@@ -31733,7 +31764,11 @@ Index
(line 9)
* matching, leftmost longest: Multiple Line. (line 26)
* matching, null strings: Gory Details. (line 164)
-* mawk utility: Other Versions. (line 44)
+* mawk utility <1>: Other Versions. (line 44)
+* mawk utility <2>: Nextfile Statement. (line 47)
+* mawk utility <3>: Concatenation. (line 36)
+* mawk utility <4>: Getline/Pipe. (line 62)
+* mawk utility: Escape Sequences. (line 124)
* McPhee, Patrick: Contributors. (line 100)
* message object files: Explaining gettext. (line 41)
* message object files, converting from portable object files: I18N Example.
@@ -31952,12 +31987,12 @@ Index
* Pitts, Dave <1>: Bugs. (line 73)
* Pitts, Dave: Acknowledgments. (line 60)
* Plauger, P.J.: Library Functions. (line 12)
-* plus sign (+): Regexp Operators. (line 102)
* plus sign (+), + operator: Precedence. (line 52)
* plus sign (+), ++ operator <1>: Precedence. (line 46)
* plus sign (+), ++ operator: Increment Ops. (line 11)
* plus sign (+), += operator <1>: Precedence. (line 95)
* plus sign (+), += operator: Assignment Ops. (line 82)
+* plus sign (+), regexp operator: Regexp Operators. (line 102)
* pointers to functions: Indirect Calls. (line 6)
* portability: Escape Sequences. (line 94)
* portability, #! (executable scripts): Executable Scripts. (line 33)
@@ -32117,10 +32152,10 @@ Index
(line 99)
* QSE Awk: Other Versions. (line 130)
* Quanstrom, Erik: Alarm Program. (line 8)
-* question mark (?) regexp operator <1>: GNU Regexp Operators.
- (line 59)
-* question mark (?) regexp operator: Regexp Operators. (line 111)
* question mark (?), ?: operator: Precedence. (line 92)
+* question mark (?), regexp operator <1>: GNU Regexp Operators.
+ (line 59)
+* question mark (?), regexp operator: Regexp Operators. (line 111)
* QuikTrim Awk: Other Versions. (line 134)
* quit debugger command: Miscellaneous Debugger Commands.
(line 99)
@@ -32143,6 +32178,7 @@ Index
* random numbers, seed of: Numeric Functions. (line 64)
* range expressions (regexps): Bracket Expressions. (line 6)
* range patterns: Ranges. (line 6)
+* range patterns, line continuation and: Ranges. (line 65)
* Rankin, Pat <1>: Bugs. (line 72)
* Rankin, Pat <2>: Contributors. (line 37)
* Rankin, Pat <3>: Assignment Ops. (line 100)
@@ -32307,12 +32343,13 @@ Index
* sed utility <2>: Simple Sed. (line 6)
* sed utility: Field Splitting Summary.
(line 46)
-* semicolon (;): Statements/Lines. (line 91)
* semicolon (;), AWKPATH variable and: PC Using. (line 10)
* semicolon (;), separating statements in actions <1>: Statements.
(line 10)
-* semicolon (;), separating statements in actions: Action Overview.
+* semicolon (;), separating statements in actions <2>: Action Overview.
(line 19)
+* semicolon (;), separating statements in actions: Statements/Lines.
+ (line 91)
* separators, field: User-modified. (line 56)
* separators, field, FIELDWIDTHS variable and: User-modified. (line 35)
* separators, field, FPAT variable and: User-modified. (line 45)
@@ -32385,6 +32422,7 @@ Index
* signals, INT/SIGINT (MS-Windows): Profiling. (line 214)
* signals, QUIT/SIGQUIT (MS-Windows): Profiling. (line 214)
* signals, USR1/SIGUSR1: Profiling. (line 188)
+* signature program: Signature Program. (line 6)
* SIGQUIT signal (MS-Windows): Profiling. (line 214)
* SIGUSR1 signal: Profiling. (line 188)
* silent debugger command: Debugger Execution Control.
@@ -32605,7 +32643,9 @@ Index
* undisplay debugger command: Viewing And Changing Data.
(line 80)
* undocumented features: Undocumented. (line 6)
-* Unicode: Glossary. (line 141)
+* Unicode <1>: Glossary. (line 141)
+* Unicode <2>: Ranges and Locales. (line 61)
+* Unicode: Ordinal Functions. (line 45)
* uninitialized variables, as array subscripts: Uninitialized Subscripts.
(line 6)
* uniq utility: Uniq Program. (line 6)
@@ -32916,362 +32956,362 @@ Node: Pattern Overview358484
Node: Regexp Patterns360153
Node: Expression Patterns360696
Node: Ranges364381
-Node: BEGIN/END367347
-Node: Using BEGIN/END368109
-Ref: Using BEGIN/END-Footnote-1370840
-Node: I/O And BEGIN/END370946
-Node: BEGINFILE/ENDFILE373228
-Node: Empty376142
-Node: Using Shell Variables376458
-Node: Action Overview378743
-Node: Statements381100
-Node: If Statement382954
-Node: While Statement384453
-Node: Do Statement386497
-Node: For Statement387653
-Node: Switch Statement390805
-Node: Break Statement392959
-Node: Continue Statement394949
-Node: Next Statement396742
-Node: Nextfile Statement399132
-Node: Exit Statement401775
-Node: Built-in Variables404191
-Node: User-modified405286
-Ref: User-modified-Footnote-1413644
-Node: Auto-set413706
-Ref: Auto-set-Footnote-1426784
-Ref: Auto-set-Footnote-2426989
-Node: ARGC and ARGV427045
-Node: Arrays430896
-Node: Array Basics432401
-Node: Array Intro433227
-Node: Reference to Elements437544
-Node: Assigning Elements439814
-Node: Array Example440305
-Node: Scanning an Array442037
-Node: Controlling Scanning444351
-Ref: Controlling Scanning-Footnote-1449438
-Node: Delete449754
-Ref: Delete-Footnote-1452519
-Node: Numeric Array Subscripts452576
-Node: Uninitialized Subscripts454759
-Node: Multidimensional456386
-Node: Multiscanning459479
-Node: Arrays of Arrays461068
-Node: Functions465708
-Node: Built-in466527
-Node: Calling Built-in467605
-Node: Numeric Functions469593
-Ref: Numeric Functions-Footnote-1473425
-Ref: Numeric Functions-Footnote-2473782
-Ref: Numeric Functions-Footnote-3473830
-Node: String Functions474099
-Ref: String Functions-Footnote-1497019
-Ref: String Functions-Footnote-2497148
-Ref: String Functions-Footnote-3497396
-Node: Gory Details497483
-Ref: table-sub-escapes499162
-Ref: table-sub-posix-92500516
-Ref: table-sub-proposed501867
-Ref: table-posix-sub503221
-Ref: table-gensub-escapes504766
-Ref: Gory Details-Footnote-1505942
-Ref: Gory Details-Footnote-2505993
-Node: I/O Functions506144
-Ref: I/O Functions-Footnote-1513134
-Node: Time Functions513281
-Ref: Time Functions-Footnote-1524214
-Ref: Time Functions-Footnote-2524282
-Ref: Time Functions-Footnote-3524440
-Ref: Time Functions-Footnote-4524551
-Ref: Time Functions-Footnote-5524663
-Ref: Time Functions-Footnote-6524890
-Node: Bitwise Functions525156
-Ref: table-bitwise-ops525718
-Ref: Bitwise Functions-Footnote-1529939
-Node: Type Functions530123
-Node: I18N Functions531274
-Node: User-defined532901
-Node: Definition Syntax533705
-Ref: Definition Syntax-Footnote-1538619
-Node: Function Example538688
-Ref: Function Example-Footnote-1541337
-Node: Function Caveats541359
-Node: Calling A Function541877
-Node: Variable Scope542832
-Node: Pass By Value/Reference545795
-Node: Return Statement549303
-Node: Dynamic Typing552284
-Node: Indirect Calls553215
-Node: Library Functions562902
-Ref: Library Functions-Footnote-1566415
-Ref: Library Functions-Footnote-2566558
-Node: Library Names566729
-Ref: Library Names-Footnote-1570202
-Ref: Library Names-Footnote-2570422
-Node: General Functions570508
-Node: Strtonum Function571536
-Node: Assert Function574466
-Node: Round Function577792
-Node: Cliff Random Function579333
-Node: Ordinal Functions580349
-Ref: Ordinal Functions-Footnote-1583426
-Ref: Ordinal Functions-Footnote-2583678
-Node: Join Function583889
-Ref: Join Function-Footnote-1585660
-Node: Getlocaltime Function585860
-Node: Readfile Function589601
-Node: Data File Management591440
-Node: Filetrans Function592072
-Node: Rewind Function596141
-Node: File Checking597528
-Node: Empty Files598622
-Node: Ignoring Assigns600852
-Node: Getopt Function602406
-Ref: Getopt Function-Footnote-1613709
-Node: Passwd Functions613912
-Ref: Passwd Functions-Footnote-1622890
-Node: Group Functions622978
-Node: Walking Arrays631062
-Node: Sample Programs633198
-Node: Running Examples633872
-Node: Clones634600
-Node: Cut Program635824
-Node: Egrep Program645675
-Ref: Egrep Program-Footnote-1653448
-Node: Id Program653558
-Node: Split Program657174
-Ref: Split Program-Footnote-1660693
-Node: Tee Program660821
-Node: Uniq Program663624
-Node: Wc Program671053
-Ref: Wc Program-Footnote-1675319
-Ref: Wc Program-Footnote-2675519
-Node: Miscellaneous Programs675611
-Node: Dupword Program676799
-Node: Alarm Program678830
-Node: Translate Program683637
-Ref: Translate Program-Footnote-1688024
-Ref: Translate Program-Footnote-2688272
-Node: Labels Program688406
-Ref: Labels Program-Footnote-1691777
-Node: Word Sorting691861
-Node: History Sorting695745
-Node: Extract Program697584
-Ref: Extract Program-Footnote-1705087
-Node: Simple Sed705215
-Node: Igawk Program708277
-Ref: Igawk Program-Footnote-1723434
-Ref: Igawk Program-Footnote-2723635
-Node: Anagram Program723773
-Node: Signature Program726841
-Node: Advanced Features727941
-Node: Nondecimal Data729827
-Node: Array Sorting731410
-Node: Controlling Array Traversal732107
-Node: Array Sorting Functions740391
-Ref: Array Sorting Functions-Footnote-1744260
-Node: Two-way I/O744454
-Ref: Two-way I/O-Footnote-1749886
-Node: TCP/IP Networking749968
-Node: Profiling752812
-Node: Internationalization760315
-Node: I18N and L10N761740
-Node: Explaining gettext762426
-Ref: Explaining gettext-Footnote-1767494
-Ref: Explaining gettext-Footnote-2767678
-Node: Programmer i18n767843
-Node: Translator i18n772045
-Node: String Extraction772839
-Ref: String Extraction-Footnote-1773800
-Node: Printf Ordering773886
-Ref: Printf Ordering-Footnote-1776668
-Node: I18N Portability776732
-Ref: I18N Portability-Footnote-1779181
-Node: I18N Example779244
-Ref: I18N Example-Footnote-1781882
-Node: Gawk I18N781954
-Node: Debugger782575
-Node: Debugging783546
-Node: Debugging Concepts783979
-Node: Debugging Terms785835
-Node: Awk Debugging788432
-Node: Sample Debugging Session789324
-Node: Debugger Invocation789844
-Node: Finding The Bug791177
-Node: List of Debugger Commands797664
-Node: Breakpoint Control798998
-Node: Debugger Execution Control802662
-Node: Viewing And Changing Data806022
-Node: Execution Stack809378
-Node: Debugger Info810845
-Node: Miscellaneous Debugger Commands814827
-Node: Readline Support820003
-Node: Limitations820834
-Node: Arbitrary Precision Arithmetic823086
-Ref: Arbitrary Precision Arithmetic-Footnote-1824735
-Node: General Arithmetic824883
-Node: Floating Point Issues826603
-Node: String Conversion Precision827484
-Ref: String Conversion Precision-Footnote-1829189
-Node: Unexpected Results829298
-Node: POSIX Floating Point Problems831451
-Ref: POSIX Floating Point Problems-Footnote-1835276
-Node: Integer Programming835314
-Node: Floating-point Programming837053
-Ref: Floating-point Programming-Footnote-1843384
-Ref: Floating-point Programming-Footnote-2843654
-Node: Floating-point Representation843918
-Node: Floating-point Context845083
-Ref: table-ieee-formats845922
-Node: Rounding Mode847306
-Ref: table-rounding-modes847785
-Ref: Rounding Mode-Footnote-1850800
-Node: Gawk and MPFR850979
-Node: Arbitrary Precision Floats852234
-Ref: Arbitrary Precision Floats-Footnote-1854677
-Node: Setting Precision854993
-Ref: table-predefined-precision-strings855679
-Node: Setting Rounding Mode857824
-Ref: table-gawk-rounding-modes858228
-Node: Floating-point Constants859415
-Node: Changing Precision860844
-Ref: Changing Precision-Footnote-1862241
-Node: Exact Arithmetic862415
-Node: Arbitrary Precision Integers865553
-Ref: Arbitrary Precision Integers-Footnote-1868568
-Node: Dynamic Extensions868715
-Node: Extension Intro870173
-Node: Plugin License871438
-Node: Extension Mechanism Outline872123
-Ref: load-extension872540
-Ref: load-new-function874018
-Ref: call-new-function875013
-Node: Extension API Description877028
-Node: Extension API Functions Introduction878241
-Node: General Data Types883107
-Ref: General Data Types-Footnote-1888709
-Node: Requesting Values889008
-Ref: table-value-types-returned889739
-Node: Constructor Functions890693
-Node: Registration Functions893713
-Node: Extension Functions894398
-Node: Exit Callback Functions896624
-Node: Extension Version String897873
-Node: Input Parsers898523
-Node: Output Wrappers908280
-Node: Two-way processors912790
-Node: Printing Messages914998
-Ref: Printing Messages-Footnote-1916075
-Node: Updating `ERRNO'916227
-Node: Accessing Parameters916966
-Node: Symbol Table Access918196
-Node: Symbol table by name918708
-Node: Symbol table by cookie920455
-Ref: Symbol table by cookie-Footnote-1924585
-Node: Cached values924648
-Ref: Cached values-Footnote-1928097
-Node: Array Manipulation928188
-Ref: Array Manipulation-Footnote-1929286
-Node: Array Data Types929325
-Ref: Array Data Types-Footnote-1932028
-Node: Array Functions932120
-Node: Flattening Arrays935886
-Node: Creating Arrays942738
-Node: Extension API Variables947463
-Node: Extension Versioning948099
-Node: Extension API Informational Variables950000
-Node: Extension API Boilerplate951086
-Node: Finding Extensions954890
-Node: Extension Example955450
-Node: Internal File Description956180
-Node: Internal File Ops960271
-Ref: Internal File Ops-Footnote-1971780
-Node: Using Internal File Ops971920
-Ref: Using Internal File Ops-Footnote-1974273
-Node: Extension Samples974539
-Node: Extension Sample File Functions976063
-Node: Extension Sample Fnmatch984548
-Node: Extension Sample Fork986317
-Node: Extension Sample Inplace987530
-Node: Extension Sample Ord989308
-Node: Extension Sample Readdir990144
-Node: Extension Sample Revout991676
-Node: Extension Sample Rev2way992269
-Node: Extension Sample Read write array992959
-Node: Extension Sample Readfile994842
-Node: Extension Sample API Tests995660
-Node: Extension Sample Time996185
-Node: gawkextlib997549
-Node: Language History1000330
-Node: V7/SVR3.11001923
-Node: SVR41004243
-Node: POSIX1005685
-Node: BTL1007071
-Node: POSIX/GNU1007805
-Node: Feature History1013404
-Node: Common Extensions1026380
-Node: Ranges and Locales1027692
-Ref: Ranges and Locales-Footnote-11032309
-Ref: Ranges and Locales-Footnote-21032336
-Ref: Ranges and Locales-Footnote-31032570
-Node: Contributors1032791
-Node: Installation1037936
-Node: Gawk Distribution1038830
-Node: Getting1039314
-Node: Extracting1040140
-Node: Distribution contents1041832
-Node: Unix Installation1047537
-Node: Quick Installation1048154
-Node: Additional Configuration Options1050600
-Node: Configuration Philosophy1052336
-Node: Non-Unix Installation1054690
-Node: PC Installation1055148
-Node: PC Binary Installation1056447
-Node: PC Compiling1058295
-Node: PC Testing1061239
-Node: PC Using1062415
-Node: Cygwin1066583
-Node: MSYS1067392
-Node: VMS Installation1067906
-Node: VMS Compilation1068670
-Ref: VMS Compilation-Footnote-11069922
-Node: VMS Dynamic Extensions1069980
-Node: VMS Installation Details1071353
-Node: VMS Running1073604
-Node: VMS GNV1076438
-Node: VMS Old Gawk1077161
-Node: Bugs1077631
-Node: Other Versions1081549
-Node: Notes1087633
-Node: Compatibility Mode1088433
-Node: Additions1089216
-Node: Accessing The Source1090143
-Node: Adding Code1091583
-Node: New Ports1097628
-Node: Derived Files1101763
-Ref: Derived Files-Footnote-11107084
-Ref: Derived Files-Footnote-21107118
-Ref: Derived Files-Footnote-31107718
-Node: Future Extensions1107816
-Node: Implementation Limitations1108399
-Node: Extension Design1109651
-Node: Old Extension Problems1110805
-Ref: Old Extension Problems-Footnote-11112313
-Node: Extension New Mechanism Goals1112370
-Ref: Extension New Mechanism Goals-Footnote-11115735
-Node: Extension Other Design Decisions1115921
-Node: Extension Future Growth1118027
-Node: Old Extension Mechanism1118863
-Node: Basic Concepts1120603
-Node: Basic High Level1121284
-Ref: figure-general-flow1121555
-Ref: figure-process-flow1122154
-Ref: Basic High Level-Footnote-11125383
-Node: Basic Data Typing1125568
-Node: Glossary1128923
-Node: Copying1154385
-Node: GNU Free Documentation License1191942
-Node: Index1217079
+Node: BEGIN/END367485
+Node: Using BEGIN/END368247
+Ref: Using BEGIN/END-Footnote-1370978
+Node: I/O And BEGIN/END371084
+Node: BEGINFILE/ENDFILE373366
+Node: Empty376280
+Node: Using Shell Variables376596
+Node: Action Overview378881
+Node: Statements381238
+Node: If Statement383092
+Node: While Statement384591
+Node: Do Statement386635
+Node: For Statement387791
+Node: Switch Statement390943
+Node: Break Statement393097
+Node: Continue Statement395087
+Node: Next Statement396880
+Node: Nextfile Statement399270
+Node: Exit Statement401925
+Node: Built-in Variables404341
+Node: User-modified405436
+Ref: User-modified-Footnote-1413794
+Node: Auto-set413856
+Ref: Auto-set-Footnote-1426934
+Ref: Auto-set-Footnote-2427139
+Node: ARGC and ARGV427195
+Node: Arrays431046
+Node: Array Basics432551
+Node: Array Intro433377
+Node: Reference to Elements437694
+Node: Assigning Elements439964
+Node: Array Example440455
+Node: Scanning an Array442187
+Node: Controlling Scanning444501
+Ref: Controlling Scanning-Footnote-1449588
+Node: Delete449904
+Ref: Delete-Footnote-1452669
+Node: Numeric Array Subscripts452726
+Node: Uninitialized Subscripts454909
+Node: Multidimensional456536
+Node: Multiscanning459629
+Node: Arrays of Arrays461218
+Node: Functions465858
+Node: Built-in466677
+Node: Calling Built-in467755
+Node: Numeric Functions469743
+Ref: Numeric Functions-Footnote-1473575
+Ref: Numeric Functions-Footnote-2473932
+Ref: Numeric Functions-Footnote-3473980
+Node: String Functions474249
+Ref: String Functions-Footnote-1497169
+Ref: String Functions-Footnote-2497298
+Ref: String Functions-Footnote-3497546
+Node: Gory Details497633
+Ref: table-sub-escapes499312
+Ref: table-sub-posix-92500666
+Ref: table-sub-proposed502017
+Ref: table-posix-sub503371
+Ref: table-gensub-escapes504916
+Ref: Gory Details-Footnote-1506092
+Ref: Gory Details-Footnote-2506143
+Node: I/O Functions506294
+Ref: I/O Functions-Footnote-1513284
+Node: Time Functions513431
+Ref: Time Functions-Footnote-1524364
+Ref: Time Functions-Footnote-2524432
+Ref: Time Functions-Footnote-3524590
+Ref: Time Functions-Footnote-4524701
+Ref: Time Functions-Footnote-5524813
+Ref: Time Functions-Footnote-6525040
+Node: Bitwise Functions525306
+Ref: table-bitwise-ops525868
+Ref: Bitwise Functions-Footnote-1530089
+Node: Type Functions530273
+Node: I18N Functions531424
+Node: User-defined533051
+Node: Definition Syntax533855
+Ref: Definition Syntax-Footnote-1538769
+Node: Function Example538838
+Ref: Function Example-Footnote-1541487
+Node: Function Caveats541509
+Node: Calling A Function542027
+Node: Variable Scope542982
+Node: Pass By Value/Reference545945
+Node: Return Statement549453
+Node: Dynamic Typing552434
+Node: Indirect Calls553365
+Node: Library Functions563052
+Ref: Library Functions-Footnote-1566565
+Ref: Library Functions-Footnote-2566708
+Node: Library Names566879
+Ref: Library Names-Footnote-1570352
+Ref: Library Names-Footnote-2570572
+Node: General Functions570658
+Node: Strtonum Function571686
+Node: Assert Function574616
+Node: Round Function577942
+Node: Cliff Random Function579483
+Node: Ordinal Functions580499
+Ref: Ordinal Functions-Footnote-1583576
+Ref: Ordinal Functions-Footnote-2583828
+Node: Join Function584039
+Ref: Join Function-Footnote-1585810
+Node: Getlocaltime Function586010
+Node: Readfile Function589751
+Node: Data File Management591590
+Node: Filetrans Function592222
+Node: Rewind Function596291
+Node: File Checking597678
+Node: Empty Files598772
+Node: Ignoring Assigns601002
+Node: Getopt Function602556
+Ref: Getopt Function-Footnote-1613859
+Node: Passwd Functions614062
+Ref: Passwd Functions-Footnote-1623040
+Node: Group Functions623128
+Node: Walking Arrays631212
+Node: Sample Programs633348
+Node: Running Examples634022
+Node: Clones634750
+Node: Cut Program635974
+Node: Egrep Program645825
+Ref: Egrep Program-Footnote-1653598
+Node: Id Program653708
+Node: Split Program657324
+Ref: Split Program-Footnote-1660843
+Node: Tee Program660971
+Node: Uniq Program663774
+Node: Wc Program671203
+Ref: Wc Program-Footnote-1675469
+Ref: Wc Program-Footnote-2675669
+Node: Miscellaneous Programs675761
+Node: Dupword Program676949
+Node: Alarm Program678980
+Node: Translate Program683787
+Ref: Translate Program-Footnote-1688174
+Ref: Translate Program-Footnote-2688422
+Node: Labels Program688556
+Ref: Labels Program-Footnote-1691927
+Node: Word Sorting692011
+Node: History Sorting695895
+Node: Extract Program697734
+Ref: Extract Program-Footnote-1705237
+Node: Simple Sed705365
+Node: Igawk Program708427
+Ref: Igawk Program-Footnote-1723584
+Ref: Igawk Program-Footnote-2723785
+Node: Anagram Program723923
+Node: Signature Program726991
+Node: Advanced Features728091
+Node: Nondecimal Data729977
+Node: Array Sorting731560
+Node: Controlling Array Traversal732257
+Node: Array Sorting Functions740541
+Ref: Array Sorting Functions-Footnote-1744410
+Node: Two-way I/O744604
+Ref: Two-way I/O-Footnote-1750036
+Node: TCP/IP Networking750118
+Node: Profiling752962
+Node: Internationalization760465
+Node: I18N and L10N761890
+Node: Explaining gettext762576
+Ref: Explaining gettext-Footnote-1767644
+Ref: Explaining gettext-Footnote-2767828
+Node: Programmer i18n767993
+Node: Translator i18n772195
+Node: String Extraction772989
+Ref: String Extraction-Footnote-1773950
+Node: Printf Ordering774036
+Ref: Printf Ordering-Footnote-1776818
+Node: I18N Portability776882
+Ref: I18N Portability-Footnote-1779331
+Node: I18N Example779394
+Ref: I18N Example-Footnote-1782032
+Node: Gawk I18N782104
+Node: Debugger782725
+Node: Debugging783696
+Node: Debugging Concepts784129
+Node: Debugging Terms785985
+Node: Awk Debugging788582
+Node: Sample Debugging Session789474
+Node: Debugger Invocation789994
+Node: Finding The Bug791327
+Node: List of Debugger Commands797814
+Node: Breakpoint Control799148
+Node: Debugger Execution Control802812
+Node: Viewing And Changing Data806172
+Node: Execution Stack809528
+Node: Debugger Info810995
+Node: Miscellaneous Debugger Commands814977
+Node: Readline Support820153
+Node: Limitations820984
+Node: Arbitrary Precision Arithmetic823236
+Ref: Arbitrary Precision Arithmetic-Footnote-1824885
+Node: General Arithmetic825033
+Node: Floating Point Issues826753
+Node: String Conversion Precision827634
+Ref: String Conversion Precision-Footnote-1829339
+Node: Unexpected Results829448
+Node: POSIX Floating Point Problems831601
+Ref: POSIX Floating Point Problems-Footnote-1835426
+Node: Integer Programming835464
+Node: Floating-point Programming837203
+Ref: Floating-point Programming-Footnote-1843534
+Ref: Floating-point Programming-Footnote-2843804
+Node: Floating-point Representation844068
+Node: Floating-point Context845233
+Ref: table-ieee-formats846072
+Node: Rounding Mode847456
+Ref: table-rounding-modes847935
+Ref: Rounding Mode-Footnote-1850950
+Node: Gawk and MPFR851129
+Node: Arbitrary Precision Floats852384
+Ref: Arbitrary Precision Floats-Footnote-1854827
+Node: Setting Precision855143
+Ref: table-predefined-precision-strings855829
+Node: Setting Rounding Mode857974
+Ref: table-gawk-rounding-modes858378
+Node: Floating-point Constants859565
+Node: Changing Precision860994
+Ref: Changing Precision-Footnote-1862391
+Node: Exact Arithmetic862565
+Node: Arbitrary Precision Integers865703
+Ref: Arbitrary Precision Integers-Footnote-1868718
+Node: Dynamic Extensions868865
+Node: Extension Intro870323
+Node: Plugin License871588
+Node: Extension Mechanism Outline872273
+Ref: load-extension872690
+Ref: load-new-function874168
+Ref: call-new-function875163
+Node: Extension API Description877178
+Node: Extension API Functions Introduction878391
+Node: General Data Types883257
+Ref: General Data Types-Footnote-1888859
+Node: Requesting Values889158
+Ref: table-value-types-returned889889
+Node: Constructor Functions890843
+Node: Registration Functions893863
+Node: Extension Functions894548
+Node: Exit Callback Functions896774
+Node: Extension Version String898023
+Node: Input Parsers898673
+Node: Output Wrappers908430
+Node: Two-way processors912940
+Node: Printing Messages915148
+Ref: Printing Messages-Footnote-1916225
+Node: Updating `ERRNO'916377
+Node: Accessing Parameters917116
+Node: Symbol Table Access918346
+Node: Symbol table by name918858
+Node: Symbol table by cookie920605
+Ref: Symbol table by cookie-Footnote-1924735
+Node: Cached values924798
+Ref: Cached values-Footnote-1928247
+Node: Array Manipulation928338
+Ref: Array Manipulation-Footnote-1929436
+Node: Array Data Types929475
+Ref: Array Data Types-Footnote-1932178
+Node: Array Functions932270
+Node: Flattening Arrays936036
+Node: Creating Arrays942888
+Node: Extension API Variables947613
+Node: Extension Versioning948249
+Node: Extension API Informational Variables950150
+Node: Extension API Boilerplate951236
+Node: Finding Extensions955040
+Node: Extension Example955600
+Node: Internal File Description956330
+Node: Internal File Ops960421
+Ref: Internal File Ops-Footnote-1971930
+Node: Using Internal File Ops972070
+Ref: Using Internal File Ops-Footnote-1974423
+Node: Extension Samples974689
+Node: Extension Sample File Functions976213
+Node: Extension Sample Fnmatch984698
+Node: Extension Sample Fork986467
+Node: Extension Sample Inplace987680
+Node: Extension Sample Ord989458
+Node: Extension Sample Readdir990294
+Node: Extension Sample Revout991826
+Node: Extension Sample Rev2way992419
+Node: Extension Sample Read write array993109
+Node: Extension Sample Readfile994992
+Node: Extension Sample API Tests995810
+Node: Extension Sample Time996335
+Node: gawkextlib997699
+Node: Language History1000480
+Node: V7/SVR3.11002073
+Node: SVR41004393
+Node: POSIX1005835
+Node: BTL1007221
+Node: POSIX/GNU1007955
+Node: Feature History1013554
+Node: Common Extensions1026530
+Node: Ranges and Locales1027842
+Ref: Ranges and Locales-Footnote-11032459
+Ref: Ranges and Locales-Footnote-21032486
+Ref: Ranges and Locales-Footnote-31032720
+Node: Contributors1032941
+Node: Installation1038086
+Node: Gawk Distribution1038980
+Node: Getting1039464
+Node: Extracting1040290
+Node: Distribution contents1041982
+Node: Unix Installation1047687
+Node: Quick Installation1048304
+Node: Additional Configuration Options1050750
+Node: Configuration Philosophy1052486
+Node: Non-Unix Installation1054840
+Node: PC Installation1055298
+Node: PC Binary Installation1056597
+Node: PC Compiling1058445
+Node: PC Testing1061389
+Node: PC Using1062565
+Node: Cygwin1066733
+Node: MSYS1067542
+Node: VMS Installation1068056
+Node: VMS Compilation1068820
+Ref: VMS Compilation-Footnote-11070072
+Node: VMS Dynamic Extensions1070130
+Node: VMS Installation Details1071503
+Node: VMS Running1073754
+Node: VMS GNV1076588
+Node: VMS Old Gawk1077311
+Node: Bugs1077781
+Node: Other Versions1081699
+Node: Notes1087783
+Node: Compatibility Mode1088583
+Node: Additions1089366
+Node: Accessing The Source1090293
+Node: Adding Code1091733
+Node: New Ports1097778
+Node: Derived Files1101913
+Ref: Derived Files-Footnote-11107234
+Ref: Derived Files-Footnote-21107268
+Ref: Derived Files-Footnote-31107868
+Node: Future Extensions1107966
+Node: Implementation Limitations1108549
+Node: Extension Design1109801
+Node: Old Extension Problems1110955
+Ref: Old Extension Problems-Footnote-11112463
+Node: Extension New Mechanism Goals1112520
+Ref: Extension New Mechanism Goals-Footnote-11115885
+Node: Extension Other Design Decisions1116071
+Node: Extension Future Growth1118177
+Node: Old Extension Mechanism1119013
+Node: Basic Concepts1120753
+Node: Basic High Level1121434
+Ref: figure-general-flow1121705
+Ref: figure-process-flow1122304
+Ref: Basic High Level-Footnote-11125533
+Node: Basic Data Typing1125718
+Node: Glossary1129073
+Node: Copying1154535
+Node: GNU Free Documentation License1192092
+Node: Index1217229

End Tag Table
diff --git a/doc/gawk.texi b/doc/gawk.texi
index eefdf4e9..713f5a46 100644
--- a/doc/gawk.texi
+++ b/doc/gawk.texi
@@ -1000,6 +1000,7 @@ Arnold has distilled over a decade of experience writing and
using AWK programs, and developing @command{gawk}, into this book. If you use
AWK or want to learn how, then read this book.
+@cindex Brennan, Michael
@display
Michael Brennan
Author of @command{mawk}
@@ -1024,6 +1025,7 @@ Such jobs are often easier with @command{awk}.
The @command{awk} utility interprets a special-purpose programming language
that makes it easy to handle simple data-reformatting jobs.
+@cindex Brian Kernighan's @command{awk}
The GNU implementation of @command{awk} is called @command{gawk}; if you
invoke it with the proper options or environment variables
(@pxref{Options}), it is fully
@@ -1774,7 +1776,7 @@ significant editorial help for this @value{DOCUMENT} for the
3.1 release of @command{gawk}.
@end quotation
-@cindex Beebe, Nelson
+@cindex Beebe, Nelson H.F.@:
@cindex Buening, Andreas
@cindex Collado, Manuel
@cindex Colombo, Antonio
@@ -3033,8 +3035,8 @@ noticed because it is ``hidden'' inside the comment. Thus, the
@code{BEGIN} is noted as a syntax error.
@cindex statements, multiple
-@cindex @code{;} (semicolon)
-@cindex semicolon (@code{;})
+@cindex @code{;} (semicolon), separating statements in actions
+@cindex semicolon (@code{;}), separating statements in actions
When @command{awk} statements within one rule are short, you might want to put
more than one of them on a line. This is accomplished by separating the statements
with a semicolon (@samp{;}).
@@ -3094,6 +3096,7 @@ used once, and thrown away. Because @command{awk} programs are interpreted, you
can avoid the (usually lengthy) compilation part of the typical
edit-compile-test-debug cycle of software development.
+@cindex Brian Kernighan's @command{awk}
Complex programs have been written in @command{awk}, including a complete
retargetable assembler for eight-bit microprocessors (@pxref{Glossary}, for
more information), and a microcode assembler for a special-purpose Prolog
@@ -4585,6 +4588,7 @@ leaves what happens as undefined. There are two choices:
@c @cindex automatic warnings
@c @cindex warnings, automatic
+@cindex Brian Kernighan's @command{awk}
@table @asis
@item Strip the backslash out
This is what Brian Kernighan's @command{awk} and @command{gawk} both do.
@@ -4598,6 +4602,7 @@ two backslashes in the string: @samp{FS = @w{"[ \t]+\\|[ \t]+"}}.)
@cindex @command{gawk}, escape sequences
@cindex Unix @command{awk}, backslashes in escape sequences
+@cindex @command{mawk} utility
@item Leave the backslash alone
Some other @command{awk} implementations do this.
In such implementations, typing @code{"a\qc"} is the same as typing
@@ -4626,6 +4631,7 @@ leaves what happens as undefined. There are two choices:
@c @cindex automatic warnings
@c @cindex warnings, automatic
+@cindex Brian Kernighan's @command{awk}
@table @asis
@item Strip the backslash out
This is what Brian Kernighan's @command{awk} and @command{gawk} both do.
@@ -4639,6 +4645,7 @@ two backslashes in the string: @samp{FS = @w{"[ \t]+\\|[ \t]+"}}.)
@cindex @command{gawk}, escape sequences
@cindex Unix @command{awk}, backslashes in escape sequences
+@cindex @command{mawk} utility
@item Leave the backslash alone
Some other @command{awk} implementations do this.
In such implementations, typing @code{"a\qc"} is the same as typing
@@ -4749,8 +4756,8 @@ The condition is not true in the following example:
if ("line1\nLINE 2" ~ /^L/) @dots{}
@end example
-@cindex @code{$} (dollar sign)
-@cindex dollar sign (@code{$})
+@cindex @code{$} (dollar sign), regexp operator
+@cindex dollar sign (@code{$}), regexp operator
@item $
This is similar to @samp{^}, but it matches only at the end of a string.
For example, @samp{p$}
@@ -4784,6 +4791,7 @@ may not be able to match the @sc{nul} character.
@cindex bracket expressions
@cindex character sets, See Also bracket expressions
@cindex character lists, See bracket expressions
+@cindex character classes, See bracket expressions
@item [@dots{}]
This is called a @dfn{bracket expression}.@footnote{In other literature,
you may see a bracket expression referred to as either a
@@ -4845,8 +4853,8 @@ prints every record in @file{sample} containing a string of the form
Notice the escaping of the parentheses by preceding them
with backslashes.
-@cindex @code{+} (plus sign)
-@cindex plus sign (@code{+})
+@cindex @code{+} (plus sign), regexp operator
+@cindex plus sign (@code{+}), regexp operator
@item +
This symbol is similar to @samp{*}, except that the preceding expression must be
matched at least once. This means that @samp{wh+y}
@@ -4859,8 +4867,8 @@ way of writing the last @samp{*} example:
awk '/\(c[ad]+r x\)/ @{ print @}' sample
@end example
-@cindex @code{?} (question mark) regexp operator
-@cindex question mark (@code{?}) regexp operator
+@cindex @code{?} (question mark), regexp operator
+@cindex question mark (@code{?}), regexp operator
@item ?
This symbol is similar to @samp{*}, except that the preceding expression can be
matched either once or not at all. For example, @samp{fe?d}
@@ -5182,10 +5190,10 @@ Matches the empty string at the
end of a buffer (string).
@end table
-@cindex @code{^} (caret)
-@cindex caret (@code{^})
-@cindex @code{?} (question mark) regexp operator
-@cindex question mark (@code{?}) regexp operator
+@cindex @code{^} (caret), regexp operator
+@cindex caret (@code{^}), regexp operator
+@cindex @code{?} (question mark), regexp operator
+@cindex question mark (@code{?}), regexp operator
Because @samp{^} and @samp{$} always work in terms of the beginning
and end of strings, these operators don't add any new capabilities
for @command{awk}. They are provided for compatibility with other
@@ -5229,6 +5237,7 @@ Only POSIX regexps are supported; the GNU operators are not special
(e.g., @samp{\w} matches a literal @samp{w}). Interval expressions
are allowed.
+@cindex Brian Kernighan's @command{awk}
@item @code{--traditional}
Traditional Unix @command{awk} regexps are matched. The GNU operators
are not special, and interval expressions are not available.
@@ -6505,7 +6514,7 @@ was ignored when finding @code{$1}, it is not part of the new @code{$0}.
Finally, the last @code{print} statement prints the new @code{$0}.
@cindex @code{FS}, containing @code{^}
-@cindex @code{^}, in @code{FS}
+@cindex @code{^} (caret), in @code{FS}
@cindex dark corner, @code{^}, in @code{FS}
There is an additional subtlety to be aware of when using regular expressions
for field splitting.
@@ -6516,6 +6525,7 @@ different @command{awk} versions answer this question differently, and you
should not rely on any specific behavior in your programs.
@value{DARKCORNER}
+@cindex Brian Kernighan's @command{awk}
As a point of information, Brian Kernighan's @command{awk} allows @samp{^}
to match only at the beginning of the record. @command{gawk}
also works this way. For example:
@@ -7596,6 +7606,7 @@ that does handle nested @samp{@@include} statements.
@subsection Using @code{getline} from a Pipe
@c From private email, dated October 2, 1988. Used by permission, March 2013.
+@cindex Kernighan, Brian
@quotation
@i{Omniscience has much to recommend it.
Failing that, attention to details would be useful.}
@@ -7683,6 +7694,8 @@ because the concatenation operator is not parenthesized. You should
write it as @samp{(@w{"echo "} "date") | getline} if you want your program
to be portable to all @command{awk} implementations.
+@cindex Brian Kernighan's @command{awk}
+@cindex @command{mawk} utility
@quotation NOTE
Unfortunately, @command{gawk} has not been consistent in its treatment
of a construct like @samp{@w{"echo "} "date" | getline}.
@@ -8007,6 +8020,7 @@ indefinitely until some other process opens it for writing.
@node Command line directories
@section Directories On The Command Line
+@cindex differences in @command{awk} and @command{gawk}, command line directories
@cindex directories, command line
@cindex command line, directories on
@@ -9159,9 +9173,9 @@ has been ported to, not just those that are POSIX-compliant:
@cindex extensions, common@comma{} @code{/dev/stdout} special file
@cindex extensions, common@comma{} @code{/dev/stderr} special file
@cindex file names, standard streams in @command{gawk}
-@cindex @code{/dev/@dots{}} special files (@command{gawk})
+@cindex @code{/dev/@dots{}} special files
@cindex files, @code{/dev/@dots{}} special files
-@cindex @code{/dev/fd/@var{N}} special files
+@cindex @code{/dev/fd/@var{N}} special files (@command{gawk})
@table @file
@item /dev/stdin
The standard input (file descriptor 0).
@@ -10346,6 +10360,8 @@ name = "name"
print "something meaningful" > file name
@end example
+@cindex Brian Kernighan's @command{awk}
+@cindex @command{mawk} utility
@noindent
This produces a syntax error with some versions of Unix
@command{awk}.@footnote{It happens that Brian Kernighan's
@@ -12191,6 +12207,11 @@ $ @kbd{echo Yes | gawk '(/1/,/2/) || /Yes/'}
@error{} gawk: cmd. line:1: ^ syntax error
@end example
+@cindex range patterns, line continuation and
+As a minor point of interest, although it is poor style,
+POSIX allows you to put a newline after the comma in
+a range pattern. @value{DARKCORNER}
+
@node BEGIN/END
@subsection The @code{BEGIN} and @code{END} Special Patterns
@@ -12289,6 +12310,7 @@ to give @code{$0} a real value is to execute a @code{getline} command
without a variable (@pxref{Getline}).
Another way is simply to assign a value to @code{$0}.
+@cindex Brian Kernighan's @command{awk}
@cindex differences in @command{awk} and @command{gawk}, @code{BEGIN}/@code{END} patterns
@cindex POSIX @command{awk}, @code{BEGIN}/@code{END} patterns
@cindex @code{print} statement, @code{BEGIN}/@code{END} patterns and
@@ -13019,6 +13041,7 @@ This is discussed in @ref{Switch Statement}.
@cindex POSIX @command{awk}, @code{break} statement and
@cindex dark corner, @code{break} statement
@cindex @command{gawk}, @code{break} statement in
+@cindex Brian Kernighan's @command{awk}
The @code{break} statement has no meaning when
used outside the body of a loop or @code{switch}.
However, although it was never documented,
@@ -13083,6 +13106,7 @@ This program loops forever once @code{x} reaches 5.
@cindex POSIX @command{awk}, @code{continue} statement and
@cindex dark corner, @code{continue} statement
@cindex @command{gawk}, @code{continue} statement in
+@cindex Brian Kernighan's @command{awk}
The @code{continue} statement has no special meaning with respect to the
@code{switch} statement, nor does it have any meaning when used outside the
body of a loop. Historical versions of @command{awk} treated a @code{continue}
@@ -13220,8 +13244,10 @@ See @uref{http://austingroupbugs.net/view.php?id=607, the Austin Group website}.
@cindex functions, user-defined, @code{next}/@code{nextfile} statements and
@cindex @code{nextfile} statement, user-defined functions and
-The current version of the Brian Kernighan's @command{awk} (@pxref{Other
-Versions}) also supports @code{nextfile}. However, it doesn't allow the
+@cindex Brian Kernighan's @command{awk}
+@cindex @command{mawk} utility
+The current version of the Brian Kernighan's @command{awk}, and @command{mawk} (@pxref{Other
+Versions}) also support @code{nextfile}. However, they don't allow the
@code{nextfile} statement inside function bodies (@pxref{User-defined}).
@command{gawk} does; a @code{nextfile} inside a function body reads the
next record and starts processing it with the first rule in the program,
@@ -14879,6 +14905,7 @@ Using this version of the @code{delete} statement is about three times
more efficient than the equivalent loop that deletes each element one
at a time.
+@cindex Brian Kernighan's @command{awk}
@quotation NOTE
For many years,
using @code{delete} without a subscript was a @command{gawk} extension.
@@ -16111,7 +16138,6 @@ you use the @option{--non-decimal-data} option, which isn't recommended.
Note also that @code{strtonum()} uses the current locale's decimal point
for recognizing numbers (@pxref{Locales}).
-@cindex differences in @command{awk} and @command{gawk}, @code{strtonum()} function (@command{gawk})
@code{strtonum()} is a @command{gawk} extension; it is not available
in compatibility mode (@pxref{Options}).
@@ -16230,6 +16256,7 @@ suffix is also returned
if @var{length} is greater than the number of characters remaining
in the string, counting from character @var{start}.
+@cindex Brian Kernighan's @command{awk}
If @var{start} is less than one, @code{substr()} treats it as
if it was one. (POSIX doesn't specify what to do in this case:
Brian Kernighan's @command{awk} acts this way, and therefore @command{gawk}
@@ -16309,6 +16336,7 @@ and builds an internal copy of it that can be executed.
Then there is the runtime level, which is when @command{awk} actually scans the
replacement string to determine what to generate.
+@cindex Brian Kernighan's @command{awk}
At both levels, @command{awk} looks for a defined set of characters that
can come after a backslash. At the lexical level, it looks for the
escape sequences listed in @ref{Escape Sequences}.
@@ -16748,6 +16776,8 @@ This is the purpose of the @code{fflush()} function---@command{gawk} also
buffers its output and the @code{fflush()} function forces
@command{gawk} to flush its buffers.
+@cindex extensions, common@comma{} @code{fflush()} function
+@cindex Brian Kernighan's @command{awk}
@code{fflush()} was added to Brian Kernighan's version of @command{awk} in
April of 1992. For two decades, it was not part of the POSIX standard.
As of December, 2012, it was accepted for inclusion into the POSIX
@@ -19459,6 +19489,7 @@ reason to build them into the @command{awk} interpreter:
@cindex @code{ord()} user-defined function
@cindex @code{chr()} user-defined function
+@cindex @code{_ord_init()} user-defined function
@example
@c file eg/lib/ord.awk
# ord.awk --- do ord and chr
@@ -19505,6 +19536,7 @@ function _ord_init( low, high, i, t)
@cindex character sets (machine character encodings)
@cindex ASCII
@cindex EBCDIC
+@cindex Unicode
@cindex mark parity
Some explanation of the numbers used by @code{_ord_init()} is worthwhile.
The most prominent character set in use today is ASCII.@footnote{This
@@ -21857,6 +21889,7 @@ of picking the input line apart by characters.
@cindex searching, files for regular expressions
@c STARTOFRANGE fsregexp
@cindex files, searching for regular expressions
+@c STARTOFRANGE egrep
@cindex @command{egrep} utility
The @command{egrep} utility searches files for patterns. It uses regular
expressions that are almost identical to those available in @command{awk}
@@ -22142,12 +22175,14 @@ or not.
@c ENDOFRANGE regexps
@c ENDOFRANGE sfregexp
@c ENDOFRANGE fsregexp
+@c ENDOFRANGE egrep
@node Id Program
@subsection Printing out User Information
@cindex printing, user information
@cindex users, information about, printing
+@c STARTOFRANGE id
@cindex @command{id} utility
The @command{id} utility lists a user's real and effective user ID numbers,
real and effective group ID numbers, and the user's group set, if any.
@@ -22284,6 +22319,7 @@ The POSIX version of @command{id} takes arguments that control which
information is printed. Modify this version to accept the same
arguments and perform in the same way.
@end ignore
+@c ENDOFRANGE id
@node Split Program
@subsection Splitting a Large File into Pieces
@@ -22292,6 +22328,7 @@ arguments and perform in the same way.
@c STARTOFRANGE filspl
@cindex files, splitting
+@c STARTOFRANGE split
@cindex @code{split} utility
The @command{split} program splits large text files into smaller pieces.
Usage is as follows:@footnote{This is the traditional usage. The
@@ -22435,12 +22472,14 @@ which isn't true for EBCDIC systems.
@c Exercise: Fix these problems.
@c BFD...
@c ENDOFRANGE filspl
+@c ENDOFRANGE split
@node Tee Program
@subsection Duplicating Output into Multiple Files
@cindex files, multiple@comma{} duplicating output into
@cindex output, duplicating into files
+@c STARTOFRANGE tee
@cindex @code{tee} utility
The @code{tee} program is known as a ``pipe fitting.'' @code{tee} copies
its standard input to its standard output and also duplicates it to the
@@ -22555,6 +22594,7 @@ END \
@}
@c endfile
@end example
+@c ENDOFRANGE tee
@node Uniq Program
@subsection Printing Nonduplicated Lines of Text
@@ -22565,6 +22605,7 @@ END \
@cindex printing, unduplicated lines of text
@c STARTOFRANGE tpul
@cindex text@comma{} printing, unduplicated lines of
+@c STARTOFRANGE uniq
@cindex @command{uniq} utility
The @command{uniq} utility reads sorted lines of data on its standard
input, and by default removes duplicate lines. In other words, it only
@@ -22816,6 +22857,7 @@ END @{
@end example
@c ENDOFRANGE prunt
@c ENDOFRANGE tpul
+@c ENDOFRANGE uniq
@node Wc Program
@subsection Counting Things
@@ -22832,6 +22874,7 @@ END @{
@cindex characters, counting
@c STARTOFRANGE lico
@cindex lines, counting
+@c STARTOFRANGE wc
@cindex @command{wc} utility
The @command{wc} (word count) utility counts lines, words, and characters in
one or more input files. Its usage is as follows:
@@ -23014,6 +23057,7 @@ END @{
@c ENDOFRANGE lico
@c ENDOFRANGE woco
@c ENDOFRANGE chco
+@c ENDOFRANGE wc
@c ENDOFRANGE posimawk
@node Miscellaneous Programs
@@ -23308,6 +23352,7 @@ seconds are necessary:
@c STARTOFRANGE chtra
@cindex characters, transliterating
+@c STARTOFRANGE tr
@cindex @command{tr} utility
The system @command{tr} utility transliterates characters. For example, it is
often used to map uppercase letters into lowercase for further processing:
@@ -23456,6 +23501,7 @@ An obvious improvement to this program would be to set up the
assumes that the ``from'' and ``to'' lists
will never change throughout the lifetime of the program.
@c ENDOFRANGE chtra
+@c ENDOFRANGE tr
@node Labels Program
@subsection Printing Mailing Labels
@@ -23515,6 +23561,7 @@ that there are two blank lines at the top and two blank lines at the bottom.
The @code{END} rule arranges to flush the final page of labels; there may
not have been an even multiple of 20 labels in the data:
+@c STARTOFRANGE labels
@cindex @code{labels.awk} program
@example
@c file eg/prog/labels.awk
@@ -23582,6 +23629,7 @@ END \
@end example
@c ENDOFRANGE prml
@c ENDOFRANGE mlprint
+@c ENDOFRANGE labels
@node Word Sorting
@subsection Generating Word-Usage Counts
@@ -23648,6 +23696,7 @@ to remove punctuation characters. Finally, we solve the third problem
by using the system @command{sort} utility to process the output of the
@command{awk} script. Here is the new version of the program:
+@c STARTOFRANGE wordfreq
@cindex @code{wordfreq.awk} program
@example
@c file eg/prog/wordfreq.awk
@@ -23709,6 +23758,7 @@ have true pipes at the command-line (or batch-file) level.
See the general operating system documentation for more information on how
to use the @command{sort} program.
@c ENDOFRANGE worus
+@c ENDOFRANGE wordfreq
@node History Sorting
@subsection Removing Duplicates from Unsorted Text
@@ -23738,6 +23788,7 @@ Each element of @code{lines} is a unique command, and the indices of
The @code{END} rule simply prints out the lines, in order:
@cindex Rakitzis, Byron
+@c STARTOFRANGE histsort
@cindex @code{histsort.awk} program
@example
@c file eg/prog/histsort.awk
@@ -23780,6 +23831,7 @@ print data[lines[i]], lines[i]
This works because @code{data[$0]} is incremented each time a line is
seen.
@c ENDOFRANGE lidu
+@c ENDOFRANGE histsort
@node Extract Program
@subsection Extracting Programs from Texinfo Source Files
@@ -23890,6 +23942,7 @@ The first rule handles calling @code{system()}, checking that a command is
given (@code{NF} is at least three) and also checking that the command
exits with a zero exit status, signifying OK:
+@c STARTOFRANGE extract
@cindex @code{extract.awk} program
@example
@c file eg/prog/extract.awk
@@ -24048,6 +24101,7 @@ END @{
@end example
@c ENDOFRANGE texse
@c ENDOFRANGE fitex
+@c ENDOFRANGE extract
@node Simple Sed
@subsection A Simple Stream Editor
@@ -24077,6 +24131,7 @@ additional arguments are treated as data file names to process. If none
are provided, the standard input is used:
@cindex Brennan, Michael
+@c STARTOFRANGE awksed
@cindex @command{awksed.awk} program
@c @cindex simple stream editor
@c @cindex stream editor, simple
@@ -24173,6 +24228,7 @@ Exercise: what are the advantages and disadvantages of this version versus sed?
Others?
@end ignore
+@c ENDOFRANGE awksed
@node Igawk Program
@subsection An Easy Way to Use Library Functions
@@ -24316,6 +24372,7 @@ program.
The program is as follows:
+@c STARTOFRANGE igawk
@cindex @code{igawk.sh} program
@example
@c file eg/prog/igawk.sh
@@ -24675,10 +24732,12 @@ statements for the desired library functions.
@c ENDOFRANGE libfex
@c ENDOFRANGE flibex
@c ENDOFRANGE awkpex
+@c ENDOFRANGE igawk
@node Anagram Program
@subsection Finding Anagrams From A Dictionary
+@cindex anagrams, finding
An interesting programming challenge is to
search for @dfn{anagrams} in a
word list (such as
@@ -24698,6 +24757,7 @@ The following program uses arrays of arrays to bring together
words with the same signature and array sorting to print the words
in sorted order.
+@c STARTOFRANGE anagram
@cindex @code{anagram.awk} program
@example
@c file eg/prog/anagram.awk
@@ -24805,10 +24865,13 @@ babels beslab
babery yabber
@dots{}
@end example
+@c ENDOFRANGE anagram
@node Signature Program
@subsection And Now For Something Completely Different
+@cindex signature program
+@cindex Brini, Davide
The following program was written by Davide Brini
@c (@email{dave_br@@gmx.com})
and is published on @uref{http://backreference.org/2011/02/03/obfuscated-awk/,
@@ -24940,12 +25003,15 @@ It contains the following chapters:
@item
@ref{Dynamic Extensions}.
+@end itemize
@end ifdocbook
@end ignore
@node Advanced Features
@chapter Advanced Features of @command{gawk}
+@ifset WITH_NETWORK_CHAPTER
@cindex advanced features, network connections, See Also networks@comma{} connections
+@end ifset
@c STARTOFRANGE gawadv
@cindex @command{gawk}, features, advanced
@c STARTOFRANGE advgaw
@@ -26174,6 +26240,7 @@ lookup of the translations.
@cindex @code{.po} files
@cindex files, @code{.po}
+@c STARTOFRANGE portobfi
@cindex portable object files
@cindex files, portable object
@item
@@ -26185,6 +26252,7 @@ For example, there might be a @file{fr.po} for a French translation.
@cindex @code{.gmo} files
@cindex files, @code{.gmo}
@cindex message object files
+@c STARTOFRANGE portmsgfi
@cindex files, message object
@item
Each language's @file{.po} file is converted into a binary
@@ -26525,6 +26593,8 @@ second argument to @code{dcngettext()}.@footnote{The
@xref{I18N Example},
for the full list of steps to go through to create and test
translations for @command{guide}.
+@c ENDOFRANGE portobfi
+@c ENDOFRANGE portmsgfi
@node Printf Ordering
@subsection Rearranging @code{printf} Arguments
@@ -28110,7 +28180,7 @@ be added, and of course feel free to try to add them yourself!
@cindex arbitrary precision
@cindex multiple precision
@cindex infinite precision
-@cindex floating-point numbers, arbitrary precision
+@cindex floating-point, numbers@comma{} arbitrary precision
@cindex MPFR
@cindex GMP
@@ -34343,6 +34413,7 @@ This output is unexpected, since the @samp{bc} at the end of
This result is due to the locale setting (and thus you may not see
it on your system).
+@cindex Unicode
Similar considerations apply to other ranges. For example, @samp{["-/]}
is perfectly valid in ASCII, but is not valid in many Unicode locales,
such as @samp{en_US.UTF-8}.
@@ -34356,6 +34427,7 @@ vendors started implementing non-ASCII locales, @emph{and making them
the default}. Perhaps the most frequently asked question became something
like ``why does @samp{[A-Z]} match lowercase letters?!?''
+@cindex Berry, Karl
This situation existed for close to 10 years, if not more, and
the @command{gawk} maintainer grew weary of trying to explain that
@command{gawk} was being nicely standards-compliant, and that the issue
@@ -35968,7 +36040,7 @@ This @value{SECTION} briefly describes where to get them:
@cindex Kernighan, Brian
@cindex source code, Brian Kernighan's @command{awk}
@cindex @command{awk}, versions of, See Also Brian Kernighan's @command{awk}
-@cindex Brian Kernighan's @command{awk}
+@cindex Brian Kernighan's @command{awk}, source code
@item Unix @command{awk}
Brian Kernighan, one of the original designers of Unix @command{awk},
has made his implementation of
@@ -36053,7 +36125,7 @@ To get @command{awka}, go to @url{http://sourceforge.net/projects/awka}.
The project seems to be frozen; no new code changes have been made
since approximately 2003.
-@cindex Beebe, Nelson
+@cindex Beebe, Nelson H.F.@:
@cindex @command{pawk} (profiling version of Brian Kernighan's @command{awk})
@cindex source code, @command{pawk}
@item @command{pawk}
@@ -37463,6 +37535,8 @@ The @uref{http://www.unicode.org, Unicode character set} is
becoming increasingly popular and standard, and is particularly
widely used on GNU/Linux systems.
+@cindex Kernighan, Brian
+@cindex Bentley, Jon
@cindex @command{chem} utility
@item CHEM
A preprocessor for @command{pic} that reads descriptions of molecules
diff --git a/doc/gawktexi.in b/doc/gawktexi.in
index 790bd130..dd3d1409 100644
--- a/doc/gawktexi.in
+++ b/doc/gawktexi.in
@@ -995,6 +995,7 @@ Arnold has distilled over a decade of experience writing and
using AWK programs, and developing @command{gawk}, into this book. If you use
AWK or want to learn how, then read this book.
+@cindex Brennan, Michael
@display
Michael Brennan
Author of @command{mawk}
@@ -1019,6 +1020,7 @@ Such jobs are often easier with @command{awk}.
The @command{awk} utility interprets a special-purpose programming language
that makes it easy to handle simple data-reformatting jobs.
+@cindex Brian Kernighan's @command{awk}
The GNU implementation of @command{awk} is called @command{gawk}; if you
invoke it with the proper options or environment variables
(@pxref{Options}), it is fully
@@ -1741,7 +1743,7 @@ significant editorial help for this @value{DOCUMENT} for the
3.1 release of @command{gawk}.
@end quotation
-@cindex Beebe, Nelson
+@cindex Beebe, Nelson H.F.@:
@cindex Buening, Andreas
@cindex Collado, Manuel
@cindex Colombo, Antonio
@@ -2961,8 +2963,8 @@ noticed because it is ``hidden'' inside the comment. Thus, the
@code{BEGIN} is noted as a syntax error.
@cindex statements, multiple
-@cindex @code{;} (semicolon)
-@cindex semicolon (@code{;})
+@cindex @code{;} (semicolon), separating statements in actions
+@cindex semicolon (@code{;}), separating statements in actions
When @command{awk} statements within one rule are short, you might want to put
more than one of them on a line. This is accomplished by separating the statements
with a semicolon (@samp{;}).
@@ -3022,6 +3024,7 @@ used once, and thrown away. Because @command{awk} programs are interpreted, you
can avoid the (usually lengthy) compilation part of the typical
edit-compile-test-debug cycle of software development.
+@cindex Brian Kernighan's @command{awk}
Complex programs have been written in @command{awk}, including a complete
retargetable assembler for eight-bit microprocessors (@pxref{Glossary}, for
more information), and a microcode assembler for a special-purpose Prolog
@@ -4508,6 +4511,7 @@ leaves what happens as undefined. There are two choices:
@c @cindex automatic warnings
@c @cindex warnings, automatic
+@cindex Brian Kernighan's @command{awk}
@table @asis
@item Strip the backslash out
This is what Brian Kernighan's @command{awk} and @command{gawk} both do.
@@ -4521,6 +4525,7 @@ two backslashes in the string: @samp{FS = @w{"[ \t]+\\|[ \t]+"}}.)
@cindex @command{gawk}, escape sequences
@cindex Unix @command{awk}, backslashes in escape sequences
+@cindex @command{mawk} utility
@item Leave the backslash alone
Some other @command{awk} implementations do this.
In such implementations, typing @code{"a\qc"} is the same as typing
@@ -4596,8 +4601,8 @@ The condition is not true in the following example:
if ("line1\nLINE 2" ~ /^L/) @dots{}
@end example
-@cindex @code{$} (dollar sign)
-@cindex dollar sign (@code{$})
+@cindex @code{$} (dollar sign), regexp operator
+@cindex dollar sign (@code{$}), regexp operator
@item $
This is similar to @samp{^}, but it matches only at the end of a string.
For example, @samp{p$}
@@ -4631,6 +4636,7 @@ may not be able to match the @sc{nul} character.
@cindex bracket expressions
@cindex character sets, See Also bracket expressions
@cindex character lists, See bracket expressions
+@cindex character classes, See bracket expressions
@item [@dots{}]
This is called a @dfn{bracket expression}.@footnote{In other literature,
you may see a bracket expression referred to as either a
@@ -4692,8 +4698,8 @@ prints every record in @file{sample} containing a string of the form
Notice the escaping of the parentheses by preceding them
with backslashes.
-@cindex @code{+} (plus sign)
-@cindex plus sign (@code{+})
+@cindex @code{+} (plus sign), regexp operator
+@cindex plus sign (@code{+}), regexp operator
@item +
This symbol is similar to @samp{*}, except that the preceding expression must be
matched at least once. This means that @samp{wh+y}
@@ -4706,8 +4712,8 @@ way of writing the last @samp{*} example:
awk '/\(c[ad]+r x\)/ @{ print @}' sample
@end example
-@cindex @code{?} (question mark) regexp operator
-@cindex question mark (@code{?}) regexp operator
+@cindex @code{?} (question mark), regexp operator
+@cindex question mark (@code{?}), regexp operator
@item ?
This symbol is similar to @samp{*}, except that the preceding expression can be
matched either once or not at all. For example, @samp{fe?d}
@@ -5029,10 +5035,10 @@ Matches the empty string at the
end of a buffer (string).
@end table
-@cindex @code{^} (caret)
-@cindex caret (@code{^})
-@cindex @code{?} (question mark) regexp operator
-@cindex question mark (@code{?}) regexp operator
+@cindex @code{^} (caret), regexp operator
+@cindex caret (@code{^}), regexp operator
+@cindex @code{?} (question mark), regexp operator
+@cindex question mark (@code{?}), regexp operator
Because @samp{^} and @samp{$} always work in terms of the beginning
and end of strings, these operators don't add any new capabilities
for @command{awk}. They are provided for compatibility with other
@@ -5076,6 +5082,7 @@ Only POSIX regexps are supported; the GNU operators are not special
(e.g., @samp{\w} matches a literal @samp{w}). Interval expressions
are allowed.
+@cindex Brian Kernighan's @command{awk}
@item @code{--traditional}
Traditional Unix @command{awk} regexps are matched. The GNU operators
are not special, and interval expressions are not available.
@@ -6220,7 +6227,7 @@ was ignored when finding @code{$1}, it is not part of the new @code{$0}.
Finally, the last @code{print} statement prints the new @code{$0}.
@cindex @code{FS}, containing @code{^}
-@cindex @code{^}, in @code{FS}
+@cindex @code{^} (caret), in @code{FS}
@cindex dark corner, @code{^}, in @code{FS}
There is an additional subtlety to be aware of when using regular expressions
for field splitting.
@@ -6231,6 +6238,7 @@ different @command{awk} versions answer this question differently, and you
should not rely on any specific behavior in your programs.
@value{DARKCORNER}
+@cindex Brian Kernighan's @command{awk}
As a point of information, Brian Kernighan's @command{awk} allows @samp{^}
to match only at the beginning of the record. @command{gawk}
also works this way. For example:
@@ -7216,6 +7224,7 @@ that does handle nested @samp{@@include} statements.
@subsection Using @code{getline} from a Pipe
@c From private email, dated October 2, 1988. Used by permission, March 2013.
+@cindex Kernighan, Brian
@quotation
@i{Omniscience has much to recommend it.
Failing that, attention to details would be useful.}
@@ -7303,6 +7312,8 @@ because the concatenation operator is not parenthesized. You should
write it as @samp{(@w{"echo "} "date") | getline} if you want your program
to be portable to all @command{awk} implementations.
+@cindex Brian Kernighan's @command{awk}
+@cindex @command{mawk} utility
@quotation NOTE
Unfortunately, @command{gawk} has not been consistent in its treatment
of a construct like @samp{@w{"echo "} "date" | getline}.
@@ -7627,6 +7638,7 @@ indefinitely until some other process opens it for writing.
@node Command line directories
@section Directories On The Command Line
+@cindex differences in @command{awk} and @command{gawk}, command line directories
@cindex directories, command line
@cindex command line, directories on
@@ -8741,9 +8753,9 @@ has been ported to, not just those that are POSIX-compliant:
@cindex extensions, common@comma{} @code{/dev/stdout} special file
@cindex extensions, common@comma{} @code{/dev/stderr} special file
@cindex file names, standard streams in @command{gawk}
-@cindex @code{/dev/@dots{}} special files (@command{gawk})
+@cindex @code{/dev/@dots{}} special files
@cindex files, @code{/dev/@dots{}} special files
-@cindex @code{/dev/fd/@var{N}} special files
+@cindex @code{/dev/fd/@var{N}} special files (@command{gawk})
@table @file
@item /dev/stdin
The standard input (file descriptor 0).
@@ -9837,6 +9849,8 @@ name = "name"
print "something meaningful" > file name
@end example
+@cindex Brian Kernighan's @command{awk}
+@cindex @command{mawk} utility
@noindent
This produces a syntax error with some versions of Unix
@command{awk}.@footnote{It happens that Brian Kernighan's
@@ -11570,6 +11584,11 @@ $ @kbd{echo Yes | gawk '(/1/,/2/) || /Yes/'}
@error{} gawk: cmd. line:1: ^ syntax error
@end example
+@cindex range patterns, line continuation and
+As a minor point of interest, although it is poor style,
+POSIX allows you to put a newline after the comma in
+a range pattern. @value{DARKCORNER}
+
@node BEGIN/END
@subsection The @code{BEGIN} and @code{END} Special Patterns
@@ -11668,6 +11687,7 @@ to give @code{$0} a real value is to execute a @code{getline} command
without a variable (@pxref{Getline}).
Another way is simply to assign a value to @code{$0}.
+@cindex Brian Kernighan's @command{awk}
@cindex differences in @command{awk} and @command{gawk}, @code{BEGIN}/@code{END} patterns
@cindex POSIX @command{awk}, @code{BEGIN}/@code{END} patterns
@cindex @code{print} statement, @code{BEGIN}/@code{END} patterns and
@@ -12398,6 +12418,7 @@ This is discussed in @ref{Switch Statement}.
@cindex POSIX @command{awk}, @code{break} statement and
@cindex dark corner, @code{break} statement
@cindex @command{gawk}, @code{break} statement in
+@cindex Brian Kernighan's @command{awk}
The @code{break} statement has no meaning when
used outside the body of a loop or @code{switch}.
However, although it was never documented,
@@ -12462,6 +12483,7 @@ This program loops forever once @code{x} reaches 5.
@cindex POSIX @command{awk}, @code{continue} statement and
@cindex dark corner, @code{continue} statement
@cindex @command{gawk}, @code{continue} statement in
+@cindex Brian Kernighan's @command{awk}
The @code{continue} statement has no special meaning with respect to the
@code{switch} statement, nor does it have any meaning when used outside the
body of a loop. Historical versions of @command{awk} treated a @code{continue}
@@ -12599,8 +12621,10 @@ See @uref{http://austingroupbugs.net/view.php?id=607, the Austin Group website}.
@cindex functions, user-defined, @code{next}/@code{nextfile} statements and
@cindex @code{nextfile} statement, user-defined functions and
-The current version of the Brian Kernighan's @command{awk} (@pxref{Other
-Versions}) also supports @code{nextfile}. However, it doesn't allow the
+@cindex Brian Kernighan's @command{awk}
+@cindex @command{mawk} utility
+The current version of the Brian Kernighan's @command{awk}, and @command{mawk} (@pxref{Other
+Versions}) also support @code{nextfile}. However, they don't allow the
@code{nextfile} statement inside function bodies (@pxref{User-defined}).
@command{gawk} does; a @code{nextfile} inside a function body reads the
next record and starts processing it with the first rule in the program,
@@ -14212,6 +14236,7 @@ Using this version of the @code{delete} statement is about three times
more efficient than the equivalent loop that deletes each element one
at a time.
+@cindex Brian Kernighan's @command{awk}
@quotation NOTE
For many years,
using @code{delete} without a subscript was a @command{gawk} extension.
@@ -15444,7 +15469,6 @@ you use the @option{--non-decimal-data} option, which isn't recommended.
Note also that @code{strtonum()} uses the current locale's decimal point
for recognizing numbers (@pxref{Locales}).
-@cindex differences in @command{awk} and @command{gawk}, @code{strtonum()} function (@command{gawk})
@code{strtonum()} is a @command{gawk} extension; it is not available
in compatibility mode (@pxref{Options}).
@@ -15563,6 +15587,7 @@ suffix is also returned
if @var{length} is greater than the number of characters remaining
in the string, counting from character @var{start}.
+@cindex Brian Kernighan's @command{awk}
If @var{start} is less than one, @code{substr()} treats it as
if it was one. (POSIX doesn't specify what to do in this case:
Brian Kernighan's @command{awk} acts this way, and therefore @command{gawk}
@@ -15642,6 +15667,7 @@ and builds an internal copy of it that can be executed.
Then there is the runtime level, which is when @command{awk} actually scans the
replacement string to determine what to generate.
+@cindex Brian Kernighan's @command{awk}
At both levels, @command{awk} looks for a defined set of characters that
can come after a backslash. At the lexical level, it looks for the
escape sequences listed in @ref{Escape Sequences}.
@@ -16048,6 +16074,8 @@ This is the purpose of the @code{fflush()} function---@command{gawk} also
buffers its output and the @code{fflush()} function forces
@command{gawk} to flush its buffers.
+@cindex extensions, common@comma{} @code{fflush()} function
+@cindex Brian Kernighan's @command{awk}
@code{fflush()} was added to Brian Kernighan's version of @command{awk} in
April of 1992. For two decades, it was not part of the POSIX standard.
As of December, 2012, it was accepted for inclusion into the POSIX
@@ -18631,6 +18659,7 @@ reason to build them into the @command{awk} interpreter:
@cindex @code{ord()} user-defined function
@cindex @code{chr()} user-defined function
+@cindex @code{_ord_init()} user-defined function
@example
@c file eg/lib/ord.awk
# ord.awk --- do ord and chr
@@ -18677,6 +18706,7 @@ function _ord_init( low, high, i, t)
@cindex character sets (machine character encodings)
@cindex ASCII
@cindex EBCDIC
+@cindex Unicode
@cindex mark parity
Some explanation of the numbers used by @code{_ord_init()} is worthwhile.
The most prominent character set in use today is ASCII.@footnote{This
@@ -21000,6 +21030,7 @@ of picking the input line apart by characters.
@cindex searching, files for regular expressions
@c STARTOFRANGE fsregexp
@cindex files, searching for regular expressions
+@c STARTOFRANGE egrep
@cindex @command{egrep} utility
The @command{egrep} utility searches files for patterns. It uses regular
expressions that are almost identical to those available in @command{awk}
@@ -21285,12 +21316,14 @@ or not.
@c ENDOFRANGE regexps
@c ENDOFRANGE sfregexp
@c ENDOFRANGE fsregexp
+@c ENDOFRANGE egrep
@node Id Program
@subsection Printing out User Information
@cindex printing, user information
@cindex users, information about, printing
+@c STARTOFRANGE id
@cindex @command{id} utility
The @command{id} utility lists a user's real and effective user ID numbers,
real and effective group ID numbers, and the user's group set, if any.
@@ -21427,6 +21460,7 @@ The POSIX version of @command{id} takes arguments that control which
information is printed. Modify this version to accept the same
arguments and perform in the same way.
@end ignore
+@c ENDOFRANGE id
@node Split Program
@subsection Splitting a Large File into Pieces
@@ -21435,6 +21469,7 @@ arguments and perform in the same way.
@c STARTOFRANGE filspl
@cindex files, splitting
+@c STARTOFRANGE split
@cindex @code{split} utility
The @command{split} program splits large text files into smaller pieces.
Usage is as follows:@footnote{This is the traditional usage. The
@@ -21578,12 +21613,14 @@ which isn't true for EBCDIC systems.
@c Exercise: Fix these problems.
@c BFD...
@c ENDOFRANGE filspl
+@c ENDOFRANGE split
@node Tee Program
@subsection Duplicating Output into Multiple Files
@cindex files, multiple@comma{} duplicating output into
@cindex output, duplicating into files
+@c STARTOFRANGE tee
@cindex @code{tee} utility
The @code{tee} program is known as a ``pipe fitting.'' @code{tee} copies
its standard input to its standard output and also duplicates it to the
@@ -21698,6 +21735,7 @@ END \
@}
@c endfile
@end example
+@c ENDOFRANGE tee
@node Uniq Program
@subsection Printing Nonduplicated Lines of Text
@@ -21708,6 +21746,7 @@ END \
@cindex printing, unduplicated lines of text
@c STARTOFRANGE tpul
@cindex text@comma{} printing, unduplicated lines of
+@c STARTOFRANGE uniq
@cindex @command{uniq} utility
The @command{uniq} utility reads sorted lines of data on its standard
input, and by default removes duplicate lines. In other words, it only
@@ -21959,6 +21998,7 @@ END @{
@end example
@c ENDOFRANGE prunt
@c ENDOFRANGE tpul
+@c ENDOFRANGE uniq
@node Wc Program
@subsection Counting Things
@@ -21975,6 +22015,7 @@ END @{
@cindex characters, counting
@c STARTOFRANGE lico
@cindex lines, counting
+@c STARTOFRANGE wc
@cindex @command{wc} utility
The @command{wc} (word count) utility counts lines, words, and characters in
one or more input files. Its usage is as follows:
@@ -22157,6 +22198,7 @@ END @{
@c ENDOFRANGE lico
@c ENDOFRANGE woco
@c ENDOFRANGE chco
+@c ENDOFRANGE wc
@c ENDOFRANGE posimawk
@node Miscellaneous Programs
@@ -22451,6 +22493,7 @@ seconds are necessary:
@c STARTOFRANGE chtra
@cindex characters, transliterating
+@c STARTOFRANGE tr
@cindex @command{tr} utility
The system @command{tr} utility transliterates characters. For example, it is
often used to map uppercase letters into lowercase for further processing:
@@ -22599,6 +22642,7 @@ An obvious improvement to this program would be to set up the
assumes that the ``from'' and ``to'' lists
will never change throughout the lifetime of the program.
@c ENDOFRANGE chtra
+@c ENDOFRANGE tr
@node Labels Program
@subsection Printing Mailing Labels
@@ -22658,6 +22702,7 @@ that there are two blank lines at the top and two blank lines at the bottom.
The @code{END} rule arranges to flush the final page of labels; there may
not have been an even multiple of 20 labels in the data:
+@c STARTOFRANGE labels
@cindex @code{labels.awk} program
@example
@c file eg/prog/labels.awk
@@ -22725,6 +22770,7 @@ END \
@end example
@c ENDOFRANGE prml
@c ENDOFRANGE mlprint
+@c ENDOFRANGE labels
@node Word Sorting
@subsection Generating Word-Usage Counts
@@ -22791,6 +22837,7 @@ to remove punctuation characters. Finally, we solve the third problem
by using the system @command{sort} utility to process the output of the
@command{awk} script. Here is the new version of the program:
+@c STARTOFRANGE wordfreq
@cindex @code{wordfreq.awk} program
@example
@c file eg/prog/wordfreq.awk
@@ -22852,6 +22899,7 @@ have true pipes at the command-line (or batch-file) level.
See the general operating system documentation for more information on how
to use the @command{sort} program.
@c ENDOFRANGE worus
+@c ENDOFRANGE wordfreq
@node History Sorting
@subsection Removing Duplicates from Unsorted Text
@@ -22881,6 +22929,7 @@ Each element of @code{lines} is a unique command, and the indices of
The @code{END} rule simply prints out the lines, in order:
@cindex Rakitzis, Byron
+@c STARTOFRANGE histsort
@cindex @code{histsort.awk} program
@example
@c file eg/prog/histsort.awk
@@ -22923,6 +22972,7 @@ print data[lines[i]], lines[i]
This works because @code{data[$0]} is incremented each time a line is
seen.
@c ENDOFRANGE lidu
+@c ENDOFRANGE histsort
@node Extract Program
@subsection Extracting Programs from Texinfo Source Files
@@ -23033,6 +23083,7 @@ The first rule handles calling @code{system()}, checking that a command is
given (@code{NF} is at least three) and also checking that the command
exits with a zero exit status, signifying OK:
+@c STARTOFRANGE extract
@cindex @code{extract.awk} program
@example
@c file eg/prog/extract.awk
@@ -23191,6 +23242,7 @@ END @{
@end example
@c ENDOFRANGE texse
@c ENDOFRANGE fitex
+@c ENDOFRANGE extract
@node Simple Sed
@subsection A Simple Stream Editor
@@ -23220,6 +23272,7 @@ additional arguments are treated as data file names to process. If none
are provided, the standard input is used:
@cindex Brennan, Michael
+@c STARTOFRANGE awksed
@cindex @command{awksed.awk} program
@c @cindex simple stream editor
@c @cindex stream editor, simple
@@ -23316,6 +23369,7 @@ Exercise: what are the advantages and disadvantages of this version versus sed?
Others?
@end ignore
+@c ENDOFRANGE awksed
@node Igawk Program
@subsection An Easy Way to Use Library Functions
@@ -23459,6 +23513,7 @@ program.
The program is as follows:
+@c STARTOFRANGE igawk
@cindex @code{igawk.sh} program
@example
@c file eg/prog/igawk.sh
@@ -23818,10 +23873,12 @@ statements for the desired library functions.
@c ENDOFRANGE libfex
@c ENDOFRANGE flibex
@c ENDOFRANGE awkpex
+@c ENDOFRANGE igawk
@node Anagram Program
@subsection Finding Anagrams From A Dictionary
+@cindex anagrams, finding
An interesting programming challenge is to
search for @dfn{anagrams} in a
word list (such as
@@ -23841,6 +23898,7 @@ The following program uses arrays of arrays to bring together
words with the same signature and array sorting to print the words
in sorted order.
+@c STARTOFRANGE anagram
@cindex @code{anagram.awk} program
@example
@c file eg/prog/anagram.awk
@@ -23948,10 +24006,13 @@ babels beslab
babery yabber
@dots{}
@end example
+@c ENDOFRANGE anagram
@node Signature Program
@subsection And Now For Something Completely Different
+@cindex signature program
+@cindex Brini, Davide
The following program was written by Davide Brini
@c (@email{dave_br@@gmx.com})
and is published on @uref{http://backreference.org/2011/02/03/obfuscated-awk/,
@@ -24083,12 +24144,15 @@ It contains the following chapters:
@item
@ref{Dynamic Extensions}.
+@end itemize
@end ifdocbook
@end ignore
@node Advanced Features
@chapter Advanced Features of @command{gawk}
+@ifset WITH_NETWORK_CHAPTER
@cindex advanced features, network connections, See Also networks@comma{} connections
+@end ifset
@c STARTOFRANGE gawadv
@cindex @command{gawk}, features, advanced
@c STARTOFRANGE advgaw
@@ -25317,6 +25381,7 @@ lookup of the translations.
@cindex @code{.po} files
@cindex files, @code{.po}
+@c STARTOFRANGE portobfi
@cindex portable object files
@cindex files, portable object
@item
@@ -25328,6 +25393,7 @@ For example, there might be a @file{fr.po} for a French translation.
@cindex @code{.gmo} files
@cindex files, @code{.gmo}
@cindex message object files
+@c STARTOFRANGE portmsgfi
@cindex files, message object
@item
Each language's @file{.po} file is converted into a binary
@@ -25668,6 +25734,8 @@ second argument to @code{dcngettext()}.@footnote{The
@xref{I18N Example},
for the full list of steps to go through to create and test
translations for @command{guide}.
+@c ENDOFRANGE portobfi
+@c ENDOFRANGE portmsgfi
@node Printf Ordering
@subsection Rearranging @code{printf} Arguments
@@ -27253,7 +27321,7 @@ be added, and of course feel free to try to add them yourself!
@cindex arbitrary precision
@cindex multiple precision
@cindex infinite precision
-@cindex floating-point numbers, arbitrary precision
+@cindex floating-point, numbers@comma{} arbitrary precision
@cindex MPFR
@cindex GMP
@@ -33486,6 +33554,7 @@ This output is unexpected, since the @samp{bc} at the end of
This result is due to the locale setting (and thus you may not see
it on your system).
+@cindex Unicode
Similar considerations apply to other ranges. For example, @samp{["-/]}
is perfectly valid in ASCII, but is not valid in many Unicode locales,
such as @samp{en_US.UTF-8}.
@@ -33499,6 +33568,7 @@ vendors started implementing non-ASCII locales, @emph{and making them
the default}. Perhaps the most frequently asked question became something
like ``why does @samp{[A-Z]} match lowercase letters?!?''
+@cindex Berry, Karl
This situation existed for close to 10 years, if not more, and
the @command{gawk} maintainer grew weary of trying to explain that
@command{gawk} was being nicely standards-compliant, and that the issue
@@ -35111,7 +35181,7 @@ This @value{SECTION} briefly describes where to get them:
@cindex Kernighan, Brian
@cindex source code, Brian Kernighan's @command{awk}
@cindex @command{awk}, versions of, See Also Brian Kernighan's @command{awk}
-@cindex Brian Kernighan's @command{awk}
+@cindex Brian Kernighan's @command{awk}, source code
@item Unix @command{awk}
Brian Kernighan, one of the original designers of Unix @command{awk},
has made his implementation of
@@ -35196,7 +35266,7 @@ To get @command{awka}, go to @url{http://sourceforge.net/projects/awka}.
The project seems to be frozen; no new code changes have been made
since approximately 2003.
-@cindex Beebe, Nelson
+@cindex Beebe, Nelson H.F.@:
@cindex @command{pawk} (profiling version of Brian Kernighan's @command{awk})
@cindex source code, @command{pawk}
@item @command{pawk}
@@ -36606,6 +36676,8 @@ The @uref{http://www.unicode.org, Unicode character set} is
becoming increasingly popular and standard, and is particularly
widely used on GNU/Linux systems.
+@cindex Kernighan, Brian
+@cindex Bentley, Jon
@cindex @command{chem} utility
@item CHEM
A preprocessor for @command{pic} that reads descriptions of molecules