diff options
author | Arnold D. Robbins <arnold@skeeve.com> | 2014-08-13 06:32:25 +0300 |
---|---|---|
committer | Arnold D. Robbins <arnold@skeeve.com> | 2014-08-13 06:32:25 +0300 |
commit | 9d8bd17c58e8fc74d4ad80b199d5ea1d5cbd2bce (patch) | |
tree | 66bc0f0fa02973f1111cade3fc7c291f5da71256 | |
parent | 9e2907afe246b3930d9ae6043a2657c4492f4507 (diff) | |
parent | 1059680510215830da7e2eb91e72e4623d460d19 (diff) | |
download | egawk-9d8bd17c58e8fc74d4ad80b199d5ea1d5cbd2bce.tar.gz egawk-9d8bd17c58e8fc74d4ad80b199d5ea1d5cbd2bce.tar.bz2 egawk-9d8bd17c58e8fc74d4ad80b199d5ea1d5cbd2bce.zip |
Merge branch 'gawk-4.1-stable'
-rw-r--r-- | ChangeLog | 9 | ||||
-rw-r--r-- | builtin.c | 12 | ||||
-rw-r--r-- | doc/ChangeLog | 5 | ||||
-rw-r--r-- | doc/gawk.info | 1160 | ||||
-rw-r--r-- | doc/gawk.texi | 55 | ||||
-rw-r--r-- | doc/gawktexi.in | 55 |
6 files changed, 648 insertions, 648 deletions
@@ -1,3 +1,12 @@ +2014-08-13 Arnold D. Robbins <arnold@skeeve.com> + + * builtin.c (do_sub): Move initial allocation of the replacement + string down towards code to do the replacement, with a (we hope) + better guesstimate of how much to initially allocate. The idea + is to avoid unnecessary realloc() calls by making a better guess + at how much to allocate. This came up in an email discussion + with Tom Dickey about mawk's gsub(). + 2014-08-12 Juergen Kahrs <jkahrs@users.sourceforge.net> * cmake/configure.cmake: @@ -2847,16 +2847,11 @@ set_how_many: text = t->stptr; textlen = t->stlen; - buflen = textlen + 2; repl = s->stptr; replend = repl + s->stlen; repllen = replend - repl; - emalloc(buf, char *, buflen + 2, "do_sub"); - buf[buflen] = '\0'; - buf[buflen + 1] = '\0'; - ampersands = 0; /* @@ -2915,6 +2910,13 @@ set_how_many: } lastmatchnonzero = false; + + /* guesstimate how much room to allocate; +2 forces > 0 */ + buflen = textlen + (ampersands + 1) * repllen + 2; + emalloc(buf, char *, buflen + 2, "do_sub"); + buf[buflen] = '\0'; + buf[buflen + 1] = '\0'; + bp = buf; for (current = 1;; current++) { matches++; diff --git a/doc/ChangeLog b/doc/ChangeLog index 82997ac8..71ab5e56 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,8 @@ +2014-08-13 Arnold D. Robbins <arnold@skeeve.com> + + * gawktexi.in: Starting on reviewer comments. + Update acknowledgements. + 2014-08-12 Arnold D. Robbins <arnold@skeeve.com> * gawktexi.in: Cause div.awk to get into the example files. diff --git a/doc/gawk.info b/doc/gawk.info index 076a2f34..07c6abb9 100644 --- a/doc/gawk.info +++ b/doc/gawk.info @@ -1159,13 +1159,6 @@ system for Intel(R), Power Architecture, Sun SPARC, IBM S/390, and other systems.(2) Many GNU/Linux distributions are available for download from the Internet. - (There are numerous other freely available, Unix-like operating -systems based on the Berkeley Software Distribution, and some of them -use recent versions of `gawk' for their versions of `awk'. NetBSD -(http://www.netbsd.org), FreeBSD (http://www.freebsd.org), and OpenBSD -(http://www.openbsd.org) are three of the most popular ones, but there -are others.) - The Info file itself has gone through a number of previous editions. Paul Rubin wrote the very first draft of `The GAWK Manual'; it was around 40 pages in size. Diane Close and Richard Stallman improved it, @@ -1300,16 +1293,26 @@ be a pleasure working with this team of fine people. Notable code and documentation contributions were made by a number of people. *Note Contributors::, for the full list. - Thanks to Patrice Dumas for the new `makeinfo' program. Thanks to + Thanks to Patrice Dumas for the new `makeinfo' program. Thanks to Karl Berry who continues to work to keep the Texinfo markup language sane. + Robert P.J. Day, Michael Brennan and Brian Kernighan kindly acted as +reviewers for the 2015 edition of this Info file. Their feedback helped +improve the final work. + I would like to thank Brian Kernighan for invaluable assistance during the testing and debugging of `gawk', and for ongoing help and advice in clarifying numerous points about the language. We could not have done nearly as good a job on either `gawk' or its documentation without his help. + Brian is in a class by himself as a programmer and technical author. +I have to thank him (yet again) for his ongoing friendship and the +role-model he has been for me for close to 30 years! Having him as a +reviewer is an exciting privilege. It has also been extremely +humbling... + I must thank my wonderful wife, Miriam, for her patience through the many versions of this project, for her proofreading, and for sharing me with the computer. I would like to thank my parents for their love, @@ -1927,12 +1930,13 @@ different ways to do the same things shown here: * Print the length of the longest line in `data': - expand data | awk '{ if (x < length()) x = length() } + expand data | awk '{ if (x < length($0)) x = length($0) } END { print "maximum line length is " x }' + This example differs slightly from the first example in this list: The input is processed by the `expand' utility to change TABs into spaces, so the widths compared are actually the right-margin - columns. + columns, as opposed to the number of input characters on each line. * Print every line that has at least one field: @@ -6779,9 +6783,9 @@ message to standard error in an `awk' program is as follows: This works by opening a pipeline to a shell command that can access the standard error stream that it inherits from the `awk' process. This is -far from elegant, and it is also inefficient, because it requires a -separate process. So people writing `awk' programs often don't do -this. Instead, they send the error messages to the screen, like this: +far from elegant, and it also requires a separate process. So people +writing `awk' programs often don't do this. Instead, they send the +error messages to the screen, like this: print "Serious error detected!" > "/dev/tty" @@ -7796,8 +7800,9 @@ Otherwise, it's parsed as follows: => -12 (-24) => -12-24 - As mentioned earlier, when doing concatenation, _parenthesize_. -Otherwise, you're never quite sure what you'll get. + As mentioned earlier, when mixing concatenation with other +operators, _parenthesize_. Otherwise, you're never quite sure what +you'll get. ---------- Footnotes ---------- @@ -8131,16 +8136,11 @@ File: gawk.info, Node: Variable Typing, Next: Comparison Operators, Up: Typin 6.3.2.1 String Type Versus Numeric Type ....................................... -The 1992 POSIX standard introduced the concept of a "numeric string", -which is simply a string that looks like a number--for example, -`" +2"'. This concept is used for determining the type of a variable. -The type of the variable is important because the types of two variables -determine how they are compared. - - The various versions of the POSIX standard did not get the rules -quite right for several editions. Fortunately, as of at least the 2008 -standard (and possibly earlier), the standard has been fixed, and -variable typing follows these rules:(1) +The POSIX standard introduced the concept of a "numeric string", which +is simply a string that looks like a number--for example, `" +2"'. +This concept is used for determining the type of a variable. The type +of the variable is important because the types of two variables +determine how they are compared. Variable typing follows these rules: * A numeric constant or the result of a numeric operation has the NUMERIC attribute. @@ -8218,11 +8218,6 @@ comparison between the two different constants is true, `0' otherwise: $ echo ' +3.14' | gawk '{ print $1 == 3.14 }' True -| 1 - ---------- Footnotes ---------- - - (1) `gawk' has followed these rules for many years, and it is -gratifying that the POSIX standard is also now correct. - File: gawk.info, Node: Comparison Operators, Next: POSIX String Comparison, Prev: Variable Typing, Up: Typing and Comparison @@ -11711,7 +11706,8 @@ brackets ([ ]): `log(X)' Return the natural logarithm of X, if X is positive; otherwise, - report an error. + return `NaN' ("not a number") on IEEE 754 systems. Additionally, + `gawk' prints a warning message when `x' is negative. `rand()' Return a random number. The values of `rand()' are uniformly @@ -31238,7 +31234,6 @@ Index * algorithms: Basic High Level. (line 68) * allocating memory for extensions: Memory Allocation Functions. (line 6) -* Alpha (DEC): Manual History. (line 28) * amazing awk assembler (aaa): Glossary. (line 11) * amazingly workable formatter (awf): Glossary. (line 24) * ambiguity, syntactic: /= operator vs. /=.../ regexp constant: Assignment Ops. @@ -31654,7 +31649,7 @@ Index (line 131) * close() function, two-way pipes and: Two-way I/O. (line 77) * Close, Diane <1>: Contributors. (line 20) -* Close, Diane: Manual History. (line 41) +* Close, Diane: Manual History. (line 34) * Collado, Manuel: Acknowledgments. (line 60) * collating elements: Bracket Expressions. (line 77) * collating symbols: Bracket Expressions. (line 84) @@ -32440,7 +32435,7 @@ Index (line 47) * functions, user-defined, next/nextfile statements and: Next Statement. (line 45) -* G-d: Acknowledgments. (line 82) +* G-d: Acknowledgments. (line 92) * Garfinkle, Scott: Contributors. (line 34) * gawk program, dynamic profiling: Profiling. (line 179) * gawk version: Auto-set. (line 207) @@ -32766,7 +32761,7 @@ Index * 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 76) +* Kernighan, Brian <9>: Acknowledgments. (line 80) * Kernighan, Brian <10>: Conventions. (line 34) * Kernighan, Brian: History. (line 17) * kill command, dynamic profiling: Profiling. (line 188) @@ -33320,12 +33315,12 @@ Index * Rakitzis, Byron: History Sorting. (line 25) * Ramey, Chet <1>: General Data Types. (line 6) * Ramey, Chet: Acknowledgments. (line 60) -* rand: Numeric Functions. (line 49) +* rand: Numeric Functions. (line 50) * random numbers, Cliff: Cliff Random Function. (line 6) * random numbers, rand()/srand() functions: Numeric Functions. - (line 49) -* random numbers, seed of: Numeric Functions. (line 79) + (line 50) +* random numbers, seed of: Numeric Functions. (line 80) * range expressions (regexps): Bracket Expressions. (line 6) * range patterns: Ranges. (line 6) * range patterns, line continuation and: Ranges. (line 65) @@ -33447,11 +33442,11 @@ Index * Robbins, Arnold: Command Line Field Separator. (line 73) * Robbins, Bill: Getline/Pipe. (line 39) -* Robbins, Harry: Acknowledgments. (line 82) -* Robbins, Jean: Acknowledgments. (line 82) +* Robbins, Harry: Acknowledgments. (line 92) +* Robbins, Jean: Acknowledgments. (line 92) * Robbins, Miriam <1>: Passwd Functions. (line 90) * Robbins, Miriam <2>: Getline/Pipe. (line 39) -* Robbins, Miriam: Acknowledgments. (line 82) +* Robbins, Miriam: Acknowledgments. (line 92) * Rommel, Kai Uwe: Contributors. (line 42) * round to nearest integer: Numeric Functions. (line 38) * round() user-defined function: Round Function. (line 16) @@ -33503,7 +33498,7 @@ Index * sed utility <2>: Simple Sed. (line 6) * sed utility: Field Splitting Summary. (line 46) -* seeding random number generator: Numeric Functions. (line 79) +* seeding random number generator: Numeric Functions. (line 80) * semicolon (;), AWKPATH variable and: PC Using. (line 10) * semicolon (;), separating statements in actions <1>: Statements. (line 10) @@ -33605,8 +33600,8 @@ Index * SIGUSR1 signal, for dynamic profiling: Profiling. (line 188) * silent debugger command: Debugger Execution Control. (line 10) -* sin: Numeric Functions. (line 90) -* sine: Numeric Functions. (line 90) +* sin: Numeric Functions. (line 91) +* sine: Numeric Functions. (line 91) * single quote ('): One-shot. (line 15) * single quote (') in gawk command lines: Long. (line 33) * single quote ('), in shell commands: Quoting. (line 48) @@ -33656,10 +33651,10 @@ Index * sprintf() function, OFMT variable and: User-modified. (line 114) * sprintf() function, print/printf statements and: Round Function. (line 6) -* sqrt: Numeric Functions. (line 93) +* sqrt: Numeric Functions. (line 94) * square brackets ([]), regexp operator: Regexp Operators. (line 56) -* square root: Numeric Functions. (line 93) -* srand: Numeric Functions. (line 97) +* square root: Numeric Functions. (line 94) +* srand: Numeric Functions. (line 98) * stack frame: Debugging Terms. (line 10) * Stallman, Richard <1>: Glossary. (line 296) * Stallman, Richard <2>: Contributors. (line 23) @@ -34012,541 +34007,540 @@ Node: This Manual53600 Ref: This Manual-Footnote-159379 Node: Conventions59479 Node: Manual History61635 -Ref: Manual History-Footnote-165074 -Ref: Manual History-Footnote-265115 -Node: How To Contribute65189 -Node: Acknowledgments66428 -Node: Getting Started70724 -Node: Running gawk73158 -Node: One-shot74348 -Node: Read Terminal75573 -Ref: Read Terminal-Footnote-177223 -Ref: Read Terminal-Footnote-277499 -Node: Long77670 -Node: Executable Scripts79046 -Ref: Executable Scripts-Footnote-180879 -Ref: Executable Scripts-Footnote-280981 -Node: Comments81528 -Node: Quoting84001 -Node: DOS Quoting89317 -Node: Sample Data Files89992 -Node: Very Simple92507 -Node: Two Rules97145 -Node: More Complex99039 -Ref: More Complex-Footnote-1101971 -Node: Statements/Lines102056 -Ref: Statements/Lines-Footnote-1106512 -Node: Other Features106777 -Node: When107705 -Node: Intro Summary109875 -Node: Invoking Gawk110641 -Node: Command Line112156 -Node: Options112947 -Ref: Options-Footnote-1128647 -Node: Other Arguments128672 -Node: Naming Standard Input131334 -Node: Environment Variables132428 -Node: AWKPATH Variable132986 -Ref: AWKPATH Variable-Footnote-1135858 -Ref: AWKPATH Variable-Footnote-2135903 -Node: AWKLIBPATH Variable136163 -Node: Other Environment Variables136922 -Node: Exit Status140372 -Node: Include Files141047 -Node: Loading Shared Libraries144625 -Node: Obsolete146009 -Node: Undocumented146706 -Node: Invoking Summary146973 -Node: Regexp148553 -Node: Regexp Usage150003 -Node: Escape Sequences152036 -Node: Regexp Operators157703 -Ref: Regexp Operators-Footnote-1165183 -Ref: Regexp Operators-Footnote-2165330 -Node: Bracket Expressions165428 -Ref: table-char-classes167318 -Node: GNU Regexp Operators170258 -Node: Case-sensitivity173981 -Ref: Case-sensitivity-Footnote-1176873 -Ref: Case-sensitivity-Footnote-2177108 -Node: Leftmost Longest177216 -Node: Computed Regexps178417 -Node: Regexp Summary181789 -Node: Reading Files183260 -Node: Records185352 -Node: awk split records186095 -Node: gawk split records190953 -Ref: gawk split records-Footnote-1195474 -Node: Fields195511 -Ref: Fields-Footnote-1198475 -Node: Nonconstant Fields198561 -Ref: Nonconstant Fields-Footnote-1200791 -Node: Changing Fields200993 -Node: Field Separators206947 -Node: Default Field Splitting209649 -Node: Regexp Field Splitting210766 -Node: Single Character Fields214107 -Node: Command Line Field Separator215166 -Node: Full Line Fields218508 -Ref: Full Line Fields-Footnote-1219016 -Node: Field Splitting Summary219062 -Ref: Field Splitting Summary-Footnote-1222161 -Node: Constant Size222262 -Node: Splitting By Content226869 -Ref: Splitting By Content-Footnote-1230619 -Node: Multiple Line230659 -Ref: Multiple Line-Footnote-1236515 -Node: Getline236694 -Node: Plain Getline238910 -Node: Getline/Variable241005 -Node: Getline/File242152 -Node: Getline/Variable/File243536 -Ref: Getline/Variable/File-Footnote-1245135 -Node: Getline/Pipe245222 -Node: Getline/Variable/Pipe247921 -Node: Getline/Coprocess249028 -Node: Getline/Variable/Coprocess250280 -Node: Getline Notes251017 -Node: Getline Summary253821 -Ref: table-getline-variants254229 -Node: Read Timeout255141 -Ref: Read Timeout-Footnote-1258968 -Node: Command line directories259026 -Node: Input Summary259930 -Node: Input Exercises263067 -Node: Printing263800 -Node: Print265522 -Node: Print Examples266863 -Node: Output Separators269642 -Node: OFMT271658 -Node: Printf273016 -Node: Basic Printf273922 -Node: Control Letters275461 -Node: Format Modifiers279452 -Node: Printf Examples285479 -Node: Redirection287943 -Node: Special Files294915 -Node: Special FD295446 -Ref: Special FD-Footnote-1299070 -Node: Special Network299144 -Node: Special Caveats299994 -Node: Close Files And Pipes300790 -Ref: Close Files And Pipes-Footnote-1307951 -Ref: Close Files And Pipes-Footnote-2308099 -Node: Output Summary308249 -Node: Output exercises309246 -Node: Expressions309926 -Node: Values311111 -Node: Constants311787 -Node: Scalar Constants312467 -Ref: Scalar Constants-Footnote-1313326 -Node: Nondecimal-numbers313576 -Node: Regexp Constants316576 -Node: Using Constant Regexps317051 -Node: Variables320121 -Node: Using Variables320776 -Node: Assignment Options322500 -Node: Conversion324375 -Node: Strings And Numbers324899 -Ref: Strings And Numbers-Footnote-1327961 -Node: Locale influences conversions328070 -Ref: table-locale-affects330787 -Node: All Operators331375 -Node: Arithmetic Ops332005 -Node: Concatenation334510 -Ref: Concatenation-Footnote-1337306 -Node: Assignment Ops337426 -Ref: table-assign-ops342409 -Node: Increment Ops343726 -Node: Truth Values and Conditions347164 -Node: Truth Values348247 -Node: Typing and Comparison349296 -Node: Variable Typing350089 -Ref: Variable Typing-Footnote-1353989 -Node: Comparison Operators354111 -Ref: table-relational-ops354521 -Node: POSIX String Comparison358071 -Ref: POSIX String Comparison-Footnote-1359155 -Node: Boolean Ops359293 -Ref: Boolean Ops-Footnote-1363363 -Node: Conditional Exp363454 -Node: Function Calls365181 -Node: Precedence369061 -Node: Locales372730 -Node: Expressions Summary374361 -Node: Patterns and Actions376902 -Node: Pattern Overview378018 -Node: Regexp Patterns379695 -Node: Expression Patterns380238 -Node: Ranges384019 -Node: BEGIN/END387125 -Node: Using BEGIN/END387887 -Ref: Using BEGIN/END-Footnote-1390623 -Node: I/O And BEGIN/END390729 -Node: BEGINFILE/ENDFILE393014 -Node: Empty395945 -Node: Using Shell Variables396262 -Node: Action Overview398545 -Node: Statements400872 -Node: If Statement402720 -Node: While Statement404218 -Node: Do Statement406262 -Node: For Statement407418 -Node: Switch Statement410570 -Node: Break Statement412673 -Node: Continue Statement414728 -Node: Next Statement416521 -Node: Nextfile Statement418911 -Node: Exit Statement421566 -Node: Built-in Variables423970 -Node: User-modified425097 -Ref: User-modified-Footnote-1432786 -Node: Auto-set432848 -Ref: Auto-set-Footnote-1445767 -Ref: Auto-set-Footnote-2445972 -Node: ARGC and ARGV446028 -Node: Pattern Action Summary449882 -Node: Arrays452105 -Node: Array Basics453654 -Node: Array Intro454480 -Ref: figure-array-elements456453 -Node: Reference to Elements458860 -Node: Assigning Elements461133 -Node: Array Example461624 -Node: Scanning an Array463356 -Node: Controlling Scanning466371 -Ref: Controlling Scanning-Footnote-1471544 -Node: Delete471860 -Ref: Delete-Footnote-1474625 -Node: Numeric Array Subscripts474682 -Node: Uninitialized Subscripts476865 -Node: Multidimensional478490 -Node: Multiscanning481583 -Node: Arrays of Arrays483172 -Node: Arrays Summary487835 -Node: Functions489940 -Node: Built-in490813 -Node: Calling Built-in491891 -Node: Numeric Functions493879 -Ref: Numeric Functions-Footnote-1498515 -Ref: Numeric Functions-Footnote-2498872 -Ref: Numeric Functions-Footnote-3498920 -Node: String Functions499189 -Ref: String Functions-Footnote-1522200 -Ref: String Functions-Footnote-2522329 -Ref: String Functions-Footnote-3522577 -Node: Gory Details522664 -Ref: table-sub-escapes524333 -Ref: table-sub-posix-92525687 -Ref: table-sub-proposed527038 -Ref: table-posix-sub528392 -Ref: table-gensub-escapes529937 -Ref: Gory Details-Footnote-1531113 -Ref: Gory Details-Footnote-2531164 -Node: I/O Functions531315 -Ref: I/O Functions-Footnote-1538438 -Node: Time Functions538585 -Ref: Time Functions-Footnote-1549049 -Ref: Time Functions-Footnote-2549117 -Ref: Time Functions-Footnote-3549275 -Ref: Time Functions-Footnote-4549386 -Ref: Time Functions-Footnote-5549498 -Ref: Time Functions-Footnote-6549725 -Node: Bitwise Functions549991 -Ref: table-bitwise-ops550553 -Ref: Bitwise Functions-Footnote-1554798 -Node: Type Functions554982 -Node: I18N Functions556124 -Node: User-defined557769 -Node: Definition Syntax558573 -Ref: Definition Syntax-Footnote-1563752 -Node: Function Example563821 -Ref: Function Example-Footnote-1566465 -Node: Function Caveats566487 -Node: Calling A Function567005 -Node: Variable Scope567960 -Node: Pass By Value/Reference570948 -Node: Return Statement574456 -Node: Dynamic Typing577440 -Node: Indirect Calls578369 -Node: Functions Summary588082 -Node: Library Functions590621 -Ref: Library Functions-Footnote-1594239 -Ref: Library Functions-Footnote-2594382 -Node: Library Names594553 -Ref: Library Names-Footnote-1598026 -Ref: Library Names-Footnote-2598246 -Node: General Functions598332 -Node: Strtonum Function599360 -Node: Assert Function602140 -Node: Round Function605466 -Node: Cliff Random Function607007 -Node: Ordinal Functions608023 -Ref: Ordinal Functions-Footnote-1611100 -Ref: Ordinal Functions-Footnote-2611352 -Node: Join Function611563 -Ref: Join Function-Footnote-1613334 -Node: Getlocaltime Function613534 -Node: Readfile Function617270 -Node: Data File Management619109 -Node: Filetrans Function619741 -Node: Rewind Function623810 -Node: File Checking625368 -Ref: File Checking-Footnote-1626500 -Node: Empty Files626701 -Node: Ignoring Assigns628680 -Node: Getopt Function630234 -Ref: Getopt Function-Footnote-1641537 -Node: Passwd Functions641740 -Ref: Passwd Functions-Footnote-1650719 -Node: Group Functions650807 -Ref: Group Functions-Footnote-1658748 -Node: Walking Arrays658961 -Node: Library Functions Summary660564 -Node: Library exercises661952 -Node: Sample Programs663232 -Node: Running Examples664002 -Node: Clones664730 -Node: Cut Program665954 -Node: Egrep Program675822 -Ref: Egrep Program-Footnote-1683793 -Node: Id Program683903 -Node: Split Program687567 -Ref: Split Program-Footnote-1691105 -Node: Tee Program691233 -Node: Uniq Program694040 -Node: Wc Program701470 -Ref: Wc Program-Footnote-1705735 -Node: Miscellaneous Programs705827 -Node: Dupword Program707040 -Node: Alarm Program709071 -Node: Translate Program713885 -Ref: Translate Program-Footnote-1718276 -Ref: Translate Program-Footnote-2718546 -Node: Labels Program718680 -Ref: Labels Program-Footnote-1722051 -Node: Word Sorting722135 -Node: History Sorting726178 -Node: Extract Program728014 -Node: Simple Sed735550 -Node: Igawk Program738612 -Ref: Igawk Program-Footnote-1752923 -Ref: Igawk Program-Footnote-2753124 -Node: Anagram Program753262 -Node: Signature Program756330 -Node: Programs Summary757577 -Node: Programs Exercises758792 -Node: Advanced Features762443 -Node: Nondecimal Data764391 -Node: Array Sorting765968 -Node: Controlling Array Traversal766665 -Node: Array Sorting Functions774945 -Ref: Array Sorting Functions-Footnote-1778852 -Node: Two-way I/O779046 -Ref: Two-way I/O-Footnote-1784562 -Node: TCP/IP Networking784644 -Node: Profiling787488 -Node: Advanced Features Summary795039 -Node: Internationalization796903 -Node: I18N and L10N798383 -Node: Explaining gettext799069 -Ref: Explaining gettext-Footnote-1804209 -Ref: Explaining gettext-Footnote-2804393 -Node: Programmer i18n804558 -Node: Translator i18n808783 -Node: String Extraction809577 -Ref: String Extraction-Footnote-1810538 -Node: Printf Ordering810624 -Ref: Printf Ordering-Footnote-1813406 -Node: I18N Portability813470 -Ref: I18N Portability-Footnote-1815919 -Node: I18N Example815982 -Ref: I18N Example-Footnote-1818704 -Node: Gawk I18N818776 -Node: I18N Summary819414 -Node: Debugger820753 -Node: Debugging821775 -Node: Debugging Concepts822216 -Node: Debugging Terms824072 -Node: Awk Debugging826669 -Node: Sample Debugging Session827561 -Node: Debugger Invocation828081 -Node: Finding The Bug829414 -Node: List of Debugger Commands835896 -Node: Breakpoint Control837228 -Node: Debugger Execution Control840892 -Node: Viewing And Changing Data844252 -Node: Execution Stack847610 -Node: Debugger Info849123 -Node: Miscellaneous Debugger Commands853117 -Node: Readline Support858301 -Node: Limitations859193 -Node: Debugging Summary861467 -Node: Arbitrary Precision Arithmetic862631 -Node: Computer Arithmetic863960 -Ref: Computer Arithmetic-Footnote-1868347 -Node: Math Definitions868404 -Ref: table-ieee-formats871288 -Node: MPFR features871792 -Node: FP Math Caution873434 -Ref: FP Math Caution-Footnote-1874475 -Node: Inexactness of computations874844 -Node: Inexact representation875792 -Node: Comparing FP Values877147 -Node: Errors accumulate878111 -Node: Getting Accuracy879544 -Node: Try To Round882203 -Node: Setting precision883102 -Ref: table-predefined-precision-strings883784 -Node: Setting the rounding mode885577 -Ref: table-gawk-rounding-modes885941 -Ref: Setting the rounding mode-Footnote-1889395 -Node: Arbitrary Precision Integers889574 -Ref: Arbitrary Precision Integers-Footnote-1893369 -Node: POSIX Floating Point Problems893518 -Ref: POSIX Floating Point Problems-Footnote-1897394 -Node: Floating point summary897432 -Node: Dynamic Extensions899649 -Node: Extension Intro901201 -Node: Plugin License902466 -Node: Extension Mechanism Outline903151 -Ref: figure-load-extension903575 -Ref: figure-load-new-function905060 -Ref: figure-call-new-function906062 -Node: Extension API Description908046 -Node: Extension API Functions Introduction909496 -Node: General Data Types914361 -Ref: General Data Types-Footnote-1920054 -Node: Requesting Values920353 -Ref: table-value-types-returned921090 -Node: Memory Allocation Functions922048 -Ref: Memory Allocation Functions-Footnote-1924795 -Node: Constructor Functions924891 -Node: Registration Functions926649 -Node: Extension Functions927334 -Node: Exit Callback Functions929636 -Node: Extension Version String930885 -Node: Input Parsers931535 -Node: Output Wrappers941349 -Node: Two-way processors945865 -Node: Printing Messages948069 -Ref: Printing Messages-Footnote-1949146 -Node: Updating `ERRNO'949298 -Node: Accessing Parameters950037 -Node: Symbol Table Access951267 -Node: Symbol table by name951781 -Node: Symbol table by cookie953757 -Ref: Symbol table by cookie-Footnote-1957890 -Node: Cached values957953 -Ref: Cached values-Footnote-1961457 -Node: Array Manipulation961548 -Ref: Array Manipulation-Footnote-1962646 -Node: Array Data Types962685 -Ref: Array Data Types-Footnote-1965388 -Node: Array Functions965480 -Node: Flattening Arrays969354 -Node: Creating Arrays976206 -Node: Extension API Variables980937 -Node: Extension Versioning981573 -Node: Extension API Informational Variables983474 -Node: Extension API Boilerplate984560 -Node: Finding Extensions988364 -Node: Extension Example988924 -Node: Internal File Description989654 -Node: Internal File Ops993745 -Ref: Internal File Ops-Footnote-11005177 -Node: Using Internal File Ops1005317 -Ref: Using Internal File Ops-Footnote-11007664 -Node: Extension Samples1007932 -Node: Extension Sample File Functions1009456 -Node: Extension Sample Fnmatch1017024 -Node: Extension Sample Fork1018506 -Node: Extension Sample Inplace1019719 -Node: Extension Sample Ord1021394 -Node: Extension Sample Readdir1022230 -Ref: table-readdir-file-types1023086 -Node: Extension Sample Revout1023885 -Node: Extension Sample Rev2way1024476 -Node: Extension Sample Read write array1025217 -Node: Extension Sample Readfile1027096 -Node: Extension Sample API Tests1028196 -Node: Extension Sample Time1028721 -Node: gawkextlib1030036 -Node: Extension summary1032849 -Node: Extension Exercises1036542 -Node: Language History1037264 -Node: V7/SVR3.11038907 -Node: SVR41041227 -Node: POSIX1042669 -Node: BTL1044055 -Node: POSIX/GNU1044789 -Node: Feature History1050532 -Node: Common Extensions1063662 -Node: Ranges and Locales1064974 -Ref: Ranges and Locales-Footnote-11069591 -Ref: Ranges and Locales-Footnote-21069618 -Ref: Ranges and Locales-Footnote-31069852 -Node: Contributors1070073 -Node: History summary1075498 -Node: Installation1076867 -Node: Gawk Distribution1077818 -Node: Getting1078302 -Node: Extracting1079126 -Node: Distribution contents1080768 -Node: Unix Installation1086538 -Node: Quick Installation1087155 -Node: Additional Configuration Options1089597 -Node: Configuration Philosophy1091335 -Node: Non-Unix Installation1093686 -Node: PC Installation1094144 -Node: PC Binary Installation1095455 -Node: PC Compiling1097303 -Ref: PC Compiling-Footnote-11100302 -Node: PC Testing1100407 -Node: PC Using1101583 -Node: Cygwin1105741 -Node: MSYS1106550 -Node: VMS Installation1107064 -Node: VMS Compilation1107860 -Ref: VMS Compilation-Footnote-11109082 -Node: VMS Dynamic Extensions1109140 -Node: VMS Installation Details1110513 -Node: VMS Running1112765 -Node: VMS GNV1115599 -Node: VMS Old Gawk1116322 -Node: Bugs1116792 -Node: Other Versions1120796 -Node: Installation summary1127051 -Node: Notes1128107 -Node: Compatibility Mode1128972 -Node: Additions1129754 -Node: Accessing The Source1130679 -Node: Adding Code1132115 -Node: New Ports1138293 -Node: Derived Files1142774 -Ref: Derived Files-Footnote-11147855 -Ref: Derived Files-Footnote-21147889 -Ref: Derived Files-Footnote-31148485 -Node: Future Extensions1148599 -Node: Implementation Limitations1149205 -Node: Extension Design1150453 -Node: Old Extension Problems1151607 -Ref: Old Extension Problems-Footnote-11153124 -Node: Extension New Mechanism Goals1153181 -Ref: Extension New Mechanism Goals-Footnote-11156541 -Node: Extension Other Design Decisions1156730 -Node: Extension Future Growth1158836 -Node: Old Extension Mechanism1159672 -Node: Notes summary1161434 -Node: Basic Concepts1162620 -Node: Basic High Level1163301 -Ref: figure-general-flow1163573 -Ref: figure-process-flow1164172 -Ref: Basic High Level-Footnote-11167401 -Node: Basic Data Typing1167586 -Node: Glossary1170914 -Node: Copying1196066 -Node: GNU Free Documentation License1233622 -Node: Index1258758 +Ref: Manual History-Footnote-164714 +Ref: Manual History-Footnote-264755 +Node: How To Contribute64829 +Node: Acknowledgments66068 +Node: Getting Started70816 +Node: Running gawk73250 +Node: One-shot74440 +Node: Read Terminal75665 +Ref: Read Terminal-Footnote-177315 +Ref: Read Terminal-Footnote-277591 +Node: Long77762 +Node: Executable Scripts79138 +Ref: Executable Scripts-Footnote-180971 +Ref: Executable Scripts-Footnote-281073 +Node: Comments81620 +Node: Quoting84093 +Node: DOS Quoting89409 +Node: Sample Data Files90084 +Node: Very Simple92599 +Node: Two Rules97372 +Node: More Complex99266 +Ref: More Complex-Footnote-1102198 +Node: Statements/Lines102283 +Ref: Statements/Lines-Footnote-1106739 +Node: Other Features107004 +Node: When107932 +Node: Intro Summary110102 +Node: Invoking Gawk110868 +Node: Command Line112383 +Node: Options113174 +Ref: Options-Footnote-1128874 +Node: Other Arguments128899 +Node: Naming Standard Input131561 +Node: Environment Variables132655 +Node: AWKPATH Variable133213 +Ref: AWKPATH Variable-Footnote-1136085 +Ref: AWKPATH Variable-Footnote-2136130 +Node: AWKLIBPATH Variable136390 +Node: Other Environment Variables137149 +Node: Exit Status140599 +Node: Include Files141274 +Node: Loading Shared Libraries144852 +Node: Obsolete146236 +Node: Undocumented146933 +Node: Invoking Summary147200 +Node: Regexp148780 +Node: Regexp Usage150230 +Node: Escape Sequences152263 +Node: Regexp Operators157930 +Ref: Regexp Operators-Footnote-1165410 +Ref: Regexp Operators-Footnote-2165557 +Node: Bracket Expressions165655 +Ref: table-char-classes167545 +Node: GNU Regexp Operators170485 +Node: Case-sensitivity174208 +Ref: Case-sensitivity-Footnote-1177100 +Ref: Case-sensitivity-Footnote-2177335 +Node: Leftmost Longest177443 +Node: Computed Regexps178644 +Node: Regexp Summary182016 +Node: Reading Files183487 +Node: Records185579 +Node: awk split records186322 +Node: gawk split records191180 +Ref: gawk split records-Footnote-1195701 +Node: Fields195738 +Ref: Fields-Footnote-1198702 +Node: Nonconstant Fields198788 +Ref: Nonconstant Fields-Footnote-1201018 +Node: Changing Fields201220 +Node: Field Separators207174 +Node: Default Field Splitting209876 +Node: Regexp Field Splitting210993 +Node: Single Character Fields214334 +Node: Command Line Field Separator215393 +Node: Full Line Fields218735 +Ref: Full Line Fields-Footnote-1219243 +Node: Field Splitting Summary219289 +Ref: Field Splitting Summary-Footnote-1222388 +Node: Constant Size222489 +Node: Splitting By Content227096 +Ref: Splitting By Content-Footnote-1230846 +Node: Multiple Line230886 +Ref: Multiple Line-Footnote-1236742 +Node: Getline236921 +Node: Plain Getline239137 +Node: Getline/Variable241232 +Node: Getline/File242379 +Node: Getline/Variable/File243763 +Ref: Getline/Variable/File-Footnote-1245362 +Node: Getline/Pipe245449 +Node: Getline/Variable/Pipe248148 +Node: Getline/Coprocess249255 +Node: Getline/Variable/Coprocess250507 +Node: Getline Notes251244 +Node: Getline Summary254048 +Ref: table-getline-variants254456 +Node: Read Timeout255368 +Ref: Read Timeout-Footnote-1259195 +Node: Command line directories259253 +Node: Input Summary260157 +Node: Input Exercises263294 +Node: Printing264027 +Node: Print265749 +Node: Print Examples267090 +Node: Output Separators269869 +Node: OFMT271885 +Node: Printf273243 +Node: Basic Printf274149 +Node: Control Letters275688 +Node: Format Modifiers279679 +Node: Printf Examples285706 +Node: Redirection288170 +Node: Special Files295142 +Node: Special FD295673 +Ref: Special FD-Footnote-1299270 +Node: Special Network299344 +Node: Special Caveats300194 +Node: Close Files And Pipes300990 +Ref: Close Files And Pipes-Footnote-1308151 +Ref: Close Files And Pipes-Footnote-2308299 +Node: Output Summary308449 +Node: Output exercises309446 +Node: Expressions310126 +Node: Values311311 +Node: Constants311987 +Node: Scalar Constants312667 +Ref: Scalar Constants-Footnote-1313526 +Node: Nondecimal-numbers313776 +Node: Regexp Constants316776 +Node: Using Constant Regexps317251 +Node: Variables320321 +Node: Using Variables320976 +Node: Assignment Options322700 +Node: Conversion324575 +Node: Strings And Numbers325099 +Ref: Strings And Numbers-Footnote-1328161 +Node: Locale influences conversions328270 +Ref: table-locale-affects330987 +Node: All Operators331575 +Node: Arithmetic Ops332205 +Node: Concatenation334710 +Ref: Concatenation-Footnote-1337529 +Node: Assignment Ops337649 +Ref: table-assign-ops342632 +Node: Increment Ops343949 +Node: Truth Values and Conditions347387 +Node: Truth Values348470 +Node: Typing and Comparison349519 +Node: Variable Typing350312 +Node: Comparison Operators353962 +Ref: table-relational-ops354372 +Node: POSIX String Comparison357922 +Ref: POSIX String Comparison-Footnote-1359006 +Node: Boolean Ops359144 +Ref: Boolean Ops-Footnote-1363214 +Node: Conditional Exp363305 +Node: Function Calls365032 +Node: Precedence368912 +Node: Locales372581 +Node: Expressions Summary374212 +Node: Patterns and Actions376753 +Node: Pattern Overview377869 +Node: Regexp Patterns379546 +Node: Expression Patterns380089 +Node: Ranges383870 +Node: BEGIN/END386976 +Node: Using BEGIN/END387738 +Ref: Using BEGIN/END-Footnote-1390474 +Node: I/O And BEGIN/END390580 +Node: BEGINFILE/ENDFILE392865 +Node: Empty395796 +Node: Using Shell Variables396113 +Node: Action Overview398396 +Node: Statements400723 +Node: If Statement402571 +Node: While Statement404069 +Node: Do Statement406113 +Node: For Statement407269 +Node: Switch Statement410421 +Node: Break Statement412524 +Node: Continue Statement414579 +Node: Next Statement416372 +Node: Nextfile Statement418762 +Node: Exit Statement421417 +Node: Built-in Variables423821 +Node: User-modified424948 +Ref: User-modified-Footnote-1432637 +Node: Auto-set432699 +Ref: Auto-set-Footnote-1445618 +Ref: Auto-set-Footnote-2445823 +Node: ARGC and ARGV445879 +Node: Pattern Action Summary449733 +Node: Arrays451956 +Node: Array Basics453505 +Node: Array Intro454331 +Ref: figure-array-elements456304 +Node: Reference to Elements458711 +Node: Assigning Elements460984 +Node: Array Example461475 +Node: Scanning an Array463207 +Node: Controlling Scanning466222 +Ref: Controlling Scanning-Footnote-1471395 +Node: Delete471711 +Ref: Delete-Footnote-1474476 +Node: Numeric Array Subscripts474533 +Node: Uninitialized Subscripts476716 +Node: Multidimensional478341 +Node: Multiscanning481434 +Node: Arrays of Arrays483023 +Node: Arrays Summary487686 +Node: Functions489791 +Node: Built-in490664 +Node: Calling Built-in491742 +Node: Numeric Functions493730 +Ref: Numeric Functions-Footnote-1498474 +Ref: Numeric Functions-Footnote-2498831 +Ref: Numeric Functions-Footnote-3498879 +Node: String Functions499148 +Ref: String Functions-Footnote-1522159 +Ref: String Functions-Footnote-2522288 +Ref: String Functions-Footnote-3522536 +Node: Gory Details522623 +Ref: table-sub-escapes524292 +Ref: table-sub-posix-92525646 +Ref: table-sub-proposed526997 +Ref: table-posix-sub528351 +Ref: table-gensub-escapes529896 +Ref: Gory Details-Footnote-1531072 +Ref: Gory Details-Footnote-2531123 +Node: I/O Functions531274 +Ref: I/O Functions-Footnote-1538397 +Node: Time Functions538544 +Ref: Time Functions-Footnote-1549008 +Ref: Time Functions-Footnote-2549076 +Ref: Time Functions-Footnote-3549234 +Ref: Time Functions-Footnote-4549345 +Ref: Time Functions-Footnote-5549457 +Ref: Time Functions-Footnote-6549684 +Node: Bitwise Functions549950 +Ref: table-bitwise-ops550512 +Ref: Bitwise Functions-Footnote-1554757 +Node: Type Functions554941 +Node: I18N Functions556083 +Node: User-defined557728 +Node: Definition Syntax558532 +Ref: Definition Syntax-Footnote-1563711 +Node: Function Example563780 +Ref: Function Example-Footnote-1566424 +Node: Function Caveats566446 +Node: Calling A Function566964 +Node: Variable Scope567919 +Node: Pass By Value/Reference570907 +Node: Return Statement574415 +Node: Dynamic Typing577399 +Node: Indirect Calls578328 +Node: Functions Summary588041 +Node: Library Functions590580 +Ref: Library Functions-Footnote-1594198 +Ref: Library Functions-Footnote-2594341 +Node: Library Names594512 +Ref: Library Names-Footnote-1597985 +Ref: Library Names-Footnote-2598205 +Node: General Functions598291 +Node: Strtonum Function599319 +Node: Assert Function602099 +Node: Round Function605425 +Node: Cliff Random Function606966 +Node: Ordinal Functions607982 +Ref: Ordinal Functions-Footnote-1611059 +Ref: Ordinal Functions-Footnote-2611311 +Node: Join Function611522 +Ref: Join Function-Footnote-1613293 +Node: Getlocaltime Function613493 +Node: Readfile Function617229 +Node: Data File Management619068 +Node: Filetrans Function619700 +Node: Rewind Function623769 +Node: File Checking625327 +Ref: File Checking-Footnote-1626459 +Node: Empty Files626660 +Node: Ignoring Assigns628639 +Node: Getopt Function630193 +Ref: Getopt Function-Footnote-1641496 +Node: Passwd Functions641699 +Ref: Passwd Functions-Footnote-1650678 +Node: Group Functions650766 +Ref: Group Functions-Footnote-1658707 +Node: Walking Arrays658920 +Node: Library Functions Summary660523 +Node: Library exercises661911 +Node: Sample Programs663191 +Node: Running Examples663961 +Node: Clones664689 +Node: Cut Program665913 +Node: Egrep Program675781 +Ref: Egrep Program-Footnote-1683752 +Node: Id Program683862 +Node: Split Program687526 +Ref: Split Program-Footnote-1691064 +Node: Tee Program691192 +Node: Uniq Program693999 +Node: Wc Program701429 +Ref: Wc Program-Footnote-1705694 +Node: Miscellaneous Programs705786 +Node: Dupword Program706999 +Node: Alarm Program709030 +Node: Translate Program713844 +Ref: Translate Program-Footnote-1718235 +Ref: Translate Program-Footnote-2718505 +Node: Labels Program718639 +Ref: Labels Program-Footnote-1722010 +Node: Word Sorting722094 +Node: History Sorting726137 +Node: Extract Program727973 +Node: Simple Sed735509 +Node: Igawk Program738571 +Ref: Igawk Program-Footnote-1752882 +Ref: Igawk Program-Footnote-2753083 +Node: Anagram Program753221 +Node: Signature Program756289 +Node: Programs Summary757536 +Node: Programs Exercises758751 +Node: Advanced Features762402 +Node: Nondecimal Data764350 +Node: Array Sorting765927 +Node: Controlling Array Traversal766624 +Node: Array Sorting Functions774904 +Ref: Array Sorting Functions-Footnote-1778811 +Node: Two-way I/O779005 +Ref: Two-way I/O-Footnote-1784521 +Node: TCP/IP Networking784603 +Node: Profiling787447 +Node: Advanced Features Summary794998 +Node: Internationalization796862 +Node: I18N and L10N798342 +Node: Explaining gettext799028 +Ref: Explaining gettext-Footnote-1804168 +Ref: Explaining gettext-Footnote-2804352 +Node: Programmer i18n804517 +Node: Translator i18n808742 +Node: String Extraction809536 +Ref: String Extraction-Footnote-1810497 +Node: Printf Ordering810583 +Ref: Printf Ordering-Footnote-1813365 +Node: I18N Portability813429 +Ref: I18N Portability-Footnote-1815878 +Node: I18N Example815941 +Ref: I18N Example-Footnote-1818663 +Node: Gawk I18N818735 +Node: I18N Summary819373 +Node: Debugger820712 +Node: Debugging821734 +Node: Debugging Concepts822175 +Node: Debugging Terms824031 +Node: Awk Debugging826628 +Node: Sample Debugging Session827520 +Node: Debugger Invocation828040 +Node: Finding The Bug829373 +Node: List of Debugger Commands835855 +Node: Breakpoint Control837187 +Node: Debugger Execution Control840851 +Node: Viewing And Changing Data844211 +Node: Execution Stack847569 +Node: Debugger Info849082 +Node: Miscellaneous Debugger Commands853076 +Node: Readline Support858260 +Node: Limitations859152 +Node: Debugging Summary861426 +Node: Arbitrary Precision Arithmetic862590 +Node: Computer Arithmetic863919 +Ref: Computer Arithmetic-Footnote-1868306 +Node: Math Definitions868363 +Ref: table-ieee-formats871247 +Node: MPFR features871751 +Node: FP Math Caution873393 +Ref: FP Math Caution-Footnote-1874434 +Node: Inexactness of computations874803 +Node: Inexact representation875751 +Node: Comparing FP Values877106 +Node: Errors accumulate878070 +Node: Getting Accuracy879503 +Node: Try To Round882162 +Node: Setting precision883061 +Ref: table-predefined-precision-strings883743 +Node: Setting the rounding mode885536 +Ref: table-gawk-rounding-modes885900 +Ref: Setting the rounding mode-Footnote-1889354 +Node: Arbitrary Precision Integers889533 +Ref: Arbitrary Precision Integers-Footnote-1893328 +Node: POSIX Floating Point Problems893477 +Ref: POSIX Floating Point Problems-Footnote-1897353 +Node: Floating point summary897391 +Node: Dynamic Extensions899608 +Node: Extension Intro901160 +Node: Plugin License902425 +Node: Extension Mechanism Outline903110 +Ref: figure-load-extension903534 +Ref: figure-load-new-function905019 +Ref: figure-call-new-function906021 +Node: Extension API Description908005 +Node: Extension API Functions Introduction909455 +Node: General Data Types914320 +Ref: General Data Types-Footnote-1920013 +Node: Requesting Values920312 +Ref: table-value-types-returned921049 +Node: Memory Allocation Functions922007 +Ref: Memory Allocation Functions-Footnote-1924754 +Node: Constructor Functions924850 +Node: Registration Functions926608 +Node: Extension Functions927293 +Node: Exit Callback Functions929595 +Node: Extension Version String930844 +Node: Input Parsers931494 +Node: Output Wrappers941308 +Node: Two-way processors945824 +Node: Printing Messages948028 +Ref: Printing Messages-Footnote-1949105 +Node: Updating `ERRNO'949257 +Node: Accessing Parameters949996 +Node: Symbol Table Access951226 +Node: Symbol table by name951740 +Node: Symbol table by cookie953716 +Ref: Symbol table by cookie-Footnote-1957849 +Node: Cached values957912 +Ref: Cached values-Footnote-1961416 +Node: Array Manipulation961507 +Ref: Array Manipulation-Footnote-1962605 +Node: Array Data Types962644 +Ref: Array Data Types-Footnote-1965347 +Node: Array Functions965439 +Node: Flattening Arrays969313 +Node: Creating Arrays976165 +Node: Extension API Variables980896 +Node: Extension Versioning981532 +Node: Extension API Informational Variables983433 +Node: Extension API Boilerplate984519 +Node: Finding Extensions988323 +Node: Extension Example988883 +Node: Internal File Description989613 +Node: Internal File Ops993704 +Ref: Internal File Ops-Footnote-11005136 +Node: Using Internal File Ops1005276 +Ref: Using Internal File Ops-Footnote-11007623 +Node: Extension Samples1007891 +Node: Extension Sample File Functions1009415 +Node: Extension Sample Fnmatch1016983 +Node: Extension Sample Fork1018465 +Node: Extension Sample Inplace1019678 +Node: Extension Sample Ord1021353 +Node: Extension Sample Readdir1022189 +Ref: table-readdir-file-types1023045 +Node: Extension Sample Revout1023844 +Node: Extension Sample Rev2way1024435 +Node: Extension Sample Read write array1025176 +Node: Extension Sample Readfile1027055 +Node: Extension Sample API Tests1028155 +Node: Extension Sample Time1028680 +Node: gawkextlib1029995 +Node: Extension summary1032808 +Node: Extension Exercises1036501 +Node: Language History1037223 +Node: V7/SVR3.11038866 +Node: SVR41041186 +Node: POSIX1042628 +Node: BTL1044014 +Node: POSIX/GNU1044748 +Node: Feature History1050491 +Node: Common Extensions1063621 +Node: Ranges and Locales1064933 +Ref: Ranges and Locales-Footnote-11069550 +Ref: Ranges and Locales-Footnote-21069577 +Ref: Ranges and Locales-Footnote-31069811 +Node: Contributors1070032 +Node: History summary1075457 +Node: Installation1076826 +Node: Gawk Distribution1077777 +Node: Getting1078261 +Node: Extracting1079085 +Node: Distribution contents1080727 +Node: Unix Installation1086497 +Node: Quick Installation1087114 +Node: Additional Configuration Options1089556 +Node: Configuration Philosophy1091294 +Node: Non-Unix Installation1093645 +Node: PC Installation1094103 +Node: PC Binary Installation1095414 +Node: PC Compiling1097262 +Ref: PC Compiling-Footnote-11100261 +Node: PC Testing1100366 +Node: PC Using1101542 +Node: Cygwin1105700 +Node: MSYS1106509 +Node: VMS Installation1107023 +Node: VMS Compilation1107819 +Ref: VMS Compilation-Footnote-11109041 +Node: VMS Dynamic Extensions1109099 +Node: VMS Installation Details1110472 +Node: VMS Running1112724 +Node: VMS GNV1115558 +Node: VMS Old Gawk1116281 +Node: Bugs1116751 +Node: Other Versions1120755 +Node: Installation summary1127010 +Node: Notes1128066 +Node: Compatibility Mode1128931 +Node: Additions1129713 +Node: Accessing The Source1130638 +Node: Adding Code1132074 +Node: New Ports1138252 +Node: Derived Files1142733 +Ref: Derived Files-Footnote-11147814 +Ref: Derived Files-Footnote-21147848 +Ref: Derived Files-Footnote-31148444 +Node: Future Extensions1148558 +Node: Implementation Limitations1149164 +Node: Extension Design1150412 +Node: Old Extension Problems1151566 +Ref: Old Extension Problems-Footnote-11153083 +Node: Extension New Mechanism Goals1153140 +Ref: Extension New Mechanism Goals-Footnote-11156500 +Node: Extension Other Design Decisions1156689 +Node: Extension Future Growth1158795 +Node: Old Extension Mechanism1159631 +Node: Notes summary1161393 +Node: Basic Concepts1162579 +Node: Basic High Level1163260 +Ref: figure-general-flow1163532 +Ref: figure-process-flow1164131 +Ref: Basic High Level-Footnote-11167360 +Node: Basic Data Typing1167545 +Node: Glossary1170873 +Node: Copying1196025 +Node: GNU Free Documentation License1233581 +Node: Index1258717 End Tag Table diff --git a/doc/gawk.texi b/doc/gawk.texi index 6bbc6562..d8d8132a 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -1816,6 +1816,7 @@ see @uref{http://www.gnu.org, the GNU Project's home page}. This @value{DOCUMENT} may also be read from @uref{http://www.gnu.org/software/gawk/manual/, their web site}. +@ifclear FOR_PRINT A shell, an editor (Emacs), highly portable optimizing C, C++, and Objective-C compilers, a symbolic debugger and dozens of large and small utilities (such as @command{gawk}), have all been completed and are @@ -1826,32 +1827,16 @@ stage of development. @cindex Linux @cindex GNU/Linux @cindex operating systems, BSD-based -@cindex Alpha (DEC) Until the GNU operating system is more fully developed, you should consider using GNU/Linux, a freely distributable, Unix-like operating system for Intel@registeredsymbol{}, Power Architecture, Sun SPARC, IBM S/390, and other -@ifclear FOR_PRINT systems.@footnote{The terminology ``GNU/Linux'' is explained in the @ref{Glossary}.} -@end ifclear -@ifset FOR_PRINT -systems. -@end ifset Many GNU/Linux distributions are available for download from the Internet. - -(There are numerous other freely available, Unix-like operating systems -based on the -Berkeley Software Distribution, and some of them use recent versions -of @command{gawk} for their versions of @command{awk}. -@uref{http://www.netbsd.org, NetBSD}, -@uref{http://www.freebsd.org, FreeBSD}, -and -@uref{http://www.openbsd.org, OpenBSD} -are three of the most popular ones, but there -are others.) +@end ifclear @ifnotinfo The @value{DOCUMENT} you are reading is actually free---at least, the @@ -2095,10 +2080,14 @@ people. Notable code and documentation contributions were made by a number of people. @xref{Contributors}, for the full list. -Thanks to Patrice Dumas for the new @command{makeinfo} program. +Thanks to Patrice Dumas for the new @command{makeinfo} program. Thanks to Karl Berry who continues to work to keep the Texinfo markup language sane. +Robert P.J.@: Day, Michael Brennan and Brian Kernighan kindly acted as +reviewers for the 2015 edition of this @value{DOCUMENT}. Their feedback +helped improve the final work. + @cindex Kernighan, Brian I would like to thank Brian Kernighan for invaluable assistance during the testing and debugging of @command{gawk}, and for ongoing @@ -2106,6 +2095,12 @@ help and advice in clarifying numerous points about the language. We could not have done nearly as good a job on either @command{gawk} or its documentation without his help. +Brian is in a class by himself as a programmer and technical +author. I have to thank him (yet again) for his ongoing friendship +and the role-model he has been for me for close to 30 years! +Having him as a reviewer is an exciting privilege. It has also +been extremely humbling@enddots{} + @cindex Robbins, Miriam @cindex Robbins, Jean @cindex Robbins, Harry @@ -3018,12 +3013,14 @@ action---so it uses the default action, printing the record. Print the length of the longest line in @file{data}: @example -expand data | awk '@{ if (x < length()) x = length() @} +expand data | awk '@{ if (x < length($0)) x = length($0) @} END @{ print "maximum line length is " x @}' @end example +This example differs slightly from the first example in this list: The input is processed by the @command{expand} utility to change TABs -into spaces, so the widths compared are actually the right-margin columns. +into spaces, so the widths compared are actually the right-margin columns, +as opposed to the number of input characters on each line. @item Print every line that has at least one field: @@ -9738,7 +9735,8 @@ print "Serious error detected!" | "cat 1>&2" @noindent This works by opening a pipeline to a shell command that can access the standard error stream that it inherits from the @command{awk} process. -This is far from elegant, and it is also inefficient, because it requires a +@c 8/2014: Mike Brennan says not to cite this as inefficient. So, fixed. +This is far from elegant, and it also requires a separate process. So people writing @command{awk} programs often don't do this. Instead, they send the error messages to the screen, like this: @@ -11158,7 +11156,7 @@ Otherwise, it's parsed as follows: @end display As mentioned earlier, -when doing concatenation, @emph{parenthesize}. Otherwise, +when mixing concatenation with other operators, @emph{parenthesize}. Otherwise, you're never quite sure what you'll get. @node Assignment Ops @@ -11754,19 +11752,14 @@ compares variables. @cindex numeric, strings @cindex strings, numeric @cindex POSIX @command{awk}, numeric strings and -The 1992 POSIX standard introduced +The POSIX standard introduced the concept of a @dfn{numeric string}, which is simply a string that looks like a number---for example, @code{@w{" +2"}}. This concept is used for determining the type of a variable. The type of the variable is important because the types of two variables determine how they are compared. +Variable typing follows these rules: -The various versions of the POSIX standard did not get the rules -quite right for several editions. Fortunately, as of at least the -2008 standard (and possibly earlier), the standard has been fixed, -and variable typing follows these rules:@footnote{@command{gawk} has -followed these rules for many years, -and it is gratifying that the POSIX standard is also now correct.} @itemize @value{BULLET} @item @@ -16663,7 +16656,9 @@ is @minus{}3, and @code{int(-3)} is @minus{}3 as well. @cindexawkfunc{log} @cindex logarithm Return the natural logarithm of @var{x}, if @var{x} is positive; -otherwise, report an error. +otherwise, return @code{NaN} (``not a number'') on IEEE 754 systems. +Additionally, @command{gawk} prints a warning message when @code{x} +is negative. @item @code{rand()} @cindexawkfunc{rand} diff --git a/doc/gawktexi.in b/doc/gawktexi.in index bca15569..33269644 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -1783,6 +1783,7 @@ see @uref{http://www.gnu.org, the GNU Project's home page}. This @value{DOCUMENT} may also be read from @uref{http://www.gnu.org/software/gawk/manual/, their web site}. +@ifclear FOR_PRINT A shell, an editor (Emacs), highly portable optimizing C, C++, and Objective-C compilers, a symbolic debugger and dozens of large and small utilities (such as @command{gawk}), have all been completed and are @@ -1793,32 +1794,16 @@ stage of development. @cindex Linux @cindex GNU/Linux @cindex operating systems, BSD-based -@cindex Alpha (DEC) Until the GNU operating system is more fully developed, you should consider using GNU/Linux, a freely distributable, Unix-like operating system for Intel@registeredsymbol{}, Power Architecture, Sun SPARC, IBM S/390, and other -@ifclear FOR_PRINT systems.@footnote{The terminology ``GNU/Linux'' is explained in the @ref{Glossary}.} -@end ifclear -@ifset FOR_PRINT -systems. -@end ifset Many GNU/Linux distributions are available for download from the Internet. - -(There are numerous other freely available, Unix-like operating systems -based on the -Berkeley Software Distribution, and some of them use recent versions -of @command{gawk} for their versions of @command{awk}. -@uref{http://www.netbsd.org, NetBSD}, -@uref{http://www.freebsd.org, FreeBSD}, -and -@uref{http://www.openbsd.org, OpenBSD} -are three of the most popular ones, but there -are others.) +@end ifclear @ifnotinfo The @value{DOCUMENT} you are reading is actually free---at least, the @@ -2062,10 +2047,14 @@ people. Notable code and documentation contributions were made by a number of people. @xref{Contributors}, for the full list. -Thanks to Patrice Dumas for the new @command{makeinfo} program. +Thanks to Patrice Dumas for the new @command{makeinfo} program. Thanks to Karl Berry who continues to work to keep the Texinfo markup language sane. +Robert P.J.@: Day, Michael Brennan and Brian Kernighan kindly acted as +reviewers for the 2015 edition of this @value{DOCUMENT}. Their feedback +helped improve the final work. + @cindex Kernighan, Brian I would like to thank Brian Kernighan for invaluable assistance during the testing and debugging of @command{gawk}, and for ongoing @@ -2073,6 +2062,12 @@ help and advice in clarifying numerous points about the language. We could not have done nearly as good a job on either @command{gawk} or its documentation without his help. +Brian is in a class by himself as a programmer and technical +author. I have to thank him (yet again) for his ongoing friendship +and the role-model he has been for me for close to 30 years! +Having him as a reviewer is an exciting privilege. It has also +been extremely humbling@enddots{} + @cindex Robbins, Miriam @cindex Robbins, Jean @cindex Robbins, Harry @@ -2946,12 +2941,14 @@ action---so it uses the default action, printing the record. Print the length of the longest line in @file{data}: @example -expand data | awk '@{ if (x < length()) x = length() @} +expand data | awk '@{ if (x < length($0)) x = length($0) @} END @{ print "maximum line length is " x @}' @end example +This example differs slightly from the first example in this list: The input is processed by the @command{expand} utility to change TABs -into spaces, so the widths compared are actually the right-margin columns. +into spaces, so the widths compared are actually the right-margin columns, +as opposed to the number of input characters on each line. @item Print every line that has at least one field: @@ -9319,7 +9316,8 @@ print "Serious error detected!" | "cat 1>&2" @noindent This works by opening a pipeline to a shell command that can access the standard error stream that it inherits from the @command{awk} process. -This is far from elegant, and it is also inefficient, because it requires a +@c 8/2014: Mike Brennan says not to cite this as inefficient. So, fixed. +This is far from elegant, and it also requires a separate process. So people writing @command{awk} programs often don't do this. Instead, they send the error messages to the screen, like this: @@ -10619,7 +10617,7 @@ Otherwise, it's parsed as follows: @end display As mentioned earlier, -when doing concatenation, @emph{parenthesize}. Otherwise, +when mixing concatenation with other operators, @emph{parenthesize}. Otherwise, you're never quite sure what you'll get. @node Assignment Ops @@ -11105,19 +11103,14 @@ compares variables. @cindex numeric, strings @cindex strings, numeric @cindex POSIX @command{awk}, numeric strings and -The 1992 POSIX standard introduced +The POSIX standard introduced the concept of a @dfn{numeric string}, which is simply a string that looks like a number---for example, @code{@w{" +2"}}. This concept is used for determining the type of a variable. The type of the variable is important because the types of two variables determine how they are compared. +Variable typing follows these rules: -The various versions of the POSIX standard did not get the rules -quite right for several editions. Fortunately, as of at least the -2008 standard (and possibly earlier), the standard has been fixed, -and variable typing follows these rules:@footnote{@command{gawk} has -followed these rules for many years, -and it is gratifying that the POSIX standard is also now correct.} @itemize @value{BULLET} @item @@ -15968,7 +15961,9 @@ is @minus{}3, and @code{int(-3)} is @minus{}3 as well. @cindexawkfunc{log} @cindex logarithm Return the natural logarithm of @var{x}, if @var{x} is positive; -otherwise, report an error. +otherwise, return @code{NaN} (``not a number'') on IEEE 754 systems. +Additionally, @command{gawk} prints a warning message when @code{x} +is negative. @item @code{rand()} @cindexawkfunc{rand} |