diff options
-rw-r--r-- | doc/ChangeLog | 4 | ||||
-rw-r--r-- | doc/gawk.info | 1155 | ||||
-rw-r--r-- | doc/gawk.texi | 59 | ||||
-rw-r--r-- | doc/gawktexi.in | 59 |
4 files changed, 712 insertions, 565 deletions
diff --git a/doc/ChangeLog b/doc/ChangeLog index e6c864d7..da2b7cc0 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,7 @@ +2014-10-14 Arnold D. Robbins <arnold@skeeve.com> + + * gawktexi.in: Add new Foreword from Mike Brennan. + 2014-10-13 Arnold D. Robbins <arnold@skeeve.com> * gawktexi.in: Fix example outputs in chapter 2. diff --git a/doc/gawk.info b/doc/gawk.info index 94170939..fd3e19db 100644 --- a/doc/gawk.info +++ b/doc/gawk.info @@ -29,7 +29,7 @@ entitled "GNU Free Documentation License". modify this GNU manual." -File: gawk.info, Node: Top, Next: Foreword, Up: (dir) +File: gawk.info, Node: Top, Next: Foreword3, Up: (dir) General Introduction ******************** @@ -58,8 +58,9 @@ entitled "GNU Free Documentation License". * Menu: -* Foreword:: Some nice words about this +* Foreword3:: Some nice words about this Info file. +* Foreword4:: More nice words. * Preface:: What this Info file is about; brief history and acknowledgments. * Getting Started:: A basic introduction to using @@ -679,10 +680,10 @@ your life together with me. lives in innumerable ways. -File: gawk.info, Node: Foreword, Next: Preface, Prev: Top, Up: Top +File: gawk.info, Node: Foreword3, Next: Foreword4, Prev: Top, Up: Top -Foreword -******** +Foreword to the Third Edition +***************************** Arnold Robbins and I are good friends. We were introduced in 1990 by circumstances--and our favorite programming language, AWK. The @@ -766,7 +767,41 @@ want to learn how, then read this book. March, 2001 -File: gawk.info, Node: Preface, Next: Getting Started, Prev: Foreword, Up: Top +File: gawk.info, Node: Foreword4, Next: Preface, Prev: Foreword3, Up: Top + +Foreword to the Fourth Edition +****************************** + +Some things don't change. Thirteen years ago I wrote: "If you use AWK +or want to learn how, then read this book." True then and still true +today. + + Learning to use a programming language is more than mastering the +syntax. One needs to acquire an understanding of how to use the +features of the language to solve practical programming problems. A +focus of this book is many examples that show how to use AWK. + + Some things do change. Our computers are much faster and have more +memory. Consequently, speed and storage inefficiencies of a high level +language matter less. Prototyping in AWK and then rewriting in C for +performance reasons happens less, because more often the prototype is +fast enough. + + Of course, there are computing operations that are best done in C or +C++. With `gawk' 4.1 and later, you do not have to choose between +writing your program in AWK or in C/C++. You can write most of your +program in AWK and the aspects that require C/C++ capabilities can be +written in C/C++ and then the pieces glued together when the `gawk' +module loads the C/C++ module as a dynamic plug-in. *note Dynamic +Extensions::, has all the details, and as expected, many examples to +help you learn the ins and outs. + + Michael Brennan + Author of `mawk' + October, 2014 + + +File: gawk.info, Node: Preface, Next: Getting Started, Prev: Foreword4, Up: Top Preface ******* @@ -31786,7 +31821,8 @@ Index * Brennan, Michael <2>: Simple Sed. (line 25) * Brennan, Michael <3>: Delete. (line 56) * Brennan, Michael <4>: Acknowledgments. (line 78) -* Brennan, Michael: Foreword. (line 83) +* Brennan, Michael <5>: Foreword4. (line 30) +* Brennan, Michael: Foreword3. (line 83) * Brian Kernighan's awk <1>: I/O Functions. (line 43) * Brian Kernighan's awk <2>: Gory Details. (line 19) * Brian Kernighan's awk <3>: String Functions. (line 491) @@ -34232,557 +34268,558 @@ Index Tag Table: Node: Top1204 -Node: Foreword42103 -Node: Preface46450 -Ref: Preface-Footnote-149320 -Ref: Preface-Footnote-249427 -Ref: Preface-Footnote-349660 -Node: History49802 -Node: Names52150 -Ref: Names-Footnote-153244 -Node: This Manual53390 -Ref: This Manual-Footnote-159219 -Node: Conventions59319 -Node: Manual History61659 -Ref: Manual History-Footnote-164650 -Ref: Manual History-Footnote-264691 -Node: How To Contribute64765 -Node: Acknowledgments66004 -Node: Getting Started70812 -Node: Running gawk73246 -Node: One-shot74436 -Node: Read Terminal75661 -Node: Long77688 -Node: Executable Scripts79204 -Ref: Executable Scripts-Footnote-181993 -Node: Comments82095 -Node: Quoting84568 -Node: DOS Quoting90074 -Node: Sample Data Files90749 -Node: Very Simple93342 -Node: Two Rules98233 -Node: More Complex100119 -Node: Statements/Lines102981 -Ref: Statements/Lines-Footnote-1107437 -Node: Other Features107702 -Node: When108633 -Ref: When-Footnote-1110389 -Node: Intro Summary110454 -Node: Invoking Gawk111337 -Node: Command Line112852 -Node: Options113643 -Ref: Options-Footnote-1129538 -Node: Other Arguments129563 -Node: Naming Standard Input132524 -Node: Environment Variables133617 -Node: AWKPATH Variable134175 -Ref: AWKPATH Variable-Footnote-1137027 -Ref: AWKPATH Variable-Footnote-2137072 -Node: AWKLIBPATH Variable137332 -Node: Other Environment Variables138091 -Node: Exit Status141811 -Node: Include Files142486 -Node: Loading Shared Libraries146074 -Node: Obsolete147501 -Node: Undocumented148198 -Node: Invoking Summary148465 -Node: Regexp150131 -Node: Regexp Usage151590 -Node: Escape Sequences153623 -Node: Regexp Operators159640 -Ref: Regexp Operators-Footnote-1167074 -Ref: Regexp Operators-Footnote-2167221 -Node: Bracket Expressions167319 -Ref: table-char-classes169336 -Node: Leftmost Longest172276 -Node: Computed Regexps173578 -Node: GNU Regexp Operators176975 -Node: Case-sensitivity180677 -Ref: Case-sensitivity-Footnote-1183567 -Ref: Case-sensitivity-Footnote-2183802 -Node: Regexp Summary183910 -Node: Reading Files185379 -Node: Records187473 -Node: awk split records188205 -Node: gawk split records193119 -Ref: gawk split records-Footnote-1197658 -Node: Fields197695 -Ref: Fields-Footnote-1200493 -Node: Nonconstant Fields200579 -Ref: Nonconstant Fields-Footnote-1202815 -Node: Changing Fields203017 -Node: Field Separators208949 -Node: Default Field Splitting211653 -Node: Regexp Field Splitting212770 -Node: Single Character Fields216120 -Node: Command Line Field Separator217179 -Node: Full Line Fields220391 -Ref: Full Line Fields-Footnote-1220899 -Node: Field Splitting Summary220945 -Ref: Field Splitting Summary-Footnote-1224076 -Node: Constant Size224177 -Node: Splitting By Content228783 -Ref: Splitting By Content-Footnote-1232856 -Node: Multiple Line232896 -Ref: Multiple Line-Footnote-1238785 -Node: Getline238964 -Node: Plain Getline241175 -Node: Getline/Variable243815 -Node: Getline/File244962 -Node: Getline/Variable/File246346 -Ref: Getline/Variable/File-Footnote-1247947 -Node: Getline/Pipe248034 -Node: Getline/Variable/Pipe250717 -Node: Getline/Coprocess251848 -Node: Getline/Variable/Coprocess253100 -Node: Getline Notes253839 -Node: Getline Summary256631 -Ref: table-getline-variants257043 -Node: Read Timeout257872 -Ref: Read Timeout-Footnote-1261686 -Node: Command-line directories261744 -Node: Input Summary262648 -Node: Input Exercises265900 -Node: Printing266628 -Node: Print268405 -Node: Print Examples269862 -Node: Output Separators272641 -Node: OFMT274659 -Node: Printf276013 -Node: Basic Printf276798 -Node: Control Letters278369 -Node: Format Modifiers282353 -Node: Printf Examples288360 -Node: Redirection290842 -Node: Special FD297681 -Ref: Special FD-Footnote-1300838 -Node: Special Files300912 -Node: Other Inherited Files301528 -Node: Special Network302528 -Node: Special Caveats303389 -Node: Close Files And Pipes304340 -Ref: Close Files And Pipes-Footnote-1311519 -Ref: Close Files And Pipes-Footnote-2311667 -Node: Output Summary311817 -Node: Output Exercises312813 -Node: Expressions313493 -Node: Values314678 -Node: Constants315354 -Node: Scalar Constants316034 -Ref: Scalar Constants-Footnote-1316893 -Node: Nondecimal-numbers317143 -Node: Regexp Constants320143 -Node: Using Constant Regexps320668 -Node: Variables323806 -Node: Using Variables324461 -Node: Assignment Options326371 -Node: Conversion328246 -Node: Strings And Numbers328770 -Ref: Strings And Numbers-Footnote-1331834 -Node: Locale influences conversions331943 -Ref: table-locale-affects334688 -Node: All Operators335276 -Node: Arithmetic Ops335906 -Node: Concatenation338411 -Ref: Concatenation-Footnote-1341230 -Node: Assignment Ops341336 -Ref: table-assign-ops346319 -Node: Increment Ops347597 -Node: Truth Values and Conditions351035 -Node: Truth Values352118 -Node: Typing and Comparison353167 -Node: Variable Typing353960 -Node: Comparison Operators357612 -Ref: table-relational-ops358022 -Node: POSIX String Comparison361537 -Ref: POSIX String Comparison-Footnote-1362609 -Node: Boolean Ops362747 -Ref: Boolean Ops-Footnote-1367226 -Node: Conditional Exp367317 -Node: Function Calls369044 -Node: Precedence372924 -Node: Locales376592 -Node: Expressions Summary378223 -Node: Patterns and Actions380797 -Node: Pattern Overview381917 -Node: Regexp Patterns383596 -Node: Expression Patterns384139 -Node: Ranges387919 -Node: BEGIN/END391025 -Node: Using BEGIN/END391787 -Ref: Using BEGIN/END-Footnote-1394524 -Node: I/O And BEGIN/END394630 -Node: BEGINFILE/ENDFILE396944 -Node: Empty399845 -Node: Using Shell Variables400162 -Node: Action Overview402438 -Node: Statements404765 -Node: If Statement406613 -Node: While Statement408111 -Node: Do Statement410139 -Node: For Statement411281 -Node: Switch Statement414436 -Node: Break Statement416824 -Node: Continue Statement418865 -Node: Next Statement420690 -Node: Nextfile Statement423070 -Node: Exit Statement425700 -Node: Built-in Variables428103 -Node: User-modified429236 -Ref: User-modified-Footnote-1436916 -Node: Auto-set436978 -Ref: Auto-set-Footnote-1450008 -Ref: Auto-set-Footnote-2450213 -Node: ARGC and ARGV450269 -Node: Pattern Action Summary454473 -Node: Arrays456900 -Node: Array Basics458229 -Node: Array Intro459073 -Ref: figure-array-elements461037 -Ref: Array Intro-Footnote-1463561 -Node: Reference to Elements463689 -Node: Assigning Elements466139 -Node: Array Example466630 -Node: Scanning an Array468388 -Node: Controlling Scanning471404 -Ref: Controlling Scanning-Footnote-1476593 -Node: Numeric Array Subscripts476909 -Node: Uninitialized Subscripts479094 -Node: Delete480711 -Ref: Delete-Footnote-1483455 -Node: Multidimensional483512 -Node: Multiscanning486607 -Node: Arrays of Arrays488196 -Node: Arrays Summary492957 -Node: Functions495062 -Node: Built-in495935 -Node: Calling Built-in497013 -Node: Numeric Functions499001 -Ref: Numeric Functions-Footnote-1503023 -Ref: Numeric Functions-Footnote-2503380 -Ref: Numeric Functions-Footnote-3503428 -Node: String Functions503697 -Ref: String Functions-Footnote-1527169 -Ref: String Functions-Footnote-2527298 -Ref: String Functions-Footnote-3527546 -Node: Gory Details527633 -Ref: table-sub-escapes529414 -Ref: table-sub-proposed530934 -Ref: table-posix-sub532298 -Ref: table-gensub-escapes533838 -Ref: Gory Details-Footnote-1534670 -Node: I/O Functions534821 -Ref: I/O Functions-Footnote-1541922 -Node: Time Functions542069 -Ref: Time Functions-Footnote-1552538 -Ref: Time Functions-Footnote-2552606 -Ref: Time Functions-Footnote-3552764 -Ref: Time Functions-Footnote-4552875 -Ref: Time Functions-Footnote-5552987 -Ref: Time Functions-Footnote-6553214 -Node: Bitwise Functions553480 -Ref: table-bitwise-ops554042 -Ref: Bitwise Functions-Footnote-1558350 -Node: Type Functions558519 -Node: I18N Functions559668 -Node: User-defined561313 -Node: Definition Syntax562117 -Ref: Definition Syntax-Footnote-1567523 -Node: Function Example567592 -Ref: Function Example-Footnote-1570509 -Node: Function Caveats570531 -Node: Calling A Function571049 -Node: Variable Scope572004 -Node: Pass By Value/Reference574992 -Node: Return Statement578502 -Node: Dynamic Typing581486 -Node: Indirect Calls582415 -Ref: Indirect Calls-Footnote-1593719 -Node: Functions Summary593847 -Node: Library Functions596546 -Ref: Library Functions-Footnote-1600164 -Ref: Library Functions-Footnote-2600307 -Node: Library Names600478 -Ref: Library Names-Footnote-1603938 -Ref: Library Names-Footnote-2604158 -Node: General Functions604244 -Node: Strtonum Function605347 -Node: Assert Function608367 -Node: Round Function611691 -Node: Cliff Random Function613232 -Node: Ordinal Functions614248 -Ref: Ordinal Functions-Footnote-1617313 -Ref: Ordinal Functions-Footnote-2617565 -Node: Join Function617776 -Ref: Join Function-Footnote-1619547 -Node: Getlocaltime Function619747 -Node: Readfile Function623488 -Node: Shell Quoting625458 -Node: Data File Management626859 -Node: Filetrans Function627491 -Node: Rewind Function631550 -Node: File Checking632935 -Ref: File Checking-Footnote-1634263 -Node: Empty Files634464 -Node: Ignoring Assigns636443 -Node: Getopt Function637994 -Ref: Getopt Function-Footnote-1649454 -Node: Passwd Functions649657 -Ref: Passwd Functions-Footnote-1658508 -Node: Group Functions658596 -Ref: Group Functions-Footnote-1666499 -Node: Walking Arrays666712 -Node: Library Functions Summary668315 -Node: Library Exercises669716 -Node: Sample Programs670996 -Node: Running Examples671766 -Node: Clones672494 -Node: Cut Program673718 -Node: Egrep Program683448 -Ref: Egrep Program-Footnote-1690952 -Node: Id Program691062 -Node: Split Program694706 -Ref: Split Program-Footnote-1698152 -Node: Tee Program698280 -Node: Uniq Program701067 -Node: Wc Program708488 -Ref: Wc Program-Footnote-1712736 -Node: Miscellaneous Programs712828 -Node: Dupword Program714041 -Node: Alarm Program716072 -Node: Translate Program720876 -Ref: Translate Program-Footnote-1725440 -Node: Labels Program725710 -Ref: Labels Program-Footnote-1729059 -Node: Word Sorting729143 -Node: History Sorting733213 -Node: Extract Program735049 -Node: Simple Sed742581 -Node: Igawk Program745643 -Ref: Igawk Program-Footnote-1759969 -Ref: Igawk Program-Footnote-2760170 -Ref: Igawk Program-Footnote-3760292 -Node: Anagram Program760407 -Node: Signature Program763469 -Node: Programs Summary764716 -Node: Programs Exercises765909 -Ref: Programs Exercises-Footnote-1770040 -Node: Advanced Features770131 -Node: Nondecimal Data772079 -Node: Array Sorting773669 -Node: Controlling Array Traversal774366 -Ref: Controlling Array Traversal-Footnote-1782697 -Node: Array Sorting Functions782815 -Ref: Array Sorting Functions-Footnote-1786707 -Node: Two-way I/O786901 -Ref: Two-way I/O-Footnote-1791845 -Ref: Two-way I/O-Footnote-2792031 -Node: TCP/IP Networking792113 -Node: Profiling794985 -Node: Advanced Features Summary802529 -Node: Internationalization804462 -Node: I18N and L10N805942 -Node: Explaining gettext806628 -Ref: Explaining gettext-Footnote-1811657 -Ref: Explaining gettext-Footnote-2811841 -Node: Programmer i18n812006 -Ref: Programmer i18n-Footnote-1816872 -Node: Translator i18n816921 -Node: String Extraction817715 -Ref: String Extraction-Footnote-1818846 -Node: Printf Ordering818932 -Ref: Printf Ordering-Footnote-1821718 -Node: I18N Portability821782 -Ref: I18N Portability-Footnote-1824231 -Node: I18N Example824294 -Ref: I18N Example-Footnote-1827094 -Node: Gawk I18N827166 -Node: I18N Summary827804 -Node: Debugger829143 -Node: Debugging830165 -Node: Debugging Concepts830606 -Node: Debugging Terms832463 -Node: Awk Debugging835038 -Node: Sample Debugging Session835930 -Node: Debugger Invocation836450 -Node: Finding The Bug837834 -Node: List of Debugger Commands844309 -Node: Breakpoint Control845641 -Node: Debugger Execution Control849333 -Node: Viewing And Changing Data852697 -Node: Execution Stack856062 -Node: Debugger Info857700 -Node: Miscellaneous Debugger Commands861717 -Node: Readline Support866909 -Node: Limitations867801 -Node: Debugging Summary869898 -Node: Arbitrary Precision Arithmetic871066 -Node: Computer Arithmetic872482 -Ref: table-numeric-ranges876083 -Ref: Computer Arithmetic-Footnote-1876942 -Node: Math Definitions876999 -Ref: table-ieee-formats880286 -Ref: Math Definitions-Footnote-1880890 -Node: MPFR features880995 -Node: FP Math Caution882666 -Ref: FP Math Caution-Footnote-1883716 -Node: Inexactness of computations884085 -Node: Inexact representation885033 -Node: Comparing FP Values886388 -Node: Errors accumulate887461 -Node: Getting Accuracy888894 -Node: Try To Round891553 -Node: Setting precision892452 -Ref: table-predefined-precision-strings893136 -Node: Setting the rounding mode894930 -Ref: table-gawk-rounding-modes895294 -Ref: Setting the rounding mode-Footnote-1898748 -Node: Arbitrary Precision Integers898927 -Ref: Arbitrary Precision Integers-Footnote-1901918 -Node: POSIX Floating Point Problems902067 -Ref: POSIX Floating Point Problems-Footnote-1905943 -Node: Floating point summary905981 -Node: Dynamic Extensions908173 -Node: Extension Intro909725 -Node: Plugin License910991 -Node: Extension Mechanism Outline911788 -Ref: figure-load-extension912216 -Ref: figure-register-new-function913696 -Ref: figure-call-new-function914700 -Node: Extension API Description916686 -Node: Extension API Functions Introduction918136 -Node: General Data Types922972 -Ref: General Data Types-Footnote-1928659 -Node: Memory Allocation Functions928958 -Ref: Memory Allocation Functions-Footnote-1931788 -Node: Constructor Functions931884 -Node: Registration Functions933618 -Node: Extension Functions934303 -Node: Exit Callback Functions936599 -Node: Extension Version String937847 -Node: Input Parsers938497 -Node: Output Wrappers948312 -Node: Two-way processors952828 -Node: Printing Messages955032 -Ref: Printing Messages-Footnote-1956109 -Node: Updating `ERRNO'956261 -Node: Requesting Values957001 -Ref: table-value-types-returned957729 -Node: Accessing Parameters958687 -Node: Symbol Table Access959918 -Node: Symbol table by name960432 -Node: Symbol table by cookie962412 -Ref: Symbol table by cookie-Footnote-1966551 -Node: Cached values966614 -Ref: Cached values-Footnote-1970118 -Node: Array Manipulation970209 -Ref: Array Manipulation-Footnote-1971307 -Node: Array Data Types971346 -Ref: Array Data Types-Footnote-1974003 -Node: Array Functions974095 -Node: Flattening Arrays977949 -Node: Creating Arrays984836 -Node: Extension API Variables989603 -Node: Extension Versioning990239 -Node: Extension API Informational Variables992140 -Node: Extension API Boilerplate993228 -Node: Finding Extensions997044 -Node: Extension Example997604 -Node: Internal File Description998376 -Node: Internal File Ops1002443 -Ref: Internal File Ops-Footnote-11014101 -Node: Using Internal File Ops1014241 -Ref: Using Internal File Ops-Footnote-11016624 -Node: Extension Samples1016897 -Node: Extension Sample File Functions1018421 -Node: Extension Sample Fnmatch1026023 -Node: Extension Sample Fork1027505 -Node: Extension Sample Inplace1028718 -Node: Extension Sample Ord1030393 -Node: Extension Sample Readdir1031229 -Ref: table-readdir-file-types1032085 -Node: Extension Sample Revout1032896 -Node: Extension Sample Rev2way1033487 -Node: Extension Sample Read write array1034228 -Node: Extension Sample Readfile1036167 -Node: Extension Sample Time1037262 -Node: Extension Sample API Tests1038611 -Node: gawkextlib1039102 -Node: Extension summary1041752 -Node: Extension Exercises1045434 -Node: Language History1046156 -Node: V7/SVR3.11047813 -Node: SVR41049994 -Node: POSIX1051439 -Node: BTL1052828 -Node: POSIX/GNU1053562 -Node: Feature History1059131 -Node: Common Extensions1072222 -Node: Ranges and Locales1073546 -Ref: Ranges and Locales-Footnote-11078185 -Ref: Ranges and Locales-Footnote-21078212 -Ref: Ranges and Locales-Footnote-31078446 -Node: Contributors1078667 -Node: History summary1084207 -Node: Installation1085576 -Node: Gawk Distribution1086532 -Node: Getting1087016 -Node: Extracting1087840 -Node: Distribution contents1089482 -Node: Unix Installation1095199 -Node: Quick Installation1095816 -Node: Additional Configuration Options1098247 -Node: Configuration Philosophy1099987 -Node: Non-Unix Installation1102338 -Node: PC Installation1102796 -Node: PC Binary Installation1104122 -Node: PC Compiling1105970 -Ref: PC Compiling-Footnote-11108991 -Node: PC Testing1109096 -Node: PC Using1110272 -Node: Cygwin1114387 -Node: MSYS1115210 -Node: VMS Installation1115708 -Node: VMS Compilation1116500 -Ref: VMS Compilation-Footnote-11117722 -Node: VMS Dynamic Extensions1117780 -Node: VMS Installation Details1119464 -Node: VMS Running1121716 -Node: VMS GNV1124557 -Node: VMS Old Gawk1125291 -Node: Bugs1125761 -Node: Other Versions1129665 -Node: Installation summary1135878 -Node: Notes1136934 -Node: Compatibility Mode1137799 -Node: Additions1138581 -Node: Accessing The Source1139506 -Node: Adding Code1140942 -Node: New Ports1147114 -Node: Derived Files1151596 -Ref: Derived Files-Footnote-11157071 -Ref: Derived Files-Footnote-21157105 -Ref: Derived Files-Footnote-31157701 -Node: Future Extensions1157815 -Node: Implementation Limitations1158421 -Node: Extension Design1159669 -Node: Old Extension Problems1160823 -Ref: Old Extension Problems-Footnote-11162340 -Node: Extension New Mechanism Goals1162397 -Ref: Extension New Mechanism Goals-Footnote-11165757 -Node: Extension Other Design Decisions1165946 -Node: Extension Future Growth1168054 -Node: Old Extension Mechanism1168890 -Node: Notes summary1170652 -Node: Basic Concepts1171838 -Node: Basic High Level1172519 -Ref: figure-general-flow1172791 -Ref: figure-process-flow1173390 -Ref: Basic High Level-Footnote-11176619 -Node: Basic Data Typing1176804 -Node: Glossary1180132 -Node: Copying1205290 -Node: GNU Free Documentation License1242846 -Node: Index1267982 +Node: Foreword342156 +Node: Foreword446548 +Node: Preface47982 +Ref: Preface-Footnote-150853 +Ref: Preface-Footnote-250960 +Ref: Preface-Footnote-351193 +Node: History51335 +Node: Names53683 +Ref: Names-Footnote-154777 +Node: This Manual54923 +Ref: This Manual-Footnote-160752 +Node: Conventions60852 +Node: Manual History63192 +Ref: Manual History-Footnote-166183 +Ref: Manual History-Footnote-266224 +Node: How To Contribute66298 +Node: Acknowledgments67537 +Node: Getting Started72345 +Node: Running gawk74779 +Node: One-shot75969 +Node: Read Terminal77194 +Node: Long79221 +Node: Executable Scripts80737 +Ref: Executable Scripts-Footnote-183526 +Node: Comments83628 +Node: Quoting86101 +Node: DOS Quoting91607 +Node: Sample Data Files92282 +Node: Very Simple94875 +Node: Two Rules99766 +Node: More Complex101652 +Node: Statements/Lines104514 +Ref: Statements/Lines-Footnote-1108970 +Node: Other Features109235 +Node: When110166 +Ref: When-Footnote-1111922 +Node: Intro Summary111987 +Node: Invoking Gawk112870 +Node: Command Line114385 +Node: Options115176 +Ref: Options-Footnote-1131071 +Node: Other Arguments131096 +Node: Naming Standard Input134057 +Node: Environment Variables135150 +Node: AWKPATH Variable135708 +Ref: AWKPATH Variable-Footnote-1138560 +Ref: AWKPATH Variable-Footnote-2138605 +Node: AWKLIBPATH Variable138865 +Node: Other Environment Variables139624 +Node: Exit Status143344 +Node: Include Files144019 +Node: Loading Shared Libraries147607 +Node: Obsolete149034 +Node: Undocumented149731 +Node: Invoking Summary149998 +Node: Regexp151664 +Node: Regexp Usage153123 +Node: Escape Sequences155156 +Node: Regexp Operators161173 +Ref: Regexp Operators-Footnote-1168607 +Ref: Regexp Operators-Footnote-2168754 +Node: Bracket Expressions168852 +Ref: table-char-classes170869 +Node: Leftmost Longest173809 +Node: Computed Regexps175111 +Node: GNU Regexp Operators178508 +Node: Case-sensitivity182210 +Ref: Case-sensitivity-Footnote-1185100 +Ref: Case-sensitivity-Footnote-2185335 +Node: Regexp Summary185443 +Node: Reading Files186912 +Node: Records189006 +Node: awk split records189738 +Node: gawk split records194652 +Ref: gawk split records-Footnote-1199191 +Node: Fields199228 +Ref: Fields-Footnote-1202026 +Node: Nonconstant Fields202112 +Ref: Nonconstant Fields-Footnote-1204348 +Node: Changing Fields204550 +Node: Field Separators210482 +Node: Default Field Splitting213186 +Node: Regexp Field Splitting214303 +Node: Single Character Fields217653 +Node: Command Line Field Separator218712 +Node: Full Line Fields221924 +Ref: Full Line Fields-Footnote-1222432 +Node: Field Splitting Summary222478 +Ref: Field Splitting Summary-Footnote-1225609 +Node: Constant Size225710 +Node: Splitting By Content230316 +Ref: Splitting By Content-Footnote-1234389 +Node: Multiple Line234429 +Ref: Multiple Line-Footnote-1240318 +Node: Getline240497 +Node: Plain Getline242708 +Node: Getline/Variable245348 +Node: Getline/File246495 +Node: Getline/Variable/File247879 +Ref: Getline/Variable/File-Footnote-1249480 +Node: Getline/Pipe249567 +Node: Getline/Variable/Pipe252250 +Node: Getline/Coprocess253381 +Node: Getline/Variable/Coprocess254633 +Node: Getline Notes255372 +Node: Getline Summary258164 +Ref: table-getline-variants258576 +Node: Read Timeout259405 +Ref: Read Timeout-Footnote-1263219 +Node: Command-line directories263277 +Node: Input Summary264181 +Node: Input Exercises267433 +Node: Printing268161 +Node: Print269938 +Node: Print Examples271395 +Node: Output Separators274174 +Node: OFMT276192 +Node: Printf277546 +Node: Basic Printf278331 +Node: Control Letters279902 +Node: Format Modifiers283886 +Node: Printf Examples289893 +Node: Redirection292375 +Node: Special FD299214 +Ref: Special FD-Footnote-1302371 +Node: Special Files302445 +Node: Other Inherited Files303061 +Node: Special Network304061 +Node: Special Caveats304922 +Node: Close Files And Pipes305873 +Ref: Close Files And Pipes-Footnote-1313052 +Ref: Close Files And Pipes-Footnote-2313200 +Node: Output Summary313350 +Node: Output Exercises314346 +Node: Expressions315026 +Node: Values316211 +Node: Constants316887 +Node: Scalar Constants317567 +Ref: Scalar Constants-Footnote-1318426 +Node: Nondecimal-numbers318676 +Node: Regexp Constants321676 +Node: Using Constant Regexps322201 +Node: Variables325339 +Node: Using Variables325994 +Node: Assignment Options327904 +Node: Conversion329779 +Node: Strings And Numbers330303 +Ref: Strings And Numbers-Footnote-1333367 +Node: Locale influences conversions333476 +Ref: table-locale-affects336221 +Node: All Operators336809 +Node: Arithmetic Ops337439 +Node: Concatenation339944 +Ref: Concatenation-Footnote-1342763 +Node: Assignment Ops342869 +Ref: table-assign-ops347852 +Node: Increment Ops349130 +Node: Truth Values and Conditions352568 +Node: Truth Values353651 +Node: Typing and Comparison354700 +Node: Variable Typing355493 +Node: Comparison Operators359145 +Ref: table-relational-ops359555 +Node: POSIX String Comparison363070 +Ref: POSIX String Comparison-Footnote-1364142 +Node: Boolean Ops364280 +Ref: Boolean Ops-Footnote-1368759 +Node: Conditional Exp368850 +Node: Function Calls370577 +Node: Precedence374457 +Node: Locales378125 +Node: Expressions Summary379756 +Node: Patterns and Actions382330 +Node: Pattern Overview383450 +Node: Regexp Patterns385129 +Node: Expression Patterns385672 +Node: Ranges389452 +Node: BEGIN/END392558 +Node: Using BEGIN/END393320 +Ref: Using BEGIN/END-Footnote-1396057 +Node: I/O And BEGIN/END396163 +Node: BEGINFILE/ENDFILE398477 +Node: Empty401378 +Node: Using Shell Variables401695 +Node: Action Overview403971 +Node: Statements406298 +Node: If Statement408146 +Node: While Statement409644 +Node: Do Statement411672 +Node: For Statement412814 +Node: Switch Statement415969 +Node: Break Statement418357 +Node: Continue Statement420398 +Node: Next Statement422223 +Node: Nextfile Statement424603 +Node: Exit Statement427233 +Node: Built-in Variables429636 +Node: User-modified430769 +Ref: User-modified-Footnote-1438449 +Node: Auto-set438511 +Ref: Auto-set-Footnote-1451541 +Ref: Auto-set-Footnote-2451746 +Node: ARGC and ARGV451802 +Node: Pattern Action Summary456006 +Node: Arrays458433 +Node: Array Basics459762 +Node: Array Intro460606 +Ref: figure-array-elements462570 +Ref: Array Intro-Footnote-1465094 +Node: Reference to Elements465222 +Node: Assigning Elements467672 +Node: Array Example468163 +Node: Scanning an Array469921 +Node: Controlling Scanning472937 +Ref: Controlling Scanning-Footnote-1478126 +Node: Numeric Array Subscripts478442 +Node: Uninitialized Subscripts480627 +Node: Delete482244 +Ref: Delete-Footnote-1484988 +Node: Multidimensional485045 +Node: Multiscanning488140 +Node: Arrays of Arrays489729 +Node: Arrays Summary494490 +Node: Functions496595 +Node: Built-in497468 +Node: Calling Built-in498546 +Node: Numeric Functions500534 +Ref: Numeric Functions-Footnote-1504556 +Ref: Numeric Functions-Footnote-2504913 +Ref: Numeric Functions-Footnote-3504961 +Node: String Functions505230 +Ref: String Functions-Footnote-1528702 +Ref: String Functions-Footnote-2528831 +Ref: String Functions-Footnote-3529079 +Node: Gory Details529166 +Ref: table-sub-escapes530947 +Ref: table-sub-proposed532467 +Ref: table-posix-sub533831 +Ref: table-gensub-escapes535371 +Ref: Gory Details-Footnote-1536203 +Node: I/O Functions536354 +Ref: I/O Functions-Footnote-1543455 +Node: Time Functions543602 +Ref: Time Functions-Footnote-1554071 +Ref: Time Functions-Footnote-2554139 +Ref: Time Functions-Footnote-3554297 +Ref: Time Functions-Footnote-4554408 +Ref: Time Functions-Footnote-5554520 +Ref: Time Functions-Footnote-6554747 +Node: Bitwise Functions555013 +Ref: table-bitwise-ops555575 +Ref: Bitwise Functions-Footnote-1559883 +Node: Type Functions560052 +Node: I18N Functions561201 +Node: User-defined562846 +Node: Definition Syntax563650 +Ref: Definition Syntax-Footnote-1569056 +Node: Function Example569125 +Ref: Function Example-Footnote-1572042 +Node: Function Caveats572064 +Node: Calling A Function572582 +Node: Variable Scope573537 +Node: Pass By Value/Reference576525 +Node: Return Statement580035 +Node: Dynamic Typing583019 +Node: Indirect Calls583948 +Ref: Indirect Calls-Footnote-1595252 +Node: Functions Summary595380 +Node: Library Functions598079 +Ref: Library Functions-Footnote-1601697 +Ref: Library Functions-Footnote-2601840 +Node: Library Names602011 +Ref: Library Names-Footnote-1605471 +Ref: Library Names-Footnote-2605691 +Node: General Functions605777 +Node: Strtonum Function606880 +Node: Assert Function609900 +Node: Round Function613224 +Node: Cliff Random Function614765 +Node: Ordinal Functions615781 +Ref: Ordinal Functions-Footnote-1618846 +Ref: Ordinal Functions-Footnote-2619098 +Node: Join Function619309 +Ref: Join Function-Footnote-1621080 +Node: Getlocaltime Function621280 +Node: Readfile Function625021 +Node: Shell Quoting626991 +Node: Data File Management628392 +Node: Filetrans Function629024 +Node: Rewind Function633083 +Node: File Checking634468 +Ref: File Checking-Footnote-1635796 +Node: Empty Files635997 +Node: Ignoring Assigns637976 +Node: Getopt Function639527 +Ref: Getopt Function-Footnote-1650987 +Node: Passwd Functions651190 +Ref: Passwd Functions-Footnote-1660041 +Node: Group Functions660129 +Ref: Group Functions-Footnote-1668032 +Node: Walking Arrays668245 +Node: Library Functions Summary669848 +Node: Library Exercises671249 +Node: Sample Programs672529 +Node: Running Examples673299 +Node: Clones674027 +Node: Cut Program675251 +Node: Egrep Program684981 +Ref: Egrep Program-Footnote-1692485 +Node: Id Program692595 +Node: Split Program696239 +Ref: Split Program-Footnote-1699685 +Node: Tee Program699813 +Node: Uniq Program702600 +Node: Wc Program710021 +Ref: Wc Program-Footnote-1714269 +Node: Miscellaneous Programs714361 +Node: Dupword Program715574 +Node: Alarm Program717605 +Node: Translate Program722409 +Ref: Translate Program-Footnote-1726973 +Node: Labels Program727243 +Ref: Labels Program-Footnote-1730592 +Node: Word Sorting730676 +Node: History Sorting734746 +Node: Extract Program736582 +Node: Simple Sed744114 +Node: Igawk Program747176 +Ref: Igawk Program-Footnote-1761502 +Ref: Igawk Program-Footnote-2761703 +Ref: Igawk Program-Footnote-3761825 +Node: Anagram Program761940 +Node: Signature Program765002 +Node: Programs Summary766249 +Node: Programs Exercises767442 +Ref: Programs Exercises-Footnote-1771573 +Node: Advanced Features771664 +Node: Nondecimal Data773612 +Node: Array Sorting775202 +Node: Controlling Array Traversal775899 +Ref: Controlling Array Traversal-Footnote-1784230 +Node: Array Sorting Functions784348 +Ref: Array Sorting Functions-Footnote-1788240 +Node: Two-way I/O788434 +Ref: Two-way I/O-Footnote-1793378 +Ref: Two-way I/O-Footnote-2793564 +Node: TCP/IP Networking793646 +Node: Profiling796518 +Node: Advanced Features Summary804062 +Node: Internationalization805995 +Node: I18N and L10N807475 +Node: Explaining gettext808161 +Ref: Explaining gettext-Footnote-1813190 +Ref: Explaining gettext-Footnote-2813374 +Node: Programmer i18n813539 +Ref: Programmer i18n-Footnote-1818405 +Node: Translator i18n818454 +Node: String Extraction819248 +Ref: String Extraction-Footnote-1820379 +Node: Printf Ordering820465 +Ref: Printf Ordering-Footnote-1823251 +Node: I18N Portability823315 +Ref: I18N Portability-Footnote-1825764 +Node: I18N Example825827 +Ref: I18N Example-Footnote-1828627 +Node: Gawk I18N828699 +Node: I18N Summary829337 +Node: Debugger830676 +Node: Debugging831698 +Node: Debugging Concepts832139 +Node: Debugging Terms833996 +Node: Awk Debugging836571 +Node: Sample Debugging Session837463 +Node: Debugger Invocation837983 +Node: Finding The Bug839367 +Node: List of Debugger Commands845842 +Node: Breakpoint Control847174 +Node: Debugger Execution Control850866 +Node: Viewing And Changing Data854230 +Node: Execution Stack857595 +Node: Debugger Info859233 +Node: Miscellaneous Debugger Commands863250 +Node: Readline Support868442 +Node: Limitations869334 +Node: Debugging Summary871431 +Node: Arbitrary Precision Arithmetic872599 +Node: Computer Arithmetic874015 +Ref: table-numeric-ranges877616 +Ref: Computer Arithmetic-Footnote-1878475 +Node: Math Definitions878532 +Ref: table-ieee-formats881819 +Ref: Math Definitions-Footnote-1882423 +Node: MPFR features882528 +Node: FP Math Caution884199 +Ref: FP Math Caution-Footnote-1885249 +Node: Inexactness of computations885618 +Node: Inexact representation886566 +Node: Comparing FP Values887921 +Node: Errors accumulate888994 +Node: Getting Accuracy890427 +Node: Try To Round893086 +Node: Setting precision893985 +Ref: table-predefined-precision-strings894669 +Node: Setting the rounding mode896463 +Ref: table-gawk-rounding-modes896827 +Ref: Setting the rounding mode-Footnote-1900281 +Node: Arbitrary Precision Integers900460 +Ref: Arbitrary Precision Integers-Footnote-1903451 +Node: POSIX Floating Point Problems903600 +Ref: POSIX Floating Point Problems-Footnote-1907476 +Node: Floating point summary907514 +Node: Dynamic Extensions909706 +Node: Extension Intro911258 +Node: Plugin License912524 +Node: Extension Mechanism Outline913321 +Ref: figure-load-extension913749 +Ref: figure-register-new-function915229 +Ref: figure-call-new-function916233 +Node: Extension API Description918219 +Node: Extension API Functions Introduction919669 +Node: General Data Types924505 +Ref: General Data Types-Footnote-1930192 +Node: Memory Allocation Functions930491 +Ref: Memory Allocation Functions-Footnote-1933321 +Node: Constructor Functions933417 +Node: Registration Functions935151 +Node: Extension Functions935836 +Node: Exit Callback Functions938132 +Node: Extension Version String939380 +Node: Input Parsers940030 +Node: Output Wrappers949845 +Node: Two-way processors954361 +Node: Printing Messages956565 +Ref: Printing Messages-Footnote-1957642 +Node: Updating `ERRNO'957794 +Node: Requesting Values958534 +Ref: table-value-types-returned959262 +Node: Accessing Parameters960220 +Node: Symbol Table Access961451 +Node: Symbol table by name961965 +Node: Symbol table by cookie963945 +Ref: Symbol table by cookie-Footnote-1968084 +Node: Cached values968147 +Ref: Cached values-Footnote-1971651 +Node: Array Manipulation971742 +Ref: Array Manipulation-Footnote-1972840 +Node: Array Data Types972879 +Ref: Array Data Types-Footnote-1975536 +Node: Array Functions975628 +Node: Flattening Arrays979482 +Node: Creating Arrays986369 +Node: Extension API Variables991136 +Node: Extension Versioning991772 +Node: Extension API Informational Variables993673 +Node: Extension API Boilerplate994761 +Node: Finding Extensions998577 +Node: Extension Example999137 +Node: Internal File Description999909 +Node: Internal File Ops1003976 +Ref: Internal File Ops-Footnote-11015634 +Node: Using Internal File Ops1015774 +Ref: Using Internal File Ops-Footnote-11018157 +Node: Extension Samples1018430 +Node: Extension Sample File Functions1019954 +Node: Extension Sample Fnmatch1027556 +Node: Extension Sample Fork1029038 +Node: Extension Sample Inplace1030251 +Node: Extension Sample Ord1031926 +Node: Extension Sample Readdir1032762 +Ref: table-readdir-file-types1033618 +Node: Extension Sample Revout1034429 +Node: Extension Sample Rev2way1035020 +Node: Extension Sample Read write array1035761 +Node: Extension Sample Readfile1037700 +Node: Extension Sample Time1038795 +Node: Extension Sample API Tests1040144 +Node: gawkextlib1040635 +Node: Extension summary1043285 +Node: Extension Exercises1046967 +Node: Language History1047689 +Node: V7/SVR3.11049346 +Node: SVR41051527 +Node: POSIX1052972 +Node: BTL1054361 +Node: POSIX/GNU1055095 +Node: Feature History1060664 +Node: Common Extensions1073755 +Node: Ranges and Locales1075079 +Ref: Ranges and Locales-Footnote-11079718 +Ref: Ranges and Locales-Footnote-21079745 +Ref: Ranges and Locales-Footnote-31079979 +Node: Contributors1080200 +Node: History summary1085740 +Node: Installation1087109 +Node: Gawk Distribution1088065 +Node: Getting1088549 +Node: Extracting1089373 +Node: Distribution contents1091015 +Node: Unix Installation1096732 +Node: Quick Installation1097349 +Node: Additional Configuration Options1099780 +Node: Configuration Philosophy1101520 +Node: Non-Unix Installation1103871 +Node: PC Installation1104329 +Node: PC Binary Installation1105655 +Node: PC Compiling1107503 +Ref: PC Compiling-Footnote-11110524 +Node: PC Testing1110629 +Node: PC Using1111805 +Node: Cygwin1115920 +Node: MSYS1116743 +Node: VMS Installation1117241 +Node: VMS Compilation1118033 +Ref: VMS Compilation-Footnote-11119255 +Node: VMS Dynamic Extensions1119313 +Node: VMS Installation Details1120997 +Node: VMS Running1123249 +Node: VMS GNV1126090 +Node: VMS Old Gawk1126824 +Node: Bugs1127294 +Node: Other Versions1131198 +Node: Installation summary1137411 +Node: Notes1138467 +Node: Compatibility Mode1139332 +Node: Additions1140114 +Node: Accessing The Source1141039 +Node: Adding Code1142475 +Node: New Ports1148647 +Node: Derived Files1153129 +Ref: Derived Files-Footnote-11158604 +Ref: Derived Files-Footnote-21158638 +Ref: Derived Files-Footnote-31159234 +Node: Future Extensions1159348 +Node: Implementation Limitations1159954 +Node: Extension Design1161202 +Node: Old Extension Problems1162356 +Ref: Old Extension Problems-Footnote-11163873 +Node: Extension New Mechanism Goals1163930 +Ref: Extension New Mechanism Goals-Footnote-11167290 +Node: Extension Other Design Decisions1167479 +Node: Extension Future Growth1169587 +Node: Old Extension Mechanism1170423 +Node: Notes summary1172185 +Node: Basic Concepts1173371 +Node: Basic High Level1174052 +Ref: figure-general-flow1174324 +Ref: figure-process-flow1174923 +Ref: Basic High Level-Footnote-11178152 +Node: Basic Data Typing1178337 +Node: Glossary1181665 +Node: Copying1206823 +Node: GNU Free Documentation License1244379 +Node: Index1269515 End Tag Table diff --git a/doc/gawk.texi b/doc/gawk.texi index e8e9b4c0..4cb6a781 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -433,8 +433,9 @@ particular records in a file and perform operations upon them. @end ifnottex @menu -* Foreword:: Some nice words about this +* Foreword3:: Some nice words about this @value{DOCUMENT}. +* Foreword4:: More nice words. * Preface:: What this @value{DOCUMENT} is about; brief history and acknowledgments. * Getting Started:: A basic introduction to using @@ -1062,8 +1063,8 @@ for enrichening our lives in innumerable ways. @summarycontents @contents -@node Foreword -@unnumbered Foreword +@node Foreword3 +@unnumbered Foreword to the Third Edition @c This bit is post-processed by a script which turns the chapter @c tag into a preface tag, and moves this stuff to before the title. @@ -1213,6 +1214,58 @@ March, 2001 @end display @end ifnotdocbook +@node Foreword4 +@unnumbered Foreword to the Fourth Edition + +@c This bit is post-processed by a script which turns the chapter +@c tag into a preface tag, and moves this stuff to before the title. +@c Bleah. +@docbook + <prefaceinfo> + <author> + <firstname>Michael</firstname> + <surname>Brennan</surname> + <!-- can't put mawk into command tags. sigh. --> + <affiliation><jobtitle>Author of mawk</jobtitle></affiliation> + </author> + <date>March, 2001</date> + </prefaceinfo> +@end docbook + +Some things don't change. Thirteen years ago I wrote: +``If you use AWK or want to learn how, then read this book.'' +True then and still true today. + +Learning to use a programming language is more than mastering the +syntax. One needs to acquire an understanding of how to use the +features of the language to solve practical programming problems. +A focus of this book is many examples that show how to use AWK. + +Some things do change. Our computers are much faster and have more memory. +Consequently, speed and storage inefficiencies of a high level language +matter less. Prototyping in AWK and then rewriting in C for performance +reasons happens less, because more often the prototype is fast enough. + +Of course, there are computing operations that are best done in C or C++. +With @command{gawk} 4.1 and later, you do not have to choose between writing +your program in AWK or in C/C++. You can write most of your +program in AWK and the aspects that require C/C++ capabilities can be written +in C/C++ and then the pieces glued together when the @command{gawk} module loads +the C/C++ module as a dynamic plug-in. +@c Chapter 16 +@ref{Dynamic Extensions}, +has all the +details, and as expected, many examples to help you learn the ins and outs. + +@ifnotdocbook +@cindex Brennan, Michael +@display +Michael Brennan +Author of @command{mawk} +October, 2014 +@end display +@end ifnotdocbook + @node Preface @unnumbered Preface @c I saw a comment somewhere that the preface should describe the book itself, diff --git a/doc/gawktexi.in b/doc/gawktexi.in index f9aea67e..001dd8b7 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -428,8 +428,9 @@ particular records in a file and perform operations upon them. @end ifnottex @menu -* Foreword:: Some nice words about this +* Foreword3:: Some nice words about this @value{DOCUMENT}. +* Foreword4:: More nice words. * Preface:: What this @value{DOCUMENT} is about; brief history and acknowledgments. * Getting Started:: A basic introduction to using @@ -1057,8 +1058,8 @@ for enrichening our lives in innumerable ways. @summarycontents @contents -@node Foreword -@unnumbered Foreword +@node Foreword3 +@unnumbered Foreword to the Third Edition @c This bit is post-processed by a script which turns the chapter @c tag into a preface tag, and moves this stuff to before the title. @@ -1208,6 +1209,58 @@ March, 2001 @end display @end ifnotdocbook +@node Foreword4 +@unnumbered Foreword to the Fourth Edition + +@c This bit is post-processed by a script which turns the chapter +@c tag into a preface tag, and moves this stuff to before the title. +@c Bleah. +@docbook + <prefaceinfo> + <author> + <firstname>Michael</firstname> + <surname>Brennan</surname> + <!-- can't put mawk into command tags. sigh. --> + <affiliation><jobtitle>Author of mawk</jobtitle></affiliation> + </author> + <date>March, 2001</date> + </prefaceinfo> +@end docbook + +Some things don't change. Thirteen years ago I wrote: +``If you use AWK or want to learn how, then read this book.'' +True then and still true today. + +Learning to use a programming language is more than mastering the +syntax. One needs to acquire an understanding of how to use the +features of the language to solve practical programming problems. +A focus of this book is many examples that show how to use AWK. + +Some things do change. Our computers are much faster and have more memory. +Consequently, speed and storage inefficiencies of a high level language +matter less. Prototyping in AWK and then rewriting in C for performance +reasons happens less, because more often the prototype is fast enough. + +Of course, there are computing operations that are best done in C or C++. +With @command{gawk} 4.1 and later, you do not have to choose between writing +your program in AWK or in C/C++. You can write most of your +program in AWK and the aspects that require C/C++ capabilities can be written +in C/C++ and then the pieces glued together when the @command{gawk} module loads +the C/C++ module as a dynamic plug-in. +@c Chapter 16 +@ref{Dynamic Extensions}, +has all the +details, and as expected, many examples to help you learn the ins and outs. + +@ifnotdocbook +@cindex Brennan, Michael +@display +Michael Brennan +Author of @command{mawk} +October, 2014 +@end display +@end ifnotdocbook + @node Preface @unnumbered Preface @c I saw a comment somewhere that the preface should describe the book itself, |