[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[SCM] gawk branch, gawk-5.3-stable, updated. gawk-4.1.0-5576-g374b32f6
From: |
Arnold Robbins |
Subject: |
[SCM] gawk branch, gawk-5.3-stable, updated. gawk-4.1.0-5576-g374b32f6 |
Date: |
Mon, 14 Oct 2024 22:56:13 -0400 (EDT) |
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "gawk".
The branch, gawk-5.3-stable has been updated
via 374b32f6a93ed0a4655d868dae73f0b01d550cd5 (commit)
via 702a898015e026b764ed62b040167164de1430e8 (commit)
via ddc2fabf6a75e4f49efb389a1c8e72b77ae804c7 (commit)
via ed7b21099b9211e16aa90fc9fc2fe17e64fa4b79 (commit)
via 97893028a0cd9c5cff59457bd27690deb6c9bfe4 (commit)
via 20728b62a4b4ec2d152c2f93d38b4ac07512ed20 (commit)
via c090bd9e5ad82ffc762d261586d0e783ca5278b6 (commit)
via eebe70843b364e347b357a98e85470f90ca10128 (commit)
via 95ecba4f6e90b744a4665af63695112c4a0939a4 (commit)
via 90e95db13e4dee2c7236bb387701b2dac6e94245 (commit)
via f6766756d749dc6e5219101140430cc86b8917a1 (commit)
via 70744b282d321e833683fcd09a4c80b69bd3997b (commit)
via 09c983cdb4192875bf8ddd8d7c63bf6bdc8d406d (commit)
via 7406a97847edad2f1761419844e4f834fe1eb98a (commit)
via 8a68083e8ae9d652738cd875c192e97aaf8cfde7 (commit)
via 1b3cfc9a134aa78a633f100e5d4ac73a643b05ba (commit)
via 796a1dc3be2578f509082a9034b89fff531ebcb4 (commit)
via 1ad7ce29a257d574c6908b21c838455eac0dfd49 (commit)
via 737c11fdedc21a449c00171d70b19293d6f9b937 (commit)
via 8eb585c64ce996e08f22cc3bbb6440fd983eec1b (commit)
via cac1f551ae51c9b2cd258a29fed8ba1fb9a22e41 (commit)
via 8ced7f38f9a28fbb40f915e6429d41ab79fd346b (commit)
via a157700d6354f16fb8c1a1921b4d6c7a766f7b76 (commit)
via db25f2786ad250aae18c6ea58d6f92b3730aa204 (commit)
via 32d0176354bff1de4e2d4a6dbe7b73a40524fdb7 (commit)
via 2584dcc110c4d2f5dcece14a39f5bfbe8cfae2b7 (commit)
via 2425ac76447a0965098315266f6178f7a34b575a (commit)
via b0406af3bfbc6b7fc1d039077ff6743e8a8623ea (commit)
via d05df39e2ddc2b150d0572238120ef52ffebc1c0 (commit)
via 8f0bc2a564b1fd83cc4eee8c6e75dd0a9dd1456f (commit)
from 9eda1211d76fd41200d1773f1cad3c96403894aa (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://git.sv.gnu.org/cgit/gawk.git/commit/?id=374b32f6a93ed0a4655d868dae73f0b01d550cd5
commit 374b32f6a93ed0a4655d868dae73f0b01d550cd5
Merge: 702a8980 ddc2fabf
Author: Arnold D. Robbins <arnold@skeeve.com>
Date: Tue Oct 15 05:55:39 2024 +0300
merge branch 'stable/fpat-doc' into gawk-5.3-stable
diff --cc doc/ChangeLog
index 61066e24,d3465a28..cfe3d4dc
--- a/doc/ChangeLog
+++ b/doc/ChangeLog
@@@ -1,9 -1,7 +1,13 @@@
+2024-10-15 Arnold D. Robbins <arnold@skeeve.com>
+
+ * gawk.texi (Gory Details): Use @multitable for the tables
+ instead of hand-crafted tables for each format. Motivated
+ by Thérèse Godefroy <godef.th@free.fr> to improve the HTML.
+
+ 2024-10-10 Arnold D. Robbins <arnold@skeeve.com>
+
+ * gawk.texi (Contributors): Add Stuart Ferguson.
+
2024-10-06 Arnold D. Robbins <arnold@skeeve.com>
* gawk.texi (Shadowed Variables): New section. Original
diff --cc doc/gawk.info
index 547d5048,1c4ec412..e0e99be8
--- a/doc/gawk.info
+++ b/doc/gawk.info
@@@ -40013,629 -39996,628 +39997,628 @@@ Inde
Tag Table:
Node: Top1203
- Node: Foreword347110
- Node: Foreword451684
- Node: Preface53228
- Ref: Preface-Footnote-156214
- Ref: Preface-Footnote-256323
- Ref: Preface-Footnote-356557
- Node: History56703
- Node: Names59317
- Ref: Names-Footnote-160471
- Node: This Manual60634
- Ref: This Manual-Footnote-167564
- Node: Conventions67672
- Node: Manual History70101
- Ref: Manual History-Footnote-173126
- Ref: Manual History-Footnote-273167
- Node: How To Contribute73241
- Node: Acknowledgments74187
- Node: Getting Started79176
- Node: Running gawk81703
- Node: One-shot82921
- Node: Read Terminal84220
- Node: Long86274
- Node: Executable Scripts87924
- Ref: Executable Scripts-Footnote-190694
- Node: Comments90801
- Node: Quoting93331
- Node: DOS Quoting98975
- Node: Sample Data Files101055
- Node: Very Simple103690
- Node: Two Rules109944
- Node: More Complex111896
- Node: Statements/Lines114316
- Ref: Statements/Lines-Footnote-1119828
- Node: Other Features120117
- Node: When121085
- Ref: When-Footnote-1122887
- Node: Intro Summary122952
- Node: Invoking Gawk123906
- Node: Command Line125468
- Node: Options126318
- Ref: Options-Footnote-1145660
- Ref: Options-Footnote-2145895
- Node: Other Arguments145920
- Node: Naming Standard Input150085
- Node: Environment Variables151355
- Node: AWKPATH Variable151929
- Ref: AWKPATH Variable-Footnote-1155513
- Ref: AWKPATH Variable-Footnote-2155547
- Node: AWKLIBPATH Variable155938
- Ref: AWKLIBPATH Variable-Footnote-1157713
- Node: Other Environment Variables158108
- Node: Exit Status162584
- Node: Include Files163297
- Node: Loading Shared Libraries167357
- Node: Obsolete168849
- Node: Undocumented169597
- Node: Invoking Summary169894
- Node: Regexp172919
- Node: Regexp Usage174413
- Node: Escape Sequences176514
- Ref: Escape Sequences-Footnote-1184049
- Node: Regexp Operators184127
- Node: Regexp Operator Details184620
- Ref: Regexp Operator Details-Footnote-1192631
- Node: Interval Expressions192790
- Ref: Interval Expressions-Footnote-1195057
- Node: Bracket Expressions195155
- Ref: table-char-classes197711
- Node: Leftmost Longest201209
- Node: Computed Regexps202565
- Node: GNU Regexp Operators206080
- Node: Case-sensitivity211177
- Ref: Case-sensitivity-Footnote-1214127
- Ref: Case-sensitivity-Footnote-2214370
- Node: Regexp Summary214482
- Node: Reading Files216004
- Node: Records218323
- Node: awk split records219598
- Node: gawk split records224480
- Ref: gawk split records-Footnote-1229768
- Node: Fields229805
- Ref: Fields-Footnote-1232721
- Node: Nonconstant Fields232841
- Ref: Nonconstant Fields-Footnote-1235149
- Node: Changing Fields235365
- Node: Field Separators241663
- Node: Default Field Splitting244532
- Node: Regexp Field Splitting245674
- Node: Single Character Fields249503
- Node: Comma Separated Fields250592
- Ref: table-csv-examples251996
- Node: Command Line Field Separator254295
- Node: Full Line Fields257671
- Ref: Full Line Fields-Footnote-1259249
- Ref: Full Line Fields-Footnote-2259295
- Node: Field Splitting Summary259400
- Node: Constant Size261717
- Node: Fixed width data262461
- Node: Skipping intervening265976
- Node: Allowing trailing data266778
- Node: Fields with fixed data267839
- Node: Splitting By Content269461
- Ref: Splitting By Content-Footnote-1273911
- Node: More CSV274074
- Node: FS versus FPAT275732
- Node: Testing field creation276932
- Node: Multiple Line278706
- Node: Getline285175
- Node: Plain Getline287763
- Node: Getline/Variable290411
- Node: Getline/File291607
- Node: Getline/Variable/File293055
- Ref: Getline/Variable/File-Footnote-1294700
- Node: Getline/Pipe294796
- Node: Getline/Variable/Pipe297604
- Node: Getline/Coprocess298787
- Node: Getline/Variable/Coprocess300110
- Node: Getline Notes300876
- Node: Getline Summary304853
- Ref: table-getline-variants305297
- Node: Read Timeout306201
- Ref: Read Timeout-Footnote-1310163
- Node: Retrying Input310221
- Node: Command-line directories311488
- Node: Input Summary312426
- Node: Input Exercises315806
- Node: Printing316244
- Node: Print318187
- Node: Print Examples319688
- Node: Output Separators322533
- Node: OFMT324640
- Node: Printf326353
- Node: Basic Printf327158
- Node: Control Letters328793
- Node: Format Modifiers334239
- Node: Printf Examples340511
- Node: Redirection343052
- Node: Special FD350824
- Ref: Special FD-Footnote-1354122
- Node: Special Files354200
- Node: Other Inherited Files354829
- Node: Special Network355894
- Node: Special Caveats356782
- Node: Close Files And Pipes357765
- Ref: Close Files And Pipes-Footnote-1363889
- Node: Close Return Value364037
- Ref: table-close-pipe-return-values365308
- Ref: Close Return Value-Footnote-1366139
- Node: Noflush366295
- Node: Nonfatal367803
- Node: Output Summary370218
- Node: Output Exercises371504
- Node: Expressions372195
- Node: Values373395
- Node: Constants374073
- Node: Scalar Constants374768
- Ref: Scalar Constants-Footnote-1377344
- Ref: Scalar Constants-Footnote-2377594
- Node: Nondecimal-numbers377674
- Node: Regexp Constants380787
- Node: Using Constant Regexps381333
- Node: Standard Regexp Constants381979
- Node: Strong Regexp Constants385275
- Node: Variables389118
- Node: Using Variables389783
- Node: Assignment Options391757
- Node: Conversion394308
- Node: Strings And Numbers394840
- Ref: Strings And Numbers-Footnote-1398050
- Node: Locale influences conversions398159
- Ref: table-locale-affects400997
- Node: All Operators401639
- Node: Arithmetic Ops402280
- Node: Concatenation405103
- Ref: Concatenation-Footnote-1408039
- Node: Assignment Ops408158
- Ref: table-assign-ops413285
- Node: Increment Ops414666
- Node: Truth Values and Conditions418257
- Node: Truth Values419351
- Node: Typing and Comparison420431
- Node: Variable Typing421263
- Ref: Variable Typing-Footnote-1427907
- Ref: Variable Typing-Footnote-2427987
- Node: Comparison Operators428068
- Ref: table-relational-ops428495
- Node: POSIX String Comparison432171
- Ref: POSIX String Comparison-Footnote-1433928
- Ref: POSIX String Comparison-Footnote-2434071
- Node: Boolean Ops434155
- Ref: Boolean Ops-Footnote-1438829
- Node: Conditional Exp438925
- Node: Function Calls440705
- Node: Precedence444652
- Node: Locales448515
- Node: Expressions Summary450191
- Node: Patterns and Actions452846
- Node: Pattern Overview453982
- Node: Regexp Patterns455707
- Node: Expression Patterns456253
- Node: Ranges460158
- Node: BEGIN/END463332
- Node: Using BEGIN/END464141
- Ref: Using BEGIN/END-Footnote-1467049
- Node: I/O And BEGIN/END467159
- Node: BEGINFILE/ENDFILE469641
- Node: Empty473071
- Node: Using Shell Variables473388
- Node: Action Overview475724
- Node: Statements478160
- Node: If Statement480056
- Node: While Statement481619
- Node: Do Statement483707
- Node: For Statement484891
- Node: Switch Statement488246
- Node: Break Statement490795
- Node: Continue Statement492987
- Node: Next Statement494918
- Node: Nextfile Statement497397
- Node: Exit Statement500250
- Node: Built-in Variables502777
- Node: User-modified503954
- Node: Auto-set512161
- Ref: Auto-set-Footnote-1530245
- Ref: Auto-set-Footnote-2530463
- Node: ARGC and ARGV530519
- Node: Pattern Action Summary534948
- Node: Arrays537554
- Node: Array Basics538927
- Node: Array Intro539775
- Ref: figure-array-elements541786
- Ref: Array Intro-Footnote-1544639
- Node: Reference to Elements544771
- Node: Assigning Elements547291
- Node: Array Example547786
- Node: Scanning an Array549748
- Node: Controlling Scanning552843
- Ref: Controlling Scanning-Footnote-1559478
- Node: Numeric Array Subscripts559802
- Node: Uninitialized Subscripts562070
- Node: Delete563743
- Ref: Delete-Footnote-1566555
- Node: Multidimensional566612
- Node: Multiscanning569815
- Node: Arrays of Arrays571482
- Node: Arrays Summary575786
- Node: Functions577973
- Node: Built-in579175
- Node: Calling Built-in580364
- Node: Boolean Functions582404
- Node: Numeric Functions582966
- Ref: Numeric Functions-Footnote-1587151
- Ref: Numeric Functions-Footnote-2587834
- Ref: Numeric Functions-Footnote-3587886
- Node: String Functions588162
- Ref: String Functions-Footnote-1614613
- Ref: String Functions-Footnote-2614745
- Ref: String Functions-Footnote-3615001
- Node: Gory Details615088
- Ref: table-sub-escapes617097
- Ref: table-sub-proposed618649
- Ref: table-posix-sub620123
- Ref: table-gensub-escapes621775
- Ref: Gory Details-Footnote-1622603
- Node: I/O Functions622757
- Ref: table-system-return-values629433
- Ref: I/O Functions-Footnote-1631595
- Ref: I/O Functions-Footnote-2631743
- Node: Time Functions631863
- Ref: Time Functions-Footnote-1643575
- Ref: Time Functions-Footnote-2643643
- Ref: Time Functions-Footnote-3643805
- Ref: Time Functions-Footnote-4643916
- Ref: Time Functions-Footnote-5644032
- Ref: Time Functions-Footnote-6644259
- Node: Bitwise Functions644537
- Ref: table-bitwise-ops645135
- Ref: Bitwise Functions-Footnote-1651377
- Ref: Bitwise Functions-Footnote-2651554
- Node: Type Functions651749
- Node: I18N Functions653920
- Node: User-defined655655
- Node: Definition Syntax656401
- Ref: Definition Syntax-Footnote-1662256
- Node: Function Example662331
- Ref: Function Example-Footnote-1665310
- Node: Function Calling665332
- Node: Calling A Function665924
- Node: Variable Scope666894
- Node: Pass By Value/Reference669948
- Node: Function Caveats672676
- Ref: Function Caveats-Footnote-1674767
- Node: Return Statement674887
- Node: Dynamic Typing677919
- Node: Dynamic Typing Awk678501
- Node: Dynamic Typing Gawk680639
- Node: Shadowed Variables684009
- Node: Indirect Calls686357
- Node: Functions Summary697498
- Node: Library Functions700464
- Ref: Library Functions-Footnote-1704012
- Ref: Library Functions-Footnote-2704157
- Node: Library Names704332
- Ref: Library Names-Footnote-1708103
- Ref: Library Names-Footnote-2708330
- Node: General Functions708424
- Node: Strtonum Function709694
- Node: Assert Function712776
- Node: Round Function716226
- Node: Cliff Random Function717798
- Node: Ordinal Functions718822
- Ref: Ordinal Functions-Footnote-1721925
- Ref: Ordinal Functions-Footnote-2722177
- Node: Join Function722391
- Ref: Join Function-Footnote-1724189
- Node: Getlocaltime Function724393
- Node: Readfile Function728167
- Node: Shell Quoting730196
- Node: Isnumeric Function731652
- Node: To CSV Function733088
- Node: Data File Management735180
- Node: Filetrans Function735812
- Node: Rewind Function740088
- Node: File Checking742059
- Ref: File Checking-Footnote-1743425
- Node: Empty Files743630
- Node: Ignoring Assigns745693
- Node: Getopt Function747267
- Ref: Getopt Function-Footnote-1763085
- Node: Passwd Functions763297
- Ref: Passwd Functions-Footnote-1772432
- Node: Group Functions772520
- Ref: Group Functions-Footnote-1780644
- Node: Walking Arrays780855
- Node: Library Functions Summary783901
- Node: Library Exercises785321
- Node: Sample Programs785806
- Node: Running Examples786588
- Node: Clones787340
- Node: Cut Program788608
- Node: Egrep Program799032
- Node: Id Program808331
- Node: Split Program818423
- Ref: Split Program-Footnote-1828636
- Node: Tee Program828821
- Node: Uniq Program831727
- Node: Wc Program839587
- Node: Bytes vs. Characters839982
- Node: Using extensions841582
- Node: wc program842360
- Node: Miscellaneous Programs847353
- Node: Dupword Program848578
- Node: Alarm Program850627
- Node: Translate Program855530
- Ref: Translate Program-Footnote-1860239
- Node: Labels Program860517
- Ref: Labels Program-Footnote-1863952
- Node: Word Sorting864036
- Node: History Sorting868210
- Node: Extract Program870483
- Node: Simple Sed878736
- Node: Igawk Program881946
- Ref: Igawk Program-Footnote-1897156
- Ref: Igawk Program-Footnote-2897362
- Ref: Igawk Program-Footnote-3897492
- Node: Anagram Program897619
- Node: Signature Program900705
- Node: Programs Summary901955
- Node: Programs Exercises903209
- Ref: Programs Exercises-Footnote-1908038
- Node: Advanced Features908124
- Node: Nondecimal Data910605
- Node: Boolean Typed Values912235
- Node: Array Sorting914192
- Node: Controlling Array Traversal914921
- Ref: Controlling Array Traversal-Footnote-1923424
- Node: Array Sorting Functions923546
- Ref: Array Sorting Functions-Footnote-1929643
- Node: Two-way I/O929851
- Ref: Two-way I/O-Footnote-1937822
- Ref: Two-way I/O-Footnote-2938013
- Node: TCP/IP Networking938095
- Node: Profiling941263
- Node: Persistent Memory950933
- Ref: Persistent Memory-Footnote-1960505
- Node: Extension Philosophy960636
- Node: Advanced Features Summary962163
- Node: Internationalization964429
- Node: I18N and L10N966131
- Node: Explaining gettext966826
- Ref: Explaining gettext-Footnote-1972962
- Ref: Explaining gettext-Footnote-2973155
- Node: Programmer i18n973320
- Ref: Programmer i18n-Footnote-1978432
- Node: Translator i18n978481
- Node: String Extraction979311
- Ref: String Extraction-Footnote-1980487
- Node: Printf Ordering980585
- Ref: Printf Ordering-Footnote-1983443
- Node: I18N Portability983511
- Ref: I18N Portability-Footnote-1986071
- Node: I18N Example986138
- Ref: I18N Example-Footnote-1989532
- Ref: I18N Example-Footnote-2989605
- Node: Gawk I18N989722
- Node: I18N Summary990376
- Node: Debugger991773
- Node: Debugging992793
- Node: Debugging Concepts993242
- Node: Debugging Terms995059
- Node: Awk Debugging997662
- Ref: Awk Debugging-Footnote-1998635
- Node: Sample Debugging Session998771
- Node: Debugger Invocation999321
- Node: Finding The Bug1000946
- Node: List of Debugger Commands1007578
- Node: Breakpoint Control1008955
- Node: Debugger Execution Control1012777
- Node: Viewing And Changing Data1016251
- Node: Execution Stack1019985
- Node: Debugger Info1021666
- Node: Miscellaneous Debugger Commands1025961
- Node: Readline Support1031202
- Node: Limitations1032146
- Node: Debugging Summary1034770
- Node: Namespaces1036069
- Node: Global Namespace1037196
- Node: Qualified Names1038630
- Node: Default Namespace1039665
- Node: Changing The Namespace1040438
- Node: Naming Rules1042120
- Node: Internal Name Management1044075
- Node: Namespace Example1045145
- Node: Namespace And Features1047722
- Node: Namespace Summary1049177
- Node: Arbitrary Precision Arithmetic1050688
- Node: Computer Arithmetic1052207
- Ref: table-numeric-ranges1056132
- Ref: table-floating-point-ranges1056629
- Ref: Computer Arithmetic-Footnote-11057287
- Node: Math Definitions1057344
- Ref: table-ieee-formats1060376
- Node: MPFR features1060949
- Node: MPFR On Parole1061402
- Ref: MPFR On Parole-Footnote-11062243
- Node: MPFR Intro1062402
- Node: FP Math Caution1064086
- Ref: FP Math Caution-Footnote-11065158
- Node: Inexactness of computations1065531
- Node: Inexact representation1066562
- Node: Comparing FP Values1067943
- Node: Errors accumulate1069201
- Node: Strange values1070666
- Ref: Strange values-Footnote-11073320
- Node: Getting Accuracy1073425
- Node: Try To Round1076162
- Node: Setting precision1077069
- Ref: table-predefined-precision-strings1077774
- Node: Setting the rounding mode1079658
- Ref: table-gawk-rounding-modes1080040
- Ref: Setting the rounding mode-Footnote-11084092
- Node: Arbitrary Precision Integers1084277
- Ref: Arbitrary Precision Integers-Footnote-11087487
- Node: Checking for MPFR1087640
- Node: POSIX Floating Point Problems1089130
- Ref: POSIX Floating Point Problems-Footnote-11093950
- Node: Floating point summary1093988
- Node: Dynamic Extensions1096244
- Node: Extension Intro1097841
- Node: Plugin License1099143
- Node: Extension Mechanism Outline1099956
- Ref: figure-load-extension1100407
- Ref: figure-register-new-function1101985
- Ref: figure-call-new-function1103094
- Node: Extension API Description1105209
- Node: Extension API Functions Introduction1106938
- Ref: table-api-std-headers1108832
- Node: General Data Types1113273
- Ref: General Data Types-Footnote-11122419
- Node: Memory Allocation Functions1122722
- Ref: Memory Allocation Functions-Footnote-11127437
- Node: Constructor Functions1127536
- Node: API Ownership of MPFR and GMP Values1131437
- Node: Registration Functions1132990
- Node: Extension Functions1133694
- Node: Exit Callback Functions1139268
- Node: Extension Version String1140582
- Node: Input Parsers1141277
- Node: Output Wrappers1155896
- Node: Two-way processors1160738
- Node: Printing Messages1163091
- Ref: Printing Messages-Footnote-11164302
- Node: Updating ERRNO1164455
- Node: Requesting Values1165254
- Ref: table-value-types-returned1166007
- Node: Accessing Parameters1168066
- Node: Symbol Table Access1169347
- Node: Symbol table by name1169859
- Ref: Symbol table by name-Footnote-11173060
- Node: Symbol table by cookie1173192
- Ref: Symbol table by cookie-Footnote-11177461
- Node: Cached values1177525
- Ref: Cached values-Footnote-11181157
- Node: Array Manipulation1181314
- Ref: Array Manipulation-Footnote-11182413
- Node: Array Data Types1182450
- Ref: Array Data Types-Footnote-11185268
- Node: Array Functions1185364
- Node: Flattening Arrays1190393
- Node: Creating Arrays1197441
- Node: Redirection API1202283
- Node: Extension API Variables1205300
- Node: Extension Versioning1206023
- Ref: gawk-api-version1206452
- Node: Extension GMP/MPFR Versioning1208239
- Node: Extension API Informational Variables1209943
- Node: Extension API Boilerplate1211196
- Node: Changes from API V11215326
- Node: Finding Extensions1216958
- Node: Extension Example1217533
- Node: Internal File Description1218355
- Node: Internal File Ops1222647
- Ref: Internal File Ops-Footnote-11234197
- Node: Using Internal File Ops1234345
- Ref: Using Internal File Ops-Footnote-11236778
- Node: Extension Samples1237056
- Node: Extension Sample File Functions1238625
- Node: Extension Sample Fnmatch1246750
- Node: Extension Sample Fork1248345
- Node: Extension Sample Inplace1249621
- Node: Extension Sample Ord1253723
- Node: Extension Sample Readdir1254599
- Ref: table-readdir-file-types1255388
- Node: Extension Sample Revout1256744
- Node: Extension Sample Rev2way1257341
- Node: Extension Sample Read write array1258093
- Node: Extension Sample Readfile1261367
- Node: Extension Sample Time1262498
- Node: Extension Sample API Tests1264498
- Node: gawkextlib1265006
- Node: Extension summary1268038
- Node: Extension Exercises1271886
- Node: Language History1273156
- Node: V7/SVR3.11274868
- Node: SVR41277218
- Node: POSIX1278750
- Node: BTL1280175
- Node: POSIX/GNU1280942
- Ref: Gawk Extension Functions1284332
- Node: Feature History1287756
- Node: Common Extensions1307597
- Node: Ranges and Locales1309072
- Ref: Ranges and Locales-Footnote-11313857
- Ref: Ranges and Locales-Footnote-21313884
- Ref: Ranges and Locales-Footnote-31314119
- Node: Contributors1314342
- Node: History summary1320619
- Node: Installation1322061
- Node: Gawk Distribution1323025
- Node: Getting1323517
- Node: Extracting1324516
- Node: Distribution contents1326222
- Node: Unix Installation1334112
- Node: Quick Installation1334932
- Node: Compiling with MPFR1337472
- Node: Shell Startup Files1338178
- Node: Additional Configuration Options1339335
- Node: Configuration Philosophy1341718
- Node: Compiling from Git1344218
- Node: Building the Documentation1344777
- Node: Non-Unix Installation1346189
- Node: PC Installation1346665
- Node: PC Binary Installation1347534
- Node: PC Compiling1348427
- Node: PC Using1349605
- Node: Cygwin1353321
- Node: MSYS1354573
- Node: OpenVMS Installation1355199
- Node: OpenVMS Compilation1355880
- Ref: OpenVMS Compilation-Footnote-11357363
- Node: OpenVMS Dynamic Extensions1357421
- Node: OpenVMS Installation Details1359057
- Node: OpenVMS Running1361488
- Node: OpenVMS GNV1365625
- Node: Bugs1366380
- Node: Bug definition1367300
- Node: Bug address1370901
- Node: Usenet1374470
- Node: Performance bugs1375683
- Node: Asking for help1378687
- Node: Maintainers1380674
- Node: Other Versions1381701
- Node: Installation summary1391690
- Node: Notes1393072
- Node: Compatibility Mode1393882
- Node: Additions1394704
- Node: Accessing The Source1395649
- Node: Adding Code1397180
- Node: New Ports1404291
- Node: Derived Files1408794
- Ref: Derived Files-Footnote-11414605
- Ref: Derived Files-Footnote-21414640
- Ref: Derived Files-Footnote-31415251
- Node: Future Extensions1415365
- Node: Implementation Limitations1416035
- Node: Extension Design1417277
- Node: Old Extension Problems1418437
- Ref: Old Extension Problems-Footnote-11420009
- Node: Extension New Mechanism Goals1420070
- Ref: Extension New Mechanism Goals-Footnote-11423540
- Node: Extension Other Design Decisions1423741
- Node: Extension Future Growth1425938
- Node: Notes summary1426558
- Node: Basic Concepts1427768
- Node: Basic High Level1428453
- Ref: figure-general-flow1428735
- Ref: figure-process-flow1429437
- Ref: Basic High Level-Footnote-11432807
- Node: Basic Data Typing1432996
- Node: Glossary1436404
- Node: Copying1469282
- Node: GNU Free Documentation License1506840
- Node: Index1531963
+ Node: Foreword347051
+ Node: Foreword451625
+ Node: Preface53169
+ Ref: Preface-Footnote-156155
+ Ref: Preface-Footnote-256264
+ Ref: Preface-Footnote-356498
+ Node: History56644
+ Node: Names59258
+ Ref: Names-Footnote-160412
+ Node: This Manual60575
+ Ref: This Manual-Footnote-167505
+ Node: Conventions67613
+ Node: Manual History70042
+ Ref: Manual History-Footnote-173067
+ Ref: Manual History-Footnote-273108
+ Node: How To Contribute73182
+ Node: Acknowledgments74128
+ Node: Getting Started79117
+ Node: Running gawk81644
+ Node: One-shot82862
+ Node: Read Terminal84161
+ Node: Long86215
+ Node: Executable Scripts87865
+ Ref: Executable Scripts-Footnote-190635
+ Node: Comments90742
+ Node: Quoting93272
+ Node: DOS Quoting98916
+ Node: Sample Data Files100996
+ Node: Very Simple103631
+ Node: Two Rules109885
+ Node: More Complex111837
+ Node: Statements/Lines114257
+ Ref: Statements/Lines-Footnote-1119769
+ Node: Other Features120058
+ Node: When121026
+ Ref: When-Footnote-1122828
+ Node: Intro Summary122893
+ Node: Invoking Gawk123847
+ Node: Command Line125409
+ Node: Options126259
+ Ref: Options-Footnote-1145601
+ Ref: Options-Footnote-2145836
+ Node: Other Arguments145861
+ Node: Naming Standard Input150026
+ Node: Environment Variables151296
+ Node: AWKPATH Variable151870
+ Ref: AWKPATH Variable-Footnote-1155454
+ Ref: AWKPATH Variable-Footnote-2155488
+ Node: AWKLIBPATH Variable155879
+ Ref: AWKLIBPATH Variable-Footnote-1157654
+ Node: Other Environment Variables158049
+ Node: Exit Status162525
+ Node: Include Files163238
+ Node: Loading Shared Libraries167298
+ Node: Obsolete168790
+ Node: Undocumented169538
+ Node: Invoking Summary169835
+ Node: Regexp172860
+ Node: Regexp Usage174354
+ Node: Escape Sequences176455
+ Ref: Escape Sequences-Footnote-1183990
+ Node: Regexp Operators184068
+ Node: Regexp Operator Details184561
+ Ref: Regexp Operator Details-Footnote-1192572
+ Node: Interval Expressions192731
+ Ref: Interval Expressions-Footnote-1194998
+ Node: Bracket Expressions195096
+ Ref: table-char-classes197652
+ Node: Leftmost Longest201150
+ Node: Computed Regexps202506
+ Node: GNU Regexp Operators206021
+ Node: Case-sensitivity211118
+ Ref: Case-sensitivity-Footnote-1214068
+ Ref: Case-sensitivity-Footnote-2214311
+ Node: Regexp Summary214423
+ Node: Reading Files215945
+ Node: Records218264
+ Node: awk split records219539
+ Node: gawk split records224421
+ Ref: gawk split records-Footnote-1229709
+ Node: Fields229746
+ Ref: Fields-Footnote-1232662
+ Node: Nonconstant Fields232782
+ Ref: Nonconstant Fields-Footnote-1235090
+ Node: Changing Fields235306
+ Node: Field Separators241604
+ Node: Default Field Splitting244473
+ Node: Regexp Field Splitting245615
+ Node: Single Character Fields249444
+ Node: Comma Separated Fields250533
+ Ref: table-csv-examples251937
+ Node: Command Line Field Separator254236
+ Node: Full Line Fields257612
+ Ref: Full Line Fields-Footnote-1259190
+ Ref: Full Line Fields-Footnote-2259236
+ Node: Field Splitting Summary259341
+ Node: Constant Size261658
+ Node: Fixed width data262402
+ Node: Skipping intervening265917
+ Node: Allowing trailing data266719
+ Node: Fields with fixed data267780
+ Node: Splitting By Content269402
+ Ref: Splitting By Content-Footnote-1274896
+ Node: FS versus FPAT275059
+ Node: Testing field creation276242
+ Node: Multiple Line278016
+ Node: Getline284485
+ Node: Plain Getline287073
+ Node: Getline/Variable289721
+ Node: Getline/File290917
+ Node: Getline/Variable/File292365
+ Ref: Getline/Variable/File-Footnote-1294010
+ Node: Getline/Pipe294106
+ Node: Getline/Variable/Pipe296914
+ Node: Getline/Coprocess298097
+ Node: Getline/Variable/Coprocess299420
+ Node: Getline Notes300186
+ Node: Getline Summary304163
+ Ref: table-getline-variants304607
+ Node: Read Timeout305511
+ Ref: Read Timeout-Footnote-1309473
+ Node: Retrying Input309531
+ Node: Command-line directories310798
+ Node: Input Summary311736
+ Node: Input Exercises315116
+ Node: Printing315554
+ Node: Print317497
+ Node: Print Examples318998
+ Node: Output Separators321843
+ Node: OFMT323950
+ Node: Printf325663
+ Node: Basic Printf326468
+ Node: Control Letters328103
+ Node: Format Modifiers333549
+ Node: Printf Examples339821
+ Node: Redirection342362
+ Node: Special FD350134
+ Ref: Special FD-Footnote-1353432
+ Node: Special Files353510
+ Node: Other Inherited Files354139
+ Node: Special Network355204
+ Node: Special Caveats356092
+ Node: Close Files And Pipes357075
+ Ref: Close Files And Pipes-Footnote-1363199
+ Node: Close Return Value363347
+ Ref: table-close-pipe-return-values364618
+ Ref: Close Return Value-Footnote-1365449
+ Node: Noflush365605
+ Node: Nonfatal367113
+ Node: Output Summary369528
+ Node: Output Exercises370814
+ Node: Expressions371505
+ Node: Values372705
+ Node: Constants373383
+ Node: Scalar Constants374078
+ Ref: Scalar Constants-Footnote-1376654
+ Ref: Scalar Constants-Footnote-2376904
+ Node: Nondecimal-numbers376984
+ Node: Regexp Constants380097
+ Node: Using Constant Regexps380643
+ Node: Standard Regexp Constants381289
+ Node: Strong Regexp Constants384585
+ Node: Variables388428
+ Node: Using Variables389093
+ Node: Assignment Options391067
+ Node: Conversion393618
+ Node: Strings And Numbers394150
+ Ref: Strings And Numbers-Footnote-1397360
+ Node: Locale influences conversions397469
+ Ref: table-locale-affects400307
+ Node: All Operators400949
+ Node: Arithmetic Ops401590
+ Node: Concatenation404413
+ Ref: Concatenation-Footnote-1407349
+ Node: Assignment Ops407468
+ Ref: table-assign-ops412595
+ Node: Increment Ops413976
+ Node: Truth Values and Conditions417567
+ Node: Truth Values418661
+ Node: Typing and Comparison419741
+ Node: Variable Typing420573
+ Ref: Variable Typing-Footnote-1427217
+ Ref: Variable Typing-Footnote-2427297
+ Node: Comparison Operators427378
+ Ref: table-relational-ops427805
+ Node: POSIX String Comparison431481
+ Ref: POSIX String Comparison-Footnote-1433238
+ Ref: POSIX String Comparison-Footnote-2433381
+ Node: Boolean Ops433465
+ Ref: Boolean Ops-Footnote-1438139
+ Node: Conditional Exp438235
+ Node: Function Calls440015
+ Node: Precedence443962
+ Node: Locales447825
+ Node: Expressions Summary449501
+ Node: Patterns and Actions452156
+ Node: Pattern Overview453292
+ Node: Regexp Patterns455017
+ Node: Expression Patterns455563
+ Node: Ranges459468
+ Node: BEGIN/END462642
+ Node: Using BEGIN/END463451
+ Ref: Using BEGIN/END-Footnote-1466359
+ Node: I/O And BEGIN/END466469
+ Node: BEGINFILE/ENDFILE468951
+ Node: Empty472381
+ Node: Using Shell Variables472698
+ Node: Action Overview475034
+ Node: Statements477470
+ Node: If Statement479366
+ Node: While Statement480929
+ Node: Do Statement483017
+ Node: For Statement484201
+ Node: Switch Statement487556
+ Node: Break Statement490105
+ Node: Continue Statement492297
+ Node: Next Statement494228
+ Node: Nextfile Statement496707
+ Node: Exit Statement499560
+ Node: Built-in Variables502087
+ Node: User-modified503264
+ Node: Auto-set511471
+ Ref: Auto-set-Footnote-1529555
+ Ref: Auto-set-Footnote-2529773
+ Node: ARGC and ARGV529829
+ Node: Pattern Action Summary534258
+ Node: Arrays536864
+ Node: Array Basics538237
+ Node: Array Intro539085
+ Ref: figure-array-elements541096
+ Ref: Array Intro-Footnote-1543949
+ Node: Reference to Elements544081
+ Node: Assigning Elements546601
+ Node: Array Example547096
+ Node: Scanning an Array549058
+ Node: Controlling Scanning552153
+ Ref: Controlling Scanning-Footnote-1558788
+ Node: Numeric Array Subscripts559112
+ Node: Uninitialized Subscripts561380
+ Node: Delete563053
+ Ref: Delete-Footnote-1565865
+ Node: Multidimensional565922
+ Node: Multiscanning569125
+ Node: Arrays of Arrays570792
+ Node: Arrays Summary575096
+ Node: Functions577283
+ Node: Built-in578485
+ Node: Calling Built-in579674
+ Node: Boolean Functions581714
+ Node: Numeric Functions582276
+ Ref: Numeric Functions-Footnote-1586461
+ Ref: Numeric Functions-Footnote-2587144
+ Ref: Numeric Functions-Footnote-3587196
+ Node: String Functions587472
+ Ref: String Functions-Footnote-1613923
+ Ref: String Functions-Footnote-2614055
+ Ref: String Functions-Footnote-3614311
+ Node: Gory Details614398
+ Ref: table-sub-escapes616407
-Ref: table-sub-proposed618038
-Ref: table-posix-sub619533
-Ref: table-gensub-escapes621206
-Ref: Gory Details-Footnote-1622125
-Node: I/O Functions622279
-Ref: table-system-return-values628955
-Ref: I/O Functions-Footnote-1631117
-Ref: I/O Functions-Footnote-2631265
-Node: Time Functions631385
-Ref: Time Functions-Footnote-1643097
-Ref: Time Functions-Footnote-2643165
-Ref: Time Functions-Footnote-3643327
-Ref: Time Functions-Footnote-4643438
-Ref: Time Functions-Footnote-5643554
-Ref: Time Functions-Footnote-6643781
-Node: Bitwise Functions644059
-Ref: table-bitwise-ops644657
-Ref: Bitwise Functions-Footnote-1650899
-Ref: Bitwise Functions-Footnote-2651076
-Node: Type Functions651271
-Node: I18N Functions653442
-Node: User-defined655177
-Node: Definition Syntax655923
-Ref: Definition Syntax-Footnote-1661778
-Node: Function Example661853
-Ref: Function Example-Footnote-1664832
-Node: Function Calling664854
-Node: Calling A Function665446
-Node: Variable Scope666416
-Node: Pass By Value/Reference669470
-Node: Function Caveats672198
-Ref: Function Caveats-Footnote-1674289
-Node: Return Statement674409
-Node: Dynamic Typing677441
-Node: Dynamic Typing Awk678023
-Node: Dynamic Typing Gawk680161
-Node: Shadowed Variables683531
-Node: Indirect Calls685879
-Node: Functions Summary697020
-Node: Library Functions699986
-Ref: Library Functions-Footnote-1703534
-Ref: Library Functions-Footnote-2703679
-Node: Library Names703854
-Ref: Library Names-Footnote-1707625
-Ref: Library Names-Footnote-2707852
-Node: General Functions707946
-Node: Strtonum Function709216
-Node: Assert Function712298
-Node: Round Function715748
-Node: Cliff Random Function717320
-Node: Ordinal Functions718344
-Ref: Ordinal Functions-Footnote-1721447
-Ref: Ordinal Functions-Footnote-2721699
-Node: Join Function721913
-Ref: Join Function-Footnote-1723711
-Node: Getlocaltime Function723915
-Node: Readfile Function727689
-Node: Shell Quoting729718
-Node: Isnumeric Function731174
-Node: To CSV Function732610
-Node: Data File Management734702
-Node: Filetrans Function735334
-Node: Rewind Function739610
-Node: File Checking741581
-Ref: File Checking-Footnote-1742947
-Node: Empty Files743152
-Node: Ignoring Assigns745215
-Node: Getopt Function746789
-Ref: Getopt Function-Footnote-1762607
-Node: Passwd Functions762819
-Ref: Passwd Functions-Footnote-1771954
-Node: Group Functions772042
-Ref: Group Functions-Footnote-1780166
-Node: Walking Arrays780377
-Node: Library Functions Summary783423
-Node: Library Exercises784843
-Node: Sample Programs785328
-Node: Running Examples786110
-Node: Clones786862
-Node: Cut Program788130
-Node: Egrep Program798554
-Node: Id Program807853
-Node: Split Program817945
-Ref: Split Program-Footnote-1828158
-Node: Tee Program828343
-Node: Uniq Program831249
-Node: Wc Program839109
-Node: Bytes vs. Characters839504
-Node: Using extensions841104
-Node: wc program841882
-Node: Miscellaneous Programs846875
-Node: Dupword Program848100
-Node: Alarm Program850149
-Node: Translate Program855052
-Ref: Translate Program-Footnote-1859761
-Node: Labels Program860039
-Ref: Labels Program-Footnote-1863474
-Node: Word Sorting863558
-Node: History Sorting867732
-Node: Extract Program870005
-Node: Simple Sed878258
-Node: Igawk Program881468
-Ref: Igawk Program-Footnote-1896678
-Ref: Igawk Program-Footnote-2896884
-Ref: Igawk Program-Footnote-3897014
-Node: Anagram Program897141
-Node: Signature Program900227
-Node: Programs Summary901477
-Node: Programs Exercises902731
-Ref: Programs Exercises-Footnote-1907560
-Node: Advanced Features907646
-Node: Nondecimal Data910127
-Node: Boolean Typed Values911757
-Node: Array Sorting913714
-Node: Controlling Array Traversal914443
-Ref: Controlling Array Traversal-Footnote-1922946
-Node: Array Sorting Functions923068
-Ref: Array Sorting Functions-Footnote-1929165
-Node: Two-way I/O929373
-Ref: Two-way I/O-Footnote-1937344
-Ref: Two-way I/O-Footnote-2937535
-Node: TCP/IP Networking937617
-Node: Profiling940785
-Node: Persistent Memory950455
-Ref: Persistent Memory-Footnote-1960027
-Node: Extension Philosophy960158
-Node: Advanced Features Summary961685
-Node: Internationalization963951
-Node: I18N and L10N965653
-Node: Explaining gettext966348
-Ref: Explaining gettext-Footnote-1972484
-Ref: Explaining gettext-Footnote-2972677
-Node: Programmer i18n972842
-Ref: Programmer i18n-Footnote-1977954
-Node: Translator i18n978003
-Node: String Extraction978833
-Ref: String Extraction-Footnote-1980009
-Node: Printf Ordering980107
-Ref: Printf Ordering-Footnote-1982965
-Node: I18N Portability983033
-Ref: I18N Portability-Footnote-1985593
-Node: I18N Example985660
-Ref: I18N Example-Footnote-1989054
-Ref: I18N Example-Footnote-2989127
-Node: Gawk I18N989244
-Node: I18N Summary989898
-Node: Debugger991295
-Node: Debugging992315
-Node: Debugging Concepts992764
-Node: Debugging Terms994581
-Node: Awk Debugging997184
-Ref: Awk Debugging-Footnote-1998157
-Node: Sample Debugging Session998293
-Node: Debugger Invocation998843
-Node: Finding The Bug1000468
-Node: List of Debugger Commands1007100
-Node: Breakpoint Control1008477
-Node: Debugger Execution Control1012299
-Node: Viewing And Changing Data1015773
-Node: Execution Stack1019507
-Node: Debugger Info1021188
-Node: Miscellaneous Debugger Commands1025483
-Node: Readline Support1030724
-Node: Limitations1031668
-Node: Debugging Summary1034292
-Node: Namespaces1035591
-Node: Global Namespace1036718
-Node: Qualified Names1038152
-Node: Default Namespace1039187
-Node: Changing The Namespace1039960
-Node: Naming Rules1041642
-Node: Internal Name Management1043597
-Node: Namespace Example1044667
-Node: Namespace And Features1047244
-Node: Namespace Summary1048699
-Node: Arbitrary Precision Arithmetic1050210
-Node: Computer Arithmetic1051729
-Ref: table-numeric-ranges1055654
-Ref: table-floating-point-ranges1056151
-Ref: Computer Arithmetic-Footnote-11056809
-Node: Math Definitions1056866
-Ref: table-ieee-formats1059898
-Node: MPFR features1060471
-Node: MPFR On Parole1060924
-Ref: MPFR On Parole-Footnote-11061765
-Node: MPFR Intro1061924
-Node: FP Math Caution1063608
-Ref: FP Math Caution-Footnote-11064680
-Node: Inexactness of computations1065053
-Node: Inexact representation1066084
-Node: Comparing FP Values1067465
-Node: Errors accumulate1068723
-Node: Strange values1070188
-Ref: Strange values-Footnote-11072842
-Node: Getting Accuracy1072947
-Node: Try To Round1075684
-Node: Setting precision1076591
-Ref: table-predefined-precision-strings1077296
-Node: Setting the rounding mode1079180
-Ref: table-gawk-rounding-modes1079562
-Ref: Setting the rounding mode-Footnote-11083614
-Node: Arbitrary Precision Integers1083799
-Ref: Arbitrary Precision Integers-Footnote-11087009
-Node: Checking for MPFR1087162
-Node: POSIX Floating Point Problems1088652
-Ref: POSIX Floating Point Problems-Footnote-11093472
-Node: Floating point summary1093510
-Node: Dynamic Extensions1095766
-Node: Extension Intro1097363
-Node: Plugin License1098665
-Node: Extension Mechanism Outline1099478
-Ref: figure-load-extension1099929
-Ref: figure-register-new-function1101507
-Ref: figure-call-new-function1102616
-Node: Extension API Description1104731
-Node: Extension API Functions Introduction1106460
-Ref: table-api-std-headers1108354
-Node: General Data Types1112795
-Ref: General Data Types-Footnote-11121941
-Node: Memory Allocation Functions1122244
-Ref: Memory Allocation Functions-Footnote-11126961
-Node: Constructor Functions1127060
-Node: API Ownership of MPFR and GMP Values1130961
-Node: Registration Functions1132514
-Node: Extension Functions1133218
-Node: Exit Callback Functions1138792
-Node: Extension Version String1140106
-Node: Input Parsers1140801
-Node: Output Wrappers1155420
-Node: Two-way processors1160262
-Node: Printing Messages1162615
-Ref: Printing Messages-Footnote-11163826
-Node: Updating ERRNO1163979
-Node: Requesting Values1164778
-Ref: table-value-types-returned1165531
-Node: Accessing Parameters1167590
-Node: Symbol Table Access1168871
-Node: Symbol table by name1169383
-Ref: Symbol table by name-Footnote-11172584
-Node: Symbol table by cookie1172716
-Ref: Symbol table by cookie-Footnote-11176985
-Node: Cached values1177049
-Ref: Cached values-Footnote-11180681
-Node: Array Manipulation1180838
-Ref: Array Manipulation-Footnote-11181937
-Node: Array Data Types1181974
-Ref: Array Data Types-Footnote-11184792
-Node: Array Functions1184888
-Node: Flattening Arrays1189917
-Node: Creating Arrays1196965
-Node: Redirection API1201807
-Node: Extension API Variables1204824
-Node: Extension Versioning1205547
-Ref: gawk-api-version1205976
-Node: Extension GMP/MPFR Versioning1207763
-Node: Extension API Informational Variables1209467
-Node: Extension API Boilerplate1210720
-Node: Changes from API V11214850
-Node: Finding Extensions1216482
-Node: Extension Example1217057
-Node: Internal File Description1217879
-Node: Internal File Ops1222171
-Ref: Internal File Ops-Footnote-11233721
-Node: Using Internal File Ops1233869
-Ref: Using Internal File Ops-Footnote-11236302
-Node: Extension Samples1236580
-Node: Extension Sample File Functions1238149
-Node: Extension Sample Fnmatch1246274
-Node: Extension Sample Fork1247869
-Node: Extension Sample Inplace1249145
-Node: Extension Sample Ord1253247
-Node: Extension Sample Readdir1254123
-Ref: table-readdir-file-types1254912
-Node: Extension Sample Revout1256268
-Node: Extension Sample Rev2way1256865
-Node: Extension Sample Read write array1257617
-Node: Extension Sample Readfile1260891
-Node: Extension Sample Time1262022
-Node: Extension Sample API Tests1264022
-Node: gawkextlib1264530
-Node: Extension summary1267562
-Node: Extension Exercises1271410
-Node: Language History1272680
-Node: V7/SVR3.11274392
-Node: SVR41276742
-Node: POSIX1278274
-Node: BTL1279699
-Node: POSIX/GNU1280466
-Ref: Gawk Extension Functions1283856
-Node: Feature History1287280
-Node: Common Extensions1307121
-Node: Ranges and Locales1308596
-Ref: Ranges and Locales-Footnote-11313381
-Ref: Ranges and Locales-Footnote-21313408
-Ref: Ranges and Locales-Footnote-31313643
-Node: Contributors1313866
-Node: History summary1320224
-Node: Installation1321666
-Node: Gawk Distribution1322630
-Node: Getting1323122
-Node: Extracting1324121
-Node: Distribution contents1325827
-Node: Unix Installation1333717
-Node: Quick Installation1334537
-Node: Compiling with MPFR1337077
-Node: Shell Startup Files1337783
-Node: Additional Configuration Options1338940
-Node: Configuration Philosophy1341323
-Node: Compiling from Git1343823
-Node: Building the Documentation1344382
-Node: Non-Unix Installation1345794
-Node: PC Installation1346270
-Node: PC Binary Installation1347139
-Node: PC Compiling1348032
-Node: PC Using1349210
-Node: Cygwin1352926
-Node: MSYS1354178
-Node: OpenVMS Installation1354804
-Node: OpenVMS Compilation1355485
-Ref: OpenVMS Compilation-Footnote-11356968
-Node: OpenVMS Dynamic Extensions1357026
-Node: OpenVMS Installation Details1358662
-Node: OpenVMS Running1361093
-Node: OpenVMS GNV1365230
-Node: Bugs1365985
-Node: Bug definition1366905
-Node: Bug address1370506
-Node: Usenet1374075
-Node: Performance bugs1375288
-Node: Asking for help1378292
-Node: Maintainers1380279
-Node: Other Versions1381306
-Node: Installation summary1391295
-Node: Notes1392677
-Node: Compatibility Mode1393487
-Node: Additions1394309
-Node: Accessing The Source1395254
-Node: Adding Code1396785
-Node: New Ports1403896
-Node: Derived Files1408399
-Ref: Derived Files-Footnote-11414210
-Ref: Derived Files-Footnote-21414245
-Ref: Derived Files-Footnote-31414856
-Node: Future Extensions1414970
-Node: Implementation Limitations1415640
-Node: Extension Design1416882
-Node: Old Extension Problems1418042
-Ref: Old Extension Problems-Footnote-11419614
-Node: Extension New Mechanism Goals1419675
-Ref: Extension New Mechanism Goals-Footnote-11423145
-Node: Extension Other Design Decisions1423346
-Node: Extension Future Growth1425543
-Node: Notes summary1426163
-Node: Basic Concepts1427373
-Node: Basic High Level1428058
-Ref: figure-general-flow1428340
-Ref: figure-process-flow1429042
-Ref: Basic High Level-Footnote-11432412
-Node: Basic Data Typing1432601
-Node: Glossary1436009
-Node: Copying1468887
-Node: GNU Free Documentation License1506445
-Node: Index1531568
++Ref: table-sub-proposed617959
++Ref: table-posix-sub619433
++Ref: table-gensub-escapes621085
++Ref: Gory Details-Footnote-1621913
++Node: I/O Functions622067
++Ref: table-system-return-values628743
++Ref: I/O Functions-Footnote-1630905
++Ref: I/O Functions-Footnote-2631053
++Node: Time Functions631173
++Ref: Time Functions-Footnote-1642885
++Ref: Time Functions-Footnote-2642953
++Ref: Time Functions-Footnote-3643115
++Ref: Time Functions-Footnote-4643226
++Ref: Time Functions-Footnote-5643342
++Ref: Time Functions-Footnote-6643569
++Node: Bitwise Functions643847
++Ref: table-bitwise-ops644445
++Ref: Bitwise Functions-Footnote-1650687
++Ref: Bitwise Functions-Footnote-2650864
++Node: Type Functions651059
++Node: I18N Functions653230
++Node: User-defined654965
++Node: Definition Syntax655711
++Ref: Definition Syntax-Footnote-1661566
++Node: Function Example661641
++Ref: Function Example-Footnote-1664620
++Node: Function Calling664642
++Node: Calling A Function665234
++Node: Variable Scope666204
++Node: Pass By Value/Reference669258
++Node: Function Caveats671986
++Ref: Function Caveats-Footnote-1674077
++Node: Return Statement674197
++Node: Dynamic Typing677229
++Node: Dynamic Typing Awk677811
++Node: Dynamic Typing Gawk679949
++Node: Shadowed Variables683319
++Node: Indirect Calls685667
++Node: Functions Summary696808
++Node: Library Functions699774
++Ref: Library Functions-Footnote-1703322
++Ref: Library Functions-Footnote-2703467
++Node: Library Names703642
++Ref: Library Names-Footnote-1707413
++Ref: Library Names-Footnote-2707640
++Node: General Functions707734
++Node: Strtonum Function709004
++Node: Assert Function712086
++Node: Round Function715536
++Node: Cliff Random Function717108
++Node: Ordinal Functions718132
++Ref: Ordinal Functions-Footnote-1721235
++Ref: Ordinal Functions-Footnote-2721487
++Node: Join Function721701
++Ref: Join Function-Footnote-1723499
++Node: Getlocaltime Function723703
++Node: Readfile Function727477
++Node: Shell Quoting729506
++Node: Isnumeric Function730962
++Node: To CSV Function732398
++Node: Data File Management734490
++Node: Filetrans Function735122
++Node: Rewind Function739398
++Node: File Checking741369
++Ref: File Checking-Footnote-1742735
++Node: Empty Files742940
++Node: Ignoring Assigns745003
++Node: Getopt Function746577
++Ref: Getopt Function-Footnote-1762395
++Node: Passwd Functions762607
++Ref: Passwd Functions-Footnote-1771742
++Node: Group Functions771830
++Ref: Group Functions-Footnote-1779954
++Node: Walking Arrays780165
++Node: Library Functions Summary783211
++Node: Library Exercises784631
++Node: Sample Programs785116
++Node: Running Examples785898
++Node: Clones786650
++Node: Cut Program787918
++Node: Egrep Program798342
++Node: Id Program807641
++Node: Split Program817733
++Ref: Split Program-Footnote-1827946
++Node: Tee Program828131
++Node: Uniq Program831037
++Node: Wc Program838897
++Node: Bytes vs. Characters839292
++Node: Using extensions840892
++Node: wc program841670
++Node: Miscellaneous Programs846663
++Node: Dupword Program847888
++Node: Alarm Program849937
++Node: Translate Program854840
++Ref: Translate Program-Footnote-1859549
++Node: Labels Program859827
++Ref: Labels Program-Footnote-1863262
++Node: Word Sorting863346
++Node: History Sorting867520
++Node: Extract Program869793
++Node: Simple Sed878046
++Node: Igawk Program881256
++Ref: Igawk Program-Footnote-1896466
++Ref: Igawk Program-Footnote-2896672
++Ref: Igawk Program-Footnote-3896802
++Node: Anagram Program896929
++Node: Signature Program900015
++Node: Programs Summary901265
++Node: Programs Exercises902519
++Ref: Programs Exercises-Footnote-1907348
++Node: Advanced Features907434
++Node: Nondecimal Data909915
++Node: Boolean Typed Values911545
++Node: Array Sorting913502
++Node: Controlling Array Traversal914231
++Ref: Controlling Array Traversal-Footnote-1922734
++Node: Array Sorting Functions922856
++Ref: Array Sorting Functions-Footnote-1928953
++Node: Two-way I/O929161
++Ref: Two-way I/O-Footnote-1937132
++Ref: Two-way I/O-Footnote-2937323
++Node: TCP/IP Networking937405
++Node: Profiling940573
++Node: Persistent Memory950243
++Ref: Persistent Memory-Footnote-1959815
++Node: Extension Philosophy959946
++Node: Advanced Features Summary961473
++Node: Internationalization963739
++Node: I18N and L10N965441
++Node: Explaining gettext966136
++Ref: Explaining gettext-Footnote-1972272
++Ref: Explaining gettext-Footnote-2972465
++Node: Programmer i18n972630
++Ref: Programmer i18n-Footnote-1977742
++Node: Translator i18n977791
++Node: String Extraction978621
++Ref: String Extraction-Footnote-1979797
++Node: Printf Ordering979895
++Ref: Printf Ordering-Footnote-1982753
++Node: I18N Portability982821
++Ref: I18N Portability-Footnote-1985381
++Node: I18N Example985448
++Ref: I18N Example-Footnote-1988842
++Ref: I18N Example-Footnote-2988915
++Node: Gawk I18N989032
++Node: I18N Summary989686
++Node: Debugger991083
++Node: Debugging992103
++Node: Debugging Concepts992552
++Node: Debugging Terms994369
++Node: Awk Debugging996972
++Ref: Awk Debugging-Footnote-1997945
++Node: Sample Debugging Session998081
++Node: Debugger Invocation998631
++Node: Finding The Bug1000256
++Node: List of Debugger Commands1006888
++Node: Breakpoint Control1008265
++Node: Debugger Execution Control1012087
++Node: Viewing And Changing Data1015561
++Node: Execution Stack1019295
++Node: Debugger Info1020976
++Node: Miscellaneous Debugger Commands1025271
++Node: Readline Support1030512
++Node: Limitations1031456
++Node: Debugging Summary1034080
++Node: Namespaces1035379
++Node: Global Namespace1036506
++Node: Qualified Names1037940
++Node: Default Namespace1038975
++Node: Changing The Namespace1039748
++Node: Naming Rules1041430
++Node: Internal Name Management1043385
++Node: Namespace Example1044455
++Node: Namespace And Features1047032
++Node: Namespace Summary1048487
++Node: Arbitrary Precision Arithmetic1049998
++Node: Computer Arithmetic1051517
++Ref: table-numeric-ranges1055442
++Ref: table-floating-point-ranges1055939
++Ref: Computer Arithmetic-Footnote-11056597
++Node: Math Definitions1056654
++Ref: table-ieee-formats1059686
++Node: MPFR features1060259
++Node: MPFR On Parole1060712
++Ref: MPFR On Parole-Footnote-11061553
++Node: MPFR Intro1061712
++Node: FP Math Caution1063396
++Ref: FP Math Caution-Footnote-11064468
++Node: Inexactness of computations1064841
++Node: Inexact representation1065872
++Node: Comparing FP Values1067253
++Node: Errors accumulate1068511
++Node: Strange values1069976
++Ref: Strange values-Footnote-11072630
++Node: Getting Accuracy1072735
++Node: Try To Round1075472
++Node: Setting precision1076379
++Ref: table-predefined-precision-strings1077084
++Node: Setting the rounding mode1078968
++Ref: table-gawk-rounding-modes1079350
++Ref: Setting the rounding mode-Footnote-11083402
++Node: Arbitrary Precision Integers1083587
++Ref: Arbitrary Precision Integers-Footnote-11086797
++Node: Checking for MPFR1086950
++Node: POSIX Floating Point Problems1088440
++Ref: POSIX Floating Point Problems-Footnote-11093260
++Node: Floating point summary1093298
++Node: Dynamic Extensions1095554
++Node: Extension Intro1097151
++Node: Plugin License1098453
++Node: Extension Mechanism Outline1099266
++Ref: figure-load-extension1099717
++Ref: figure-register-new-function1101295
++Ref: figure-call-new-function1102404
++Node: Extension API Description1104519
++Node: Extension API Functions Introduction1106248
++Ref: table-api-std-headers1108142
++Node: General Data Types1112583
++Ref: General Data Types-Footnote-11121729
++Node: Memory Allocation Functions1122032
++Ref: Memory Allocation Functions-Footnote-11126747
++Node: Constructor Functions1126846
++Node: API Ownership of MPFR and GMP Values1130747
++Node: Registration Functions1132300
++Node: Extension Functions1133004
++Node: Exit Callback Functions1138578
++Node: Extension Version String1139892
++Node: Input Parsers1140587
++Node: Output Wrappers1155206
++Node: Two-way processors1160048
++Node: Printing Messages1162401
++Ref: Printing Messages-Footnote-11163612
++Node: Updating ERRNO1163765
++Node: Requesting Values1164564
++Ref: table-value-types-returned1165317
++Node: Accessing Parameters1167376
++Node: Symbol Table Access1168657
++Node: Symbol table by name1169169
++Ref: Symbol table by name-Footnote-11172370
++Node: Symbol table by cookie1172502
++Ref: Symbol table by cookie-Footnote-11176771
++Node: Cached values1176835
++Ref: Cached values-Footnote-11180467
++Node: Array Manipulation1180624
++Ref: Array Manipulation-Footnote-11181723
++Node: Array Data Types1181760
++Ref: Array Data Types-Footnote-11184578
++Node: Array Functions1184674
++Node: Flattening Arrays1189703
++Node: Creating Arrays1196751
++Node: Redirection API1201593
++Node: Extension API Variables1204610
++Node: Extension Versioning1205333
++Ref: gawk-api-version1205762
++Node: Extension GMP/MPFR Versioning1207549
++Node: Extension API Informational Variables1209253
++Node: Extension API Boilerplate1210506
++Node: Changes from API V11214636
++Node: Finding Extensions1216268
++Node: Extension Example1216843
++Node: Internal File Description1217665
++Node: Internal File Ops1221957
++Ref: Internal File Ops-Footnote-11233507
++Node: Using Internal File Ops1233655
++Ref: Using Internal File Ops-Footnote-11236088
++Node: Extension Samples1236366
++Node: Extension Sample File Functions1237935
++Node: Extension Sample Fnmatch1246060
++Node: Extension Sample Fork1247655
++Node: Extension Sample Inplace1248931
++Node: Extension Sample Ord1253033
++Node: Extension Sample Readdir1253909
++Ref: table-readdir-file-types1254698
++Node: Extension Sample Revout1256054
++Node: Extension Sample Rev2way1256651
++Node: Extension Sample Read write array1257403
++Node: Extension Sample Readfile1260677
++Node: Extension Sample Time1261808
++Node: Extension Sample API Tests1263808
++Node: gawkextlib1264316
++Node: Extension summary1267348
++Node: Extension Exercises1271196
++Node: Language History1272466
++Node: V7/SVR3.11274178
++Node: SVR41276528
++Node: POSIX1278060
++Node: BTL1279485
++Node: POSIX/GNU1280252
++Ref: Gawk Extension Functions1283642
++Node: Feature History1287066
++Node: Common Extensions1306907
++Node: Ranges and Locales1308382
++Ref: Ranges and Locales-Footnote-11313167
++Ref: Ranges and Locales-Footnote-21313194
++Ref: Ranges and Locales-Footnote-31313429
++Node: Contributors1313652
++Node: History summary1320010
++Node: Installation1321452
++Node: Gawk Distribution1322416
++Node: Getting1322908
++Node: Extracting1323907
++Node: Distribution contents1325613
++Node: Unix Installation1333503
++Node: Quick Installation1334323
++Node: Compiling with MPFR1336863
++Node: Shell Startup Files1337569
++Node: Additional Configuration Options1338726
++Node: Configuration Philosophy1341109
++Node: Compiling from Git1343609
++Node: Building the Documentation1344168
++Node: Non-Unix Installation1345580
++Node: PC Installation1346056
++Node: PC Binary Installation1346925
++Node: PC Compiling1347818
++Node: PC Using1348996
++Node: Cygwin1352712
++Node: MSYS1353964
++Node: OpenVMS Installation1354590
++Node: OpenVMS Compilation1355271
++Ref: OpenVMS Compilation-Footnote-11356754
++Node: OpenVMS Dynamic Extensions1356812
++Node: OpenVMS Installation Details1358448
++Node: OpenVMS Running1360879
++Node: OpenVMS GNV1365016
++Node: Bugs1365771
++Node: Bug definition1366691
++Node: Bug address1370292
++Node: Usenet1373861
++Node: Performance bugs1375074
++Node: Asking for help1378078
++Node: Maintainers1380065
++Node: Other Versions1381092
++Node: Installation summary1391081
++Node: Notes1392463
++Node: Compatibility Mode1393273
++Node: Additions1394095
++Node: Accessing The Source1395040
++Node: Adding Code1396571
++Node: New Ports1403682
++Node: Derived Files1408185
++Ref: Derived Files-Footnote-11413996
++Ref: Derived Files-Footnote-21414031
++Ref: Derived Files-Footnote-31414642
++Node: Future Extensions1414756
++Node: Implementation Limitations1415426
++Node: Extension Design1416668
++Node: Old Extension Problems1417828
++Ref: Old Extension Problems-Footnote-11419400
++Node: Extension New Mechanism Goals1419461
++Ref: Extension New Mechanism Goals-Footnote-11422931
++Node: Extension Other Design Decisions1423132
++Node: Extension Future Growth1425329
++Node: Notes summary1425949
++Node: Basic Concepts1427159
++Node: Basic High Level1427844
++Ref: figure-general-flow1428126
++Ref: figure-process-flow1428828
++Ref: Basic High Level-Footnote-11432198
++Node: Basic Data Typing1432387
++Node: Glossary1435795
++Node: Copying1468673
++Node: GNU Free Documentation License1506231
++Node: Index1531354
End Tag Table
http://git.sv.gnu.org/cgit/gawk.git/commit/?id=702a898015e026b764ed62b040167164de1430e8
commit 702a898015e026b764ed62b040167164de1430e8
Author: Arnold D. Robbins <arnold@skeeve.com>
Date: Tue Oct 15 05:54:27 2024 +0300
Doc improvement.
diff --git a/doc/ChangeLog b/doc/ChangeLog
index 4a3a0824..61066e24 100644
--- a/doc/ChangeLog
+++ b/doc/ChangeLog
@@ -1,3 +1,9 @@
+2024-10-15 Arnold D. Robbins <arnold@skeeve.com>
+
+ * gawk.texi (Gory Details): Use @multitable for the tables
+ instead of hand-crafted tables for each format. Motivated
+ by Thérèse Godefroy <godef.th@free.fr> to improve the HTML.
+
2024-10-06 Arnold D. Robbins <arnold@skeeve.com>
* gawk.texi (Shadowed Variables): New section. Original
diff --git a/doc/gawk.info b/doc/gawk.info
index 63831263..547d5048 100644
--- a/doc/gawk.info
+++ b/doc/gawk.info
@@ -13993,15 +13993,15 @@ generated text with a single â&â. Any other
â\â within the REPLACEMENT
string that did not precede an â&â was passed through unchanged. This
is illustrated in *note Table 9.1: table-sub-escapes.
- You type âsub()â sees âsub()â generates
- ----- ------- ----------
- â\&â â&â The matched text
- â\\&â â\&â A literal â&â
- â\\\&â â\&â A literal â&â
- â\\\\&â â\\&â A literal â\&â
- â\\\\\&â â\\&â A literal â\&â
- â\\\\\\&â â\\\&â A literal â\\&â
- â\\qâ â\qâ A literal â\qâ
+You type âsub()â sees âsub()â generates
+--------------------------------------------------------------------------
+â \&â â &â The matched text
+â \\&â â \&â A literal â&â
+â \\\&â â \&â A literal â&â
+â \\\\&â â \\&â A literal â\&â
+â \\\\\&â â \\&â A literal â\&â
+â\\\\\\&â â\\\&â A literal â\\&â
+â \\qâ â \qâ A literal â\qâ
Table 9.1: Historical escape sequence processing for âsub()â and
âgsub()â
@@ -14025,13 +14025,14 @@ the original existing practice. The proposed rules
have special cases
that make it possible to produce a â\â preceding the matched text. This
is shown in *note Table 9.2: table-sub-proposed.
- You type âsub()â sees âsub()â generates
- ----- ------- ----------
- â\\\\\\&â â\\\&â A literal â\&â
- â\\\\&â â\\&â A literal â\â, followed
by the matched text
- â\\&â â\&â A literal â&â
- â\\qâ â\qâ A literal â\qâ
- â\\\\â â\\â â\\â
+You type âsub()â sees âsub()â generates
+--------------------------------------------------------------------------
+â\\\\\\&â â\\\&â A literal â\&â
+â \\\\&â â \\&â A literal â\â, followed by the
matched
+ text
+â \\&â â \&â A literal â&â
+â \\qâ â \qâ A literal â\qâ
+â \\\\â â \\â â\\â
Table 9.2: âgawkâ rules for âsub()â and backslash
@@ -14052,13 +14053,14 @@ literal â&â, â\\â produces a literal â\â,
and â\â followed by an
else is not special; the â\â is placed straight into the output. These
rules are presented in *note Table 9.3: table-posix-sub.
- You type âsub()â sees âsub()â generates
- ----- ------- ----------
- â\\\\\\&â â\\\&â A literal â\&â
- â\\\\&â â\\&â A literal â\â, followed
by the matched text
- â\\&â â\&â A literal â&â
- â\\qâ â\qâ A literal â\qâ
- â\\\\â â\\â â\â
+You type âsub()â sees âsub()â generates
+--------------------------------------------------------------------------
+â\\\\\\&â â\\\&â A literal â\&â
+â \\\\&â â \\&â A literal â\â, followed by the
matched
+ te t
+â \\&â â \&â A literal â&â
+â \\qâ â \qâ A literal â\qâ
+â \\\\â â \\â â\â
Table 9.3: POSIX rules for âsub()â and âgsub()â
@@ -14082,14 +14084,15 @@ subexpression is placed in the generated output.
Otherwise, no matter
what character follows the â\â, it appears in the generated text and the
â\â does not, as shown in *note Table 9.4: table-gensub-escapes.
- You type âgensub()â sees âgensub()â generates
- ----- --------- ------------
- â&â â&â The matched text
- â\\&â â\&â A literal â&â
- â\\\\â â\\â A literal â\â
- â\\\\&â â\\&â A literal â\â,
then the matched text
- â\\\\\\&â â\\\&â A literal â\&â
- â\\qâ â\qâ A literal âqâ
+You type âgensub()â âgensub()â generates
+ sees
+--------------------------------------------------------------------------
+â &â â &â The matched text
+â \\&â â \&â A literal â&â
+â \\\\â â \\â A literal â\â
+â \\\\&â â \\&â A literal â\â, then the matched text
+â\\\\\\&â â\\\&â A literal â\&â
+â \\qâ â \qâ A literal âqâ
Table 9.4: Escape sequence processing for âgensub()â
@@ -26828,8 +26831,6 @@ value:
strcpy(message, greet);
make_malloced_string(message, strlen(message), & result);
-
-
â#define ezalloc(pointer, type, size, message) ...â
This is like âemalloc()â, but it calls âgawk_calloc()â instead of
âgawk_malloc()â. The arguments are the same as for the
âemalloc()â
@@ -39079,7 +39080,7 @@ Index
* POSIX awk, date utility and: Time Functions. (line 261)
* POSIX awk, field separators and: Full Line Fields. (line 16)
* POSIX awk, function keyword in: Definition Syntax. (line 99)
-* POSIX awk, functions and, gsub()/sub(): Gory Details. (line 93)
+* POSIX awk, functions and, gsub()/sub(): Gory Details. (line 94)
* POSIX awk, functions and, length(): String Functions. (line 198)
* POSIX awk, GNU long options and: Options. (line 15)
* POSIX awk, interval expressions in: Interval Expressions.
@@ -40272,369 +40273,369 @@ Ref: String Functions-Footnote-2614745
Ref: String Functions-Footnote-3615001
Node: Gory Details615088
Ref: table-sub-escapes617097
-Ref: table-sub-proposed618728
-Ref: table-posix-sub620223
-Ref: table-gensub-escapes621896
-Ref: Gory Details-Footnote-1622815
-Node: I/O Functions622969
-Ref: table-system-return-values629645
-Ref: I/O Functions-Footnote-1631807
-Ref: I/O Functions-Footnote-2631955
-Node: Time Functions632075
-Ref: Time Functions-Footnote-1643787
-Ref: Time Functions-Footnote-2643855
-Ref: Time Functions-Footnote-3644017
-Ref: Time Functions-Footnote-4644128
-Ref: Time Functions-Footnote-5644244
-Ref: Time Functions-Footnote-6644471
-Node: Bitwise Functions644749
-Ref: table-bitwise-ops645347
-Ref: Bitwise Functions-Footnote-1651589
-Ref: Bitwise Functions-Footnote-2651766
-Node: Type Functions651961
-Node: I18N Functions654132
-Node: User-defined655867
-Node: Definition Syntax656613
-Ref: Definition Syntax-Footnote-1662468
-Node: Function Example662543
-Ref: Function Example-Footnote-1665522
-Node: Function Calling665544
-Node: Calling A Function666136
-Node: Variable Scope667106
-Node: Pass By Value/Reference670160
-Node: Function Caveats672888
-Ref: Function Caveats-Footnote-1674979
-Node: Return Statement675099
-Node: Dynamic Typing678131
-Node: Dynamic Typing Awk678713
-Node: Dynamic Typing Gawk680851
-Node: Shadowed Variables684221
-Node: Indirect Calls686569
-Node: Functions Summary697710
-Node: Library Functions700676
-Ref: Library Functions-Footnote-1704224
-Ref: Library Functions-Footnote-2704369
-Node: Library Names704544
-Ref: Library Names-Footnote-1708315
-Ref: Library Names-Footnote-2708542
-Node: General Functions708636
-Node: Strtonum Function709906
-Node: Assert Function712988
-Node: Round Function716438
-Node: Cliff Random Function718010
-Node: Ordinal Functions719034
-Ref: Ordinal Functions-Footnote-1722137
-Ref: Ordinal Functions-Footnote-2722389
-Node: Join Function722603
-Ref: Join Function-Footnote-1724401
-Node: Getlocaltime Function724605
-Node: Readfile Function728379
-Node: Shell Quoting730408
-Node: Isnumeric Function731864
-Node: To CSV Function733300
-Node: Data File Management735392
-Node: Filetrans Function736024
-Node: Rewind Function740300
-Node: File Checking742271
-Ref: File Checking-Footnote-1743637
-Node: Empty Files743842
-Node: Ignoring Assigns745905
-Node: Getopt Function747479
-Ref: Getopt Function-Footnote-1763297
-Node: Passwd Functions763509
-Ref: Passwd Functions-Footnote-1772644
-Node: Group Functions772732
-Ref: Group Functions-Footnote-1780856
-Node: Walking Arrays781067
-Node: Library Functions Summary784113
-Node: Library Exercises785533
-Node: Sample Programs786018
-Node: Running Examples786800
-Node: Clones787552
-Node: Cut Program788820
-Node: Egrep Program799244
-Node: Id Program808543
-Node: Split Program818635
-Ref: Split Program-Footnote-1828848
-Node: Tee Program829033
-Node: Uniq Program831939
-Node: Wc Program839799
-Node: Bytes vs. Characters840194
-Node: Using extensions841794
-Node: wc program842572
-Node: Miscellaneous Programs847565
-Node: Dupword Program848790
-Node: Alarm Program850839
-Node: Translate Program855742
-Ref: Translate Program-Footnote-1860451
-Node: Labels Program860729
-Ref: Labels Program-Footnote-1864164
-Node: Word Sorting864248
-Node: History Sorting868422
-Node: Extract Program870695
-Node: Simple Sed878948
-Node: Igawk Program882158
-Ref: Igawk Program-Footnote-1897368
-Ref: Igawk Program-Footnote-2897574
-Ref: Igawk Program-Footnote-3897704
-Node: Anagram Program897831
-Node: Signature Program900917
-Node: Programs Summary902167
-Node: Programs Exercises903421
-Ref: Programs Exercises-Footnote-1908250
-Node: Advanced Features908336
-Node: Nondecimal Data910817
-Node: Boolean Typed Values912447
-Node: Array Sorting914404
-Node: Controlling Array Traversal915133
-Ref: Controlling Array Traversal-Footnote-1923636
-Node: Array Sorting Functions923758
-Ref: Array Sorting Functions-Footnote-1929855
-Node: Two-way I/O930063
-Ref: Two-way I/O-Footnote-1938034
-Ref: Two-way I/O-Footnote-2938225
-Node: TCP/IP Networking938307
-Node: Profiling941475
-Node: Persistent Memory951145
-Ref: Persistent Memory-Footnote-1960717
-Node: Extension Philosophy960848
-Node: Advanced Features Summary962375
-Node: Internationalization964641
-Node: I18N and L10N966343
-Node: Explaining gettext967038
-Ref: Explaining gettext-Footnote-1973174
-Ref: Explaining gettext-Footnote-2973367
-Node: Programmer i18n973532
-Ref: Programmer i18n-Footnote-1978644
-Node: Translator i18n978693
-Node: String Extraction979523
-Ref: String Extraction-Footnote-1980699
-Node: Printf Ordering980797
-Ref: Printf Ordering-Footnote-1983655
-Node: I18N Portability983723
-Ref: I18N Portability-Footnote-1986283
-Node: I18N Example986350
-Ref: I18N Example-Footnote-1989744
-Ref: I18N Example-Footnote-2989817
-Node: Gawk I18N989934
-Node: I18N Summary990588
-Node: Debugger991985
-Node: Debugging993005
-Node: Debugging Concepts993454
-Node: Debugging Terms995271
-Node: Awk Debugging997874
-Ref: Awk Debugging-Footnote-1998847
-Node: Sample Debugging Session998983
-Node: Debugger Invocation999533
-Node: Finding The Bug1001158
-Node: List of Debugger Commands1007790
-Node: Breakpoint Control1009167
-Node: Debugger Execution Control1012989
-Node: Viewing And Changing Data1016463
-Node: Execution Stack1020197
-Node: Debugger Info1021878
-Node: Miscellaneous Debugger Commands1026173
-Node: Readline Support1031414
-Node: Limitations1032358
-Node: Debugging Summary1034982
-Node: Namespaces1036281
-Node: Global Namespace1037408
-Node: Qualified Names1038842
-Node: Default Namespace1039877
-Node: Changing The Namespace1040650
-Node: Naming Rules1042332
-Node: Internal Name Management1044287
-Node: Namespace Example1045357
-Node: Namespace And Features1047934
-Node: Namespace Summary1049389
-Node: Arbitrary Precision Arithmetic1050900
-Node: Computer Arithmetic1052419
-Ref: table-numeric-ranges1056344
-Ref: table-floating-point-ranges1056841
-Ref: Computer Arithmetic-Footnote-11057499
-Node: Math Definitions1057556
-Ref: table-ieee-formats1060588
-Node: MPFR features1061161
-Node: MPFR On Parole1061614
-Ref: MPFR On Parole-Footnote-11062455
-Node: MPFR Intro1062614
-Node: FP Math Caution1064298
-Ref: FP Math Caution-Footnote-11065370
-Node: Inexactness of computations1065743
-Node: Inexact representation1066774
-Node: Comparing FP Values1068155
-Node: Errors accumulate1069413
-Node: Strange values1070878
-Ref: Strange values-Footnote-11073532
-Node: Getting Accuracy1073637
-Node: Try To Round1076374
-Node: Setting precision1077281
-Ref: table-predefined-precision-strings1077986
-Node: Setting the rounding mode1079870
-Ref: table-gawk-rounding-modes1080252
-Ref: Setting the rounding mode-Footnote-11084304
-Node: Arbitrary Precision Integers1084489
-Ref: Arbitrary Precision Integers-Footnote-11087699
-Node: Checking for MPFR1087852
-Node: POSIX Floating Point Problems1089342
-Ref: POSIX Floating Point Problems-Footnote-11094162
-Node: Floating point summary1094200
-Node: Dynamic Extensions1096456
-Node: Extension Intro1098053
-Node: Plugin License1099355
-Node: Extension Mechanism Outline1100168
-Ref: figure-load-extension1100619
-Ref: figure-register-new-function1102197
-Ref: figure-call-new-function1103306
-Node: Extension API Description1105421
-Node: Extension API Functions Introduction1107150
-Ref: table-api-std-headers1109044
-Node: General Data Types1113485
-Ref: General Data Types-Footnote-11122631
-Node: Memory Allocation Functions1122934
-Ref: Memory Allocation Functions-Footnote-11127651
-Node: Constructor Functions1127750
-Node: API Ownership of MPFR and GMP Values1131651
-Node: Registration Functions1133204
-Node: Extension Functions1133908
-Node: Exit Callback Functions1139482
-Node: Extension Version String1140796
-Node: Input Parsers1141491
-Node: Output Wrappers1156110
-Node: Two-way processors1160952
-Node: Printing Messages1163305
-Ref: Printing Messages-Footnote-11164516
-Node: Updating ERRNO1164669
-Node: Requesting Values1165468
-Ref: table-value-types-returned1166221
-Node: Accessing Parameters1168280
-Node: Symbol Table Access1169561
-Node: Symbol table by name1170073
-Ref: Symbol table by name-Footnote-11173274
-Node: Symbol table by cookie1173406
-Ref: Symbol table by cookie-Footnote-11177675
-Node: Cached values1177739
-Ref: Cached values-Footnote-11181371
-Node: Array Manipulation1181528
-Ref: Array Manipulation-Footnote-11182627
-Node: Array Data Types1182664
-Ref: Array Data Types-Footnote-11185482
-Node: Array Functions1185578
-Node: Flattening Arrays1190607
-Node: Creating Arrays1197655
-Node: Redirection API1202497
-Node: Extension API Variables1205514
-Node: Extension Versioning1206237
-Ref: gawk-api-version1206666
-Node: Extension GMP/MPFR Versioning1208453
-Node: Extension API Informational Variables1210157
-Node: Extension API Boilerplate1211410
-Node: Changes from API V11215540
-Node: Finding Extensions1217172
-Node: Extension Example1217747
-Node: Internal File Description1218569
-Node: Internal File Ops1222861
-Ref: Internal File Ops-Footnote-11234411
-Node: Using Internal File Ops1234559
-Ref: Using Internal File Ops-Footnote-11236992
-Node: Extension Samples1237270
-Node: Extension Sample File Functions1238839
-Node: Extension Sample Fnmatch1246964
-Node: Extension Sample Fork1248559
-Node: Extension Sample Inplace1249835
-Node: Extension Sample Ord1253937
-Node: Extension Sample Readdir1254813
-Ref: table-readdir-file-types1255602
-Node: Extension Sample Revout1256958
-Node: Extension Sample Rev2way1257555
-Node: Extension Sample Read write array1258307
-Node: Extension Sample Readfile1261581
-Node: Extension Sample Time1262712
-Node: Extension Sample API Tests1264712
-Node: gawkextlib1265220
-Node: Extension summary1268252
-Node: Extension Exercises1272100
-Node: Language History1273370
-Node: V7/SVR3.11275082
-Node: SVR41277432
-Node: POSIX1278964
-Node: BTL1280389
-Node: POSIX/GNU1281156
-Ref: Gawk Extension Functions1284546
-Node: Feature History1287970
-Node: Common Extensions1307811
-Node: Ranges and Locales1309286
-Ref: Ranges and Locales-Footnote-11314071
-Ref: Ranges and Locales-Footnote-21314098
-Ref: Ranges and Locales-Footnote-31314333
-Node: Contributors1314556
-Node: History summary1320833
-Node: Installation1322275
-Node: Gawk Distribution1323239
-Node: Getting1323731
-Node: Extracting1324730
-Node: Distribution contents1326436
-Node: Unix Installation1334326
-Node: Quick Installation1335146
-Node: Compiling with MPFR1337686
-Node: Shell Startup Files1338392
-Node: Additional Configuration Options1339549
-Node: Configuration Philosophy1341932
-Node: Compiling from Git1344432
-Node: Building the Documentation1344991
-Node: Non-Unix Installation1346403
-Node: PC Installation1346879
-Node: PC Binary Installation1347748
-Node: PC Compiling1348641
-Node: PC Using1349819
-Node: Cygwin1353535
-Node: MSYS1354787
-Node: OpenVMS Installation1355413
-Node: OpenVMS Compilation1356094
-Ref: OpenVMS Compilation-Footnote-11357577
-Node: OpenVMS Dynamic Extensions1357635
-Node: OpenVMS Installation Details1359271
-Node: OpenVMS Running1361702
-Node: OpenVMS GNV1365839
-Node: Bugs1366594
-Node: Bug definition1367514
-Node: Bug address1371115
-Node: Usenet1374684
-Node: Performance bugs1375897
-Node: Asking for help1378901
-Node: Maintainers1380888
-Node: Other Versions1381915
-Node: Installation summary1391904
-Node: Notes1393286
-Node: Compatibility Mode1394096
-Node: Additions1394918
-Node: Accessing The Source1395863
-Node: Adding Code1397394
-Node: New Ports1404505
-Node: Derived Files1409008
-Ref: Derived Files-Footnote-11414819
-Ref: Derived Files-Footnote-21414854
-Ref: Derived Files-Footnote-31415465
-Node: Future Extensions1415579
-Node: Implementation Limitations1416249
-Node: Extension Design1417491
-Node: Old Extension Problems1418651
-Ref: Old Extension Problems-Footnote-11420223
-Node: Extension New Mechanism Goals1420284
-Ref: Extension New Mechanism Goals-Footnote-11423754
-Node: Extension Other Design Decisions1423955
-Node: Extension Future Growth1426152
-Node: Notes summary1426772
-Node: Basic Concepts1427982
-Node: Basic High Level1428667
-Ref: figure-general-flow1428949
-Ref: figure-process-flow1429651
-Ref: Basic High Level-Footnote-11433021
-Node: Basic Data Typing1433210
-Node: Glossary1436618
-Node: Copying1469496
-Node: GNU Free Documentation License1507054
-Node: Index1532177
+Ref: table-sub-proposed618649
+Ref: table-posix-sub620123
+Ref: table-gensub-escapes621775
+Ref: Gory Details-Footnote-1622603
+Node: I/O Functions622757
+Ref: table-system-return-values629433
+Ref: I/O Functions-Footnote-1631595
+Ref: I/O Functions-Footnote-2631743
+Node: Time Functions631863
+Ref: Time Functions-Footnote-1643575
+Ref: Time Functions-Footnote-2643643
+Ref: Time Functions-Footnote-3643805
+Ref: Time Functions-Footnote-4643916
+Ref: Time Functions-Footnote-5644032
+Ref: Time Functions-Footnote-6644259
+Node: Bitwise Functions644537
+Ref: table-bitwise-ops645135
+Ref: Bitwise Functions-Footnote-1651377
+Ref: Bitwise Functions-Footnote-2651554
+Node: Type Functions651749
+Node: I18N Functions653920
+Node: User-defined655655
+Node: Definition Syntax656401
+Ref: Definition Syntax-Footnote-1662256
+Node: Function Example662331
+Ref: Function Example-Footnote-1665310
+Node: Function Calling665332
+Node: Calling A Function665924
+Node: Variable Scope666894
+Node: Pass By Value/Reference669948
+Node: Function Caveats672676
+Ref: Function Caveats-Footnote-1674767
+Node: Return Statement674887
+Node: Dynamic Typing677919
+Node: Dynamic Typing Awk678501
+Node: Dynamic Typing Gawk680639
+Node: Shadowed Variables684009
+Node: Indirect Calls686357
+Node: Functions Summary697498
+Node: Library Functions700464
+Ref: Library Functions-Footnote-1704012
+Ref: Library Functions-Footnote-2704157
+Node: Library Names704332
+Ref: Library Names-Footnote-1708103
+Ref: Library Names-Footnote-2708330
+Node: General Functions708424
+Node: Strtonum Function709694
+Node: Assert Function712776
+Node: Round Function716226
+Node: Cliff Random Function717798
+Node: Ordinal Functions718822
+Ref: Ordinal Functions-Footnote-1721925
+Ref: Ordinal Functions-Footnote-2722177
+Node: Join Function722391
+Ref: Join Function-Footnote-1724189
+Node: Getlocaltime Function724393
+Node: Readfile Function728167
+Node: Shell Quoting730196
+Node: Isnumeric Function731652
+Node: To CSV Function733088
+Node: Data File Management735180
+Node: Filetrans Function735812
+Node: Rewind Function740088
+Node: File Checking742059
+Ref: File Checking-Footnote-1743425
+Node: Empty Files743630
+Node: Ignoring Assigns745693
+Node: Getopt Function747267
+Ref: Getopt Function-Footnote-1763085
+Node: Passwd Functions763297
+Ref: Passwd Functions-Footnote-1772432
+Node: Group Functions772520
+Ref: Group Functions-Footnote-1780644
+Node: Walking Arrays780855
+Node: Library Functions Summary783901
+Node: Library Exercises785321
+Node: Sample Programs785806
+Node: Running Examples786588
+Node: Clones787340
+Node: Cut Program788608
+Node: Egrep Program799032
+Node: Id Program808331
+Node: Split Program818423
+Ref: Split Program-Footnote-1828636
+Node: Tee Program828821
+Node: Uniq Program831727
+Node: Wc Program839587
+Node: Bytes vs. Characters839982
+Node: Using extensions841582
+Node: wc program842360
+Node: Miscellaneous Programs847353
+Node: Dupword Program848578
+Node: Alarm Program850627
+Node: Translate Program855530
+Ref: Translate Program-Footnote-1860239
+Node: Labels Program860517
+Ref: Labels Program-Footnote-1863952
+Node: Word Sorting864036
+Node: History Sorting868210
+Node: Extract Program870483
+Node: Simple Sed878736
+Node: Igawk Program881946
+Ref: Igawk Program-Footnote-1897156
+Ref: Igawk Program-Footnote-2897362
+Ref: Igawk Program-Footnote-3897492
+Node: Anagram Program897619
+Node: Signature Program900705
+Node: Programs Summary901955
+Node: Programs Exercises903209
+Ref: Programs Exercises-Footnote-1908038
+Node: Advanced Features908124
+Node: Nondecimal Data910605
+Node: Boolean Typed Values912235
+Node: Array Sorting914192
+Node: Controlling Array Traversal914921
+Ref: Controlling Array Traversal-Footnote-1923424
+Node: Array Sorting Functions923546
+Ref: Array Sorting Functions-Footnote-1929643
+Node: Two-way I/O929851
+Ref: Two-way I/O-Footnote-1937822
+Ref: Two-way I/O-Footnote-2938013
+Node: TCP/IP Networking938095
+Node: Profiling941263
+Node: Persistent Memory950933
+Ref: Persistent Memory-Footnote-1960505
+Node: Extension Philosophy960636
+Node: Advanced Features Summary962163
+Node: Internationalization964429
+Node: I18N and L10N966131
+Node: Explaining gettext966826
+Ref: Explaining gettext-Footnote-1972962
+Ref: Explaining gettext-Footnote-2973155
+Node: Programmer i18n973320
+Ref: Programmer i18n-Footnote-1978432
+Node: Translator i18n978481
+Node: String Extraction979311
+Ref: String Extraction-Footnote-1980487
+Node: Printf Ordering980585
+Ref: Printf Ordering-Footnote-1983443
+Node: I18N Portability983511
+Ref: I18N Portability-Footnote-1986071
+Node: I18N Example986138
+Ref: I18N Example-Footnote-1989532
+Ref: I18N Example-Footnote-2989605
+Node: Gawk I18N989722
+Node: I18N Summary990376
+Node: Debugger991773
+Node: Debugging992793
+Node: Debugging Concepts993242
+Node: Debugging Terms995059
+Node: Awk Debugging997662
+Ref: Awk Debugging-Footnote-1998635
+Node: Sample Debugging Session998771
+Node: Debugger Invocation999321
+Node: Finding The Bug1000946
+Node: List of Debugger Commands1007578
+Node: Breakpoint Control1008955
+Node: Debugger Execution Control1012777
+Node: Viewing And Changing Data1016251
+Node: Execution Stack1019985
+Node: Debugger Info1021666
+Node: Miscellaneous Debugger Commands1025961
+Node: Readline Support1031202
+Node: Limitations1032146
+Node: Debugging Summary1034770
+Node: Namespaces1036069
+Node: Global Namespace1037196
+Node: Qualified Names1038630
+Node: Default Namespace1039665
+Node: Changing The Namespace1040438
+Node: Naming Rules1042120
+Node: Internal Name Management1044075
+Node: Namespace Example1045145
+Node: Namespace And Features1047722
+Node: Namespace Summary1049177
+Node: Arbitrary Precision Arithmetic1050688
+Node: Computer Arithmetic1052207
+Ref: table-numeric-ranges1056132
+Ref: table-floating-point-ranges1056629
+Ref: Computer Arithmetic-Footnote-11057287
+Node: Math Definitions1057344
+Ref: table-ieee-formats1060376
+Node: MPFR features1060949
+Node: MPFR On Parole1061402
+Ref: MPFR On Parole-Footnote-11062243
+Node: MPFR Intro1062402
+Node: FP Math Caution1064086
+Ref: FP Math Caution-Footnote-11065158
+Node: Inexactness of computations1065531
+Node: Inexact representation1066562
+Node: Comparing FP Values1067943
+Node: Errors accumulate1069201
+Node: Strange values1070666
+Ref: Strange values-Footnote-11073320
+Node: Getting Accuracy1073425
+Node: Try To Round1076162
+Node: Setting precision1077069
+Ref: table-predefined-precision-strings1077774
+Node: Setting the rounding mode1079658
+Ref: table-gawk-rounding-modes1080040
+Ref: Setting the rounding mode-Footnote-11084092
+Node: Arbitrary Precision Integers1084277
+Ref: Arbitrary Precision Integers-Footnote-11087487
+Node: Checking for MPFR1087640
+Node: POSIX Floating Point Problems1089130
+Ref: POSIX Floating Point Problems-Footnote-11093950
+Node: Floating point summary1093988
+Node: Dynamic Extensions1096244
+Node: Extension Intro1097841
+Node: Plugin License1099143
+Node: Extension Mechanism Outline1099956
+Ref: figure-load-extension1100407
+Ref: figure-register-new-function1101985
+Ref: figure-call-new-function1103094
+Node: Extension API Description1105209
+Node: Extension API Functions Introduction1106938
+Ref: table-api-std-headers1108832
+Node: General Data Types1113273
+Ref: General Data Types-Footnote-11122419
+Node: Memory Allocation Functions1122722
+Ref: Memory Allocation Functions-Footnote-11127437
+Node: Constructor Functions1127536
+Node: API Ownership of MPFR and GMP Values1131437
+Node: Registration Functions1132990
+Node: Extension Functions1133694
+Node: Exit Callback Functions1139268
+Node: Extension Version String1140582
+Node: Input Parsers1141277
+Node: Output Wrappers1155896
+Node: Two-way processors1160738
+Node: Printing Messages1163091
+Ref: Printing Messages-Footnote-11164302
+Node: Updating ERRNO1164455
+Node: Requesting Values1165254
+Ref: table-value-types-returned1166007
+Node: Accessing Parameters1168066
+Node: Symbol Table Access1169347
+Node: Symbol table by name1169859
+Ref: Symbol table by name-Footnote-11173060
+Node: Symbol table by cookie1173192
+Ref: Symbol table by cookie-Footnote-11177461
+Node: Cached values1177525
+Ref: Cached values-Footnote-11181157
+Node: Array Manipulation1181314
+Ref: Array Manipulation-Footnote-11182413
+Node: Array Data Types1182450
+Ref: Array Data Types-Footnote-11185268
+Node: Array Functions1185364
+Node: Flattening Arrays1190393
+Node: Creating Arrays1197441
+Node: Redirection API1202283
+Node: Extension API Variables1205300
+Node: Extension Versioning1206023
+Ref: gawk-api-version1206452
+Node: Extension GMP/MPFR Versioning1208239
+Node: Extension API Informational Variables1209943
+Node: Extension API Boilerplate1211196
+Node: Changes from API V11215326
+Node: Finding Extensions1216958
+Node: Extension Example1217533
+Node: Internal File Description1218355
+Node: Internal File Ops1222647
+Ref: Internal File Ops-Footnote-11234197
+Node: Using Internal File Ops1234345
+Ref: Using Internal File Ops-Footnote-11236778
+Node: Extension Samples1237056
+Node: Extension Sample File Functions1238625
+Node: Extension Sample Fnmatch1246750
+Node: Extension Sample Fork1248345
+Node: Extension Sample Inplace1249621
+Node: Extension Sample Ord1253723
+Node: Extension Sample Readdir1254599
+Ref: table-readdir-file-types1255388
+Node: Extension Sample Revout1256744
+Node: Extension Sample Rev2way1257341
+Node: Extension Sample Read write array1258093
+Node: Extension Sample Readfile1261367
+Node: Extension Sample Time1262498
+Node: Extension Sample API Tests1264498
+Node: gawkextlib1265006
+Node: Extension summary1268038
+Node: Extension Exercises1271886
+Node: Language History1273156
+Node: V7/SVR3.11274868
+Node: SVR41277218
+Node: POSIX1278750
+Node: BTL1280175
+Node: POSIX/GNU1280942
+Ref: Gawk Extension Functions1284332
+Node: Feature History1287756
+Node: Common Extensions1307597
+Node: Ranges and Locales1309072
+Ref: Ranges and Locales-Footnote-11313857
+Ref: Ranges and Locales-Footnote-21313884
+Ref: Ranges and Locales-Footnote-31314119
+Node: Contributors1314342
+Node: History summary1320619
+Node: Installation1322061
+Node: Gawk Distribution1323025
+Node: Getting1323517
+Node: Extracting1324516
+Node: Distribution contents1326222
+Node: Unix Installation1334112
+Node: Quick Installation1334932
+Node: Compiling with MPFR1337472
+Node: Shell Startup Files1338178
+Node: Additional Configuration Options1339335
+Node: Configuration Philosophy1341718
+Node: Compiling from Git1344218
+Node: Building the Documentation1344777
+Node: Non-Unix Installation1346189
+Node: PC Installation1346665
+Node: PC Binary Installation1347534
+Node: PC Compiling1348427
+Node: PC Using1349605
+Node: Cygwin1353321
+Node: MSYS1354573
+Node: OpenVMS Installation1355199
+Node: OpenVMS Compilation1355880
+Ref: OpenVMS Compilation-Footnote-11357363
+Node: OpenVMS Dynamic Extensions1357421
+Node: OpenVMS Installation Details1359057
+Node: OpenVMS Running1361488
+Node: OpenVMS GNV1365625
+Node: Bugs1366380
+Node: Bug definition1367300
+Node: Bug address1370901
+Node: Usenet1374470
+Node: Performance bugs1375683
+Node: Asking for help1378687
+Node: Maintainers1380674
+Node: Other Versions1381701
+Node: Installation summary1391690
+Node: Notes1393072
+Node: Compatibility Mode1393882
+Node: Additions1394704
+Node: Accessing The Source1395649
+Node: Adding Code1397180
+Node: New Ports1404291
+Node: Derived Files1408794
+Ref: Derived Files-Footnote-11414605
+Ref: Derived Files-Footnote-21414640
+Ref: Derived Files-Footnote-31415251
+Node: Future Extensions1415365
+Node: Implementation Limitations1416035
+Node: Extension Design1417277
+Node: Old Extension Problems1418437
+Ref: Old Extension Problems-Footnote-11420009
+Node: Extension New Mechanism Goals1420070
+Ref: Extension New Mechanism Goals-Footnote-11423540
+Node: Extension Other Design Decisions1423741
+Node: Extension Future Growth1425938
+Node: Notes summary1426558
+Node: Basic Concepts1427768
+Node: Basic High Level1428453
+Ref: figure-general-flow1428735
+Ref: figure-process-flow1429437
+Ref: Basic High Level-Footnote-11432807
+Node: Basic Data Typing1432996
+Node: Glossary1436404
+Node: Copying1469282
+Node: GNU Free Documentation License1506840
+Node: Index1531963
End Tag Table
diff --git a/doc/gawk.texi b/doc/gawk.texi
index 4dd6b5c2..e0c5c264 100644
--- a/doc/gawk.texi
+++ b/doc/gawk.texi
@@ -19145,6 +19145,21 @@ the generated text with a single @samp{&}. Any other
@samp{\} within
the @var{replacement} string that did not precede an @samp{&} was passed
through unchanged. This is illustrated in @ref{table-sub-escapes}.
+@float Table,table-sub-escapes
+@caption{Historical escape sequence processing for @code{sub()} and
@code{gsub()}}
+@multitable @columnfractions .20 .20 .60
+@headitem You type @tab @code{sub()} sees @tab @code{sub()} generates
+@item @code{@ @ @ @ @ \&} @tab @code{@ @ @ &} @tab The matched text
+@item @code{@ @ @ @ \\&} @tab @code{@ @ \&} @tab A literal @samp{&}
+@item @code{@ @ @ \\\&} @tab @code{@ @ \&} @tab A literal @samp{&}
+@item @code{@ @ \\\\&} @tab @code{@ \\&} @tab A literal @samp{\&}
+@item @code{@ \\\\\&} @tab @code{@ \\&} @tab A literal @samp{\&}
+@item @code{\\\\\\&} @tab @code{\\\&} @tab A literal @samp{\\&}
+@item @code{@ @ @ @ \\q} @tab @code{@ @ \q} @tab A literal @samp{\q}
+@end multitable
+@end float
+
+@ignore
@c Thank to Karl Berry for help with the TeX stuff.
@float Table,table-sub-escapes
@caption{Historical escape sequence processing for @code{sub()} and
@code{gsub()}}
@@ -19196,6 +19211,7 @@ _bigskip}
@end ifnotdocbook
@end ifnottex
@end float
+@end ignore
@noindent
This table shows the lexical-level processing, where
@@ -19218,6 +19234,19 @@ to produce a @samp{\} preceding the matched text.
This is shown in
@ref{table-sub-proposed}.
+@float Table,table-sub-proposed
+@caption{@command{gawk} rules for @code{sub()} and backslash}
+@multitable @columnfractions .20 .20 .60
+@headitem You type @tab @code{sub()} sees @tab @code{sub()} generates
+@item @code{\\\\\\&} @tab @code{\\\&} @tab A literal @samp{\&}
+@item @code{@ @ \\\\&} @tab @code{@ \\&} @tab A literal @samp{\}, followed by
the matched text
+@item @code{@ @ @ @ \\&} @tab @code{@ @ \&} @tab A literal @samp{&}
+@item @code{@ @ @ @ \\q} @tab @code{@ @ \q} @tab A literal @samp{\q}
+@item @code{@ @ @ \\\\} @tab @code{@ @ \\} @tab @code{\\}
+@end multitable
+@end float
+
+@ignore
@float Table,table-sub-proposed
@caption{@command{gawk} rules for @code{sub()} and backslash}
@tex
@@ -19262,6 +19291,7 @@ _bigskip}
@end ifnotdocbook
@end ifnottex
@end float
+@end ignore
In a nutshell, at the runtime level, there are now three special sequences
of characters (@samp{\\\&}, @samp{\\&}, and @samp{\&}) whereas historically
@@ -19281,6 +19311,19 @@ a literal @samp{&}, @samp{\\} produces a literal
@samp{\}, and @samp{\} followed
by anything else is not special; the @samp{\} is placed straight into the
output.
These rules are presented in @ref{table-posix-sub}.
+@float Table,table-posix-sub
+@caption{POSIX rules for @code{sub()} and @code{gsub()}}
+@multitable @columnfractions .20 .20 .60
+@headitem You type @tab @code{sub()} sees @tab @code{sub()} generates
+@item @code{\\\\\\&} @tab @code{\\\&} @tab A literal @samp{\&}
+@item @code{@ @ \\\\&} @tab @code{@ \\&} @tab A literal @samp{\}, followed by
the matched te@ t
+@item @code{@ @ @ @ \\&} @tab @code{@ @ \&} @tab A literal @samp{&}
+@item @code{@ @ @ @ \\q} @tab @code{@ @ \q} @tab A literal @samp{\q}
+@item @code{@ @ @ \\\\} @tab @code{@ @ \\} @tab @code{\}
+@end multitable
+@end float
+
+@ignore
@float Table,table-posix-sub
@caption{POSIX rules for @code{sub()} and @code{gsub()}}
@tex
@@ -19325,6 +19368,7 @@ _bigskip}
@end ifnotdocbook
@end ifnottex
@end float
+@end ignore
The only case where the difference is noticeable is the last one: @samp{\\\\}
is seen as @samp{\\} and produces @samp{\} instead of @samp{\\}.
@@ -19350,6 +19394,20 @@ no matter what character follows the @samp{\}, it
appears in the generated text and the @samp{\} does not,
as shown in @ref{table-gensub-escapes}.
+@float Table,table-gensub-escapes
+@caption{Escape sequence processing for @code{gensub()}}
+@multitable @columnfractions .20 .20 .60
+@headitem You type @tab @code{gensub()} sees @tab @code{gensub()} generates
+@item @code{@ @ @ @ @ @ &} @tab @code{@ @ @ &} @tab The matched text
+@item @code{@ @ @ @ \\&} @tab @code{@ @ \&} @tab A literal @samp{&}
+@item @code{@ @ @ \\\\} @tab @code{@ @ \\} @tab A literal @samp{\}
+@item @code{@ @ \\\\&} @tab @code{@ \\&} @tab A literal @samp{\}, then the
matched text
+@item @code{\\\\\\&} @tab @code{\\\&} @tab A literal @samp{\&}
+@item @code{@ @ @ @ \\q} @tab @code{@ @ \q} @tab A literal @samp{q}
+@end multitable
+@end float
+
+@ignore
@float Table,table-gensub-escapes
@caption{Escape sequence processing for @code{gensub()}}
@tex
@@ -19397,6 +19455,7 @@ _bigskip}
@end ifnotdocbook
@end ifnottex
@end float
+@end ignore
Because of the complexity of the lexical- and runtime-level processing
and the special cases for @code{sub()} and @code{gsub()},
@@ -36110,7 +36169,6 @@ make_malloced_string(message, strlen(message), &
result);
@end group
@end example
-@sp 2
@item #define ezalloc(pointer, type, size, message) @dots{}
This is like @code{emalloc()}, but it calls @code{gawk_calloc()}
instead of @code{gawk_malloc()}.
http://git.sv.gnu.org/cgit/gawk.git/commit/?id=ddc2fabf6a75e4f49efb389a1c8e72b77ae804c7
commit ddc2fabf6a75e4f49efb389a1c8e72b77ae804c7
Merge: ed7b2109 9eda1211
Author: Arnold D. Robbins <arnold@skeeve.com>
Date: Sun Oct 13 09:39:00 2024 +0300
Merge branch 'gawk-5.3-stable' into stable/fpat-doc
http://git.sv.gnu.org/cgit/gawk.git/commit/?id=ed7b21099b9211e16aa90fc9fc2fe17e64fa4b79
commit ed7b21099b9211e16aa90fc9fc2fe17e64fa4b79
Author: Arnold D. Robbins <arnold@skeeve.com>
Date: Thu Oct 10 18:44:21 2024 +0300
Small doc update.
diff --git a/doc/ChangeLog b/doc/ChangeLog
index b2a88102..d3465a28 100644
--- a/doc/ChangeLog
+++ b/doc/ChangeLog
@@ -1,3 +1,7 @@
+2024-10-10 Arnold D. Robbins <arnold@skeeve.com>
+
+ * gawk.texi (Contributors): Add Stuart Ferguson.
+
2024-10-06 Arnold D. Robbins <arnold@skeeve.com>
* gawk.texi (Shadowed Variables): New section. Original
diff --git a/doc/gawk.info b/doc/gawk.info
index 38827372..1c4ec412 100644
--- a/doc/gawk.info
+++ b/doc/gawk.info
@@ -31546,6 +31546,9 @@ Info file, in approximate chronological order:
⢠John Naman contributed the original text for *note Shadowed
Variables::.
+ â¢
+ Stuart Ferguson reworked the text in *note Splitting By Content::.
+
⢠The development of the extension API first released with âgawkâ 4.1
was driven primarily by Arnold Robbins and Andrew Schorr, with
notable contributions from the rest of the development team.
@@ -37148,7 +37151,7 @@ Index
* collating elements: Bracket Expressions. (line 90)
* collating symbols: Bracket Expressions. (line 97)
* Colombo, Antonio: Acknowledgments. (line 60)
-* Colombo, Antonio <1>: Contributors. (line 146)
+* Colombo, Antonio <1>: Contributors. (line 149)
* colon (:), :: namespace separator: Qualified Names. (line 6)
* colon (:), ?: operator: Precedence. (line 91)
* columns, aligning: Print Examples. (line 69)
@@ -37294,7 +37297,7 @@ Index
* CSVMODE library for gawk: Splitting By Content.
(line 133)
* ctime() user-defined function: Function Example. (line 74)
-* Curreli, Marco: Contributors. (line 150)
+* Curreli, Marco: Contributors. (line 153)
* currency symbols, localization: Explaining gettext. (line 104)
* current namespace, pushing and popping: Changing The Namespace.
(line 29)
@@ -37925,6 +37928,7 @@ Index
* features, undocumented: Undocumented. (line 6)
* Fenlason, Jay: History. (line 34)
* Fenlason, Jay <1>: Contributors. (line 19)
+* Ferguson, Stuar: Contributors. (line 139)
* fflush: I/O Functions. (line 28)
* field numbers: Nonconstant Fields. (line 6)
* field operator $: Fields. (line 19)
@@ -38372,7 +38376,7 @@ Index
* gsub() function, arguments of: String Functions. (line 492)
* gsub() function, escape processing: Gory Details. (line 6)
* Guerrero, Juan Manuel: Acknowledgments. (line 60)
-* Guerrero, Juan Manuel <1>: Contributors. (line 153)
+* Guerrero, Juan Manuel <1>: Contributors. (line 156)
* h debugger command (alias for help): Miscellaneous Debugger Commands.
(line 67)
* Hankerson, Darrel: Acknowledgments. (line 60)
@@ -38524,7 +38528,7 @@ Index
* Jacobs, Andrew: Passwd Functions. (line 90)
* Jaegermann, Michal: Acknowledgments. (line 60)
* Jaegermann, Michal <1>: Contributors. (line 46)
-* Jannick: Contributors. (line 155)
+* Jannick: Contributors. (line 158)
* Java implementation of awk: Other Versions. (line 146)
* Java programming language: Glossary. (line 466)
* jawk: Other Versions. (line 146)
@@ -38677,7 +38681,7 @@ Index
* mailing labels, printing: Labels Program. (line 6)
* mailing list, GNITS: Acknowledgments. (line 52)
* Malmberg, John: Acknowledgments. (line 60)
-* Malmberg, John <1>: Contributors. (line 143)
+* Malmberg, John <1>: Contributors. (line 146)
* Malmberg, John <2>: Maintainers. (line 14)
* mark parity: Ordinal Functions. (line 45)
* marked string extraction (internationalization): String Extraction.
@@ -39352,7 +39356,7 @@ Index
* Robbins, Arnold <2>: Passwd Functions. (line 90)
* Robbins, Arnold <3>: Alarm Program. (line 6)
* Robbins, Arnold <4>: General Data Types. (line 6)
-* Robbins, Arnold <5>: Contributors. (line 157)
+* Robbins, Arnold <5>: Contributors. (line 160)
* Robbins, Arnold <6>: Maintainers. (line 14)
* Robbins, Arnold <7>: Future Extensions. (line 6)
* Robbins, Bill: Getline/Pipe. (line 40)
@@ -39399,7 +39403,7 @@ Index
* scanning multidimensional arrays: Multiscanning. (line 11)
* Schorr, Andrew: Acknowledgments. (line 60)
* Schorr, Andrew <1>: Auto-set. (line 386)
-* Schorr, Andrew <2>: Contributors. (line 139)
+* Schorr, Andrew <2>: Contributors. (line 142)
* Schreiber, Bert: Acknowledgments. (line 38)
* Schreiber, Rita: Acknowledgments. (line 38)
* search and replace in strings: String Functions. (line 98)
@@ -40547,73 +40551,73 @@ Ref: Ranges and Locales-Footnote-11313381
Ref: Ranges and Locales-Footnote-21313408
Ref: Ranges and Locales-Footnote-31313643
Node: Contributors1313866
-Node: History summary1320143
-Node: Installation1321585
-Node: Gawk Distribution1322549
-Node: Getting1323041
-Node: Extracting1324040
-Node: Distribution contents1325746
-Node: Unix Installation1333636
-Node: Quick Installation1334456
-Node: Compiling with MPFR1336996
-Node: Shell Startup Files1337702
-Node: Additional Configuration Options1338859
-Node: Configuration Philosophy1341242
-Node: Compiling from Git1343742
-Node: Building the Documentation1344301
-Node: Non-Unix Installation1345713
-Node: PC Installation1346189
-Node: PC Binary Installation1347058
-Node: PC Compiling1347951
-Node: PC Using1349129
-Node: Cygwin1352845
-Node: MSYS1354097
-Node: OpenVMS Installation1354723
-Node: OpenVMS Compilation1355404
-Ref: OpenVMS Compilation-Footnote-11356887
-Node: OpenVMS Dynamic Extensions1356945
-Node: OpenVMS Installation Details1358581
-Node: OpenVMS Running1361012
-Node: OpenVMS GNV1365149
-Node: Bugs1365904
-Node: Bug definition1366824
-Node: Bug address1370425
-Node: Usenet1373994
-Node: Performance bugs1375207
-Node: Asking for help1378211
-Node: Maintainers1380198
-Node: Other Versions1381225
-Node: Installation summary1391214
-Node: Notes1392596
-Node: Compatibility Mode1393406
-Node: Additions1394228
-Node: Accessing The Source1395173
-Node: Adding Code1396704
-Node: New Ports1403815
-Node: Derived Files1408318
-Ref: Derived Files-Footnote-11414129
-Ref: Derived Files-Footnote-21414164
-Ref: Derived Files-Footnote-31414775
-Node: Future Extensions1414889
-Node: Implementation Limitations1415559
-Node: Extension Design1416801
-Node: Old Extension Problems1417961
-Ref: Old Extension Problems-Footnote-11419533
-Node: Extension New Mechanism Goals1419594
-Ref: Extension New Mechanism Goals-Footnote-11423064
-Node: Extension Other Design Decisions1423265
-Node: Extension Future Growth1425462
-Node: Notes summary1426082
-Node: Basic Concepts1427292
-Node: Basic High Level1427977
-Ref: figure-general-flow1428259
-Ref: figure-process-flow1428961
-Ref: Basic High Level-Footnote-11432331
-Node: Basic Data Typing1432520
-Node: Glossary1435928
-Node: Copying1468806
-Node: GNU Free Documentation License1506364
-Node: Index1531487
+Node: History summary1320224
+Node: Installation1321666
+Node: Gawk Distribution1322630
+Node: Getting1323122
+Node: Extracting1324121
+Node: Distribution contents1325827
+Node: Unix Installation1333717
+Node: Quick Installation1334537
+Node: Compiling with MPFR1337077
+Node: Shell Startup Files1337783
+Node: Additional Configuration Options1338940
+Node: Configuration Philosophy1341323
+Node: Compiling from Git1343823
+Node: Building the Documentation1344382
+Node: Non-Unix Installation1345794
+Node: PC Installation1346270
+Node: PC Binary Installation1347139
+Node: PC Compiling1348032
+Node: PC Using1349210
+Node: Cygwin1352926
+Node: MSYS1354178
+Node: OpenVMS Installation1354804
+Node: OpenVMS Compilation1355485
+Ref: OpenVMS Compilation-Footnote-11356968
+Node: OpenVMS Dynamic Extensions1357026
+Node: OpenVMS Installation Details1358662
+Node: OpenVMS Running1361093
+Node: OpenVMS GNV1365230
+Node: Bugs1365985
+Node: Bug definition1366905
+Node: Bug address1370506
+Node: Usenet1374075
+Node: Performance bugs1375288
+Node: Asking for help1378292
+Node: Maintainers1380279
+Node: Other Versions1381306
+Node: Installation summary1391295
+Node: Notes1392677
+Node: Compatibility Mode1393487
+Node: Additions1394309
+Node: Accessing The Source1395254
+Node: Adding Code1396785
+Node: New Ports1403896
+Node: Derived Files1408399
+Ref: Derived Files-Footnote-11414210
+Ref: Derived Files-Footnote-21414245
+Ref: Derived Files-Footnote-31414856
+Node: Future Extensions1414970
+Node: Implementation Limitations1415640
+Node: Extension Design1416882
+Node: Old Extension Problems1418042
+Ref: Old Extension Problems-Footnote-11419614
+Node: Extension New Mechanism Goals1419675
+Ref: Extension New Mechanism Goals-Footnote-11423145
+Node: Extension Other Design Decisions1423346
+Node: Extension Future Growth1425543
+Node: Notes summary1426163
+Node: Basic Concepts1427373
+Node: Basic High Level1428058
+Ref: figure-general-flow1428340
+Ref: figure-process-flow1429042
+Ref: Basic High Level-Footnote-11432412
+Node: Basic Data Typing1432601
+Node: Glossary1436009
+Node: Copying1468887
+Node: GNU Free Documentation License1506445
+Node: Index1531568
End Tag Table
diff --git a/doc/gawk.texi b/doc/gawk.texi
index face2060..7fca6aef 100644
--- a/doc/gawk.texi
+++ b/doc/gawk.texi
@@ -42174,6 +42174,11 @@ Efraim Yawitz contributed the original text for
@ref{Debugger}.
@cindex Naman, John
John Naman contributed the original text for @ref{Shadowed Variables}.
+@cindex Ferguson, Stuar
+@item
+
+Stuart Ferguson reworked the text in @ref{Splitting By Content}.
+
@item
@cindex Schorr, Andrew
The development of the extension API first released with
http://git.sv.gnu.org/cgit/gawk.git/commit/?id=97893028a0cd9c5cff59457bd27690deb6c9bfe4
commit 97893028a0cd9c5cff59457bd27690deb6c9bfe4
Merge: 20728b62 f4a85163
Author: Arnold D. Robbins <arnold@skeeve.com>
Date: Thu Oct 10 18:41:44 2024 +0300
Merge branch 'gawk-5.3-stable' into stable/fpat-doc
diff --cc doc/ChangeLog
index 0ff49120,4a3a0824..b2a88102
--- a/doc/ChangeLog
+++ b/doc/ChangeLog
@@@ -1,19 -6,9 +6,19 @@@
2024-10-05 Arnold D. Robbins <arnold@skeeve.com>
* gawk.texi: Move @cindex lines to be before @enumerate /
- @itemize. Otherwise there are empty lines in the HTML.
- Thanks to Thérèse Godefroy <godef.th@free.fr> for the report.
+ @itemize. Thanks to Thérèse Godefroy <godef.th@free.fr>
+ for the report.
+2024-10-02 Arnold D. Robbins <arnold@skeeve.com>
+
+ * gawk.texi (Splitting By Content): Some adjustments
+ to quoted-csv.awk.
+
+2024-09-20 Stuart Ferguson <stuart.fergs@gmail.com>
+
+ * gawk.texi (Splitting By Content): Reworked some more.
+ (More CSV): Removed.
+
2024-09-17 Arnold D. Robbins <arnold@skeeve.com>
* 5.3.1: Release tar made.
diff --cc doc/gawk.info
index 4c60f4be,63831263..38827372
--- a/doc/gawk.info
+++ b/doc/gawk.info
@@@ -37231,10 -37312,9 +37291,10 @@@ Inde
(line 23)
* CSV (comma separated values) data, records and fields: Comma Separated
Fields.
(line 6)
-* CSVMODE library for gawk: More CSV. (line 52)
+* CSVMODE library for gawk: Splitting By Content.
+ (line 133)
* ctime() user-defined function: Function Example. (line 74)
- * Curreli, Marco: Contributors. (line 147)
+ * Curreli, Marco: Contributors. (line 150)
* currency symbols, localization: Explaining gettext. (line 104)
* current namespace, pushing and popping: Changing The Namespace.
(line 29)
@@@ -39931,627 -40012,629 +39992,628 @@@
Tag Table:
Node: Top1203
- Node: Foreword346973
- Node: Foreword451547
- Node: Preface53091
- Ref: Preface-Footnote-156077
- Ref: Preface-Footnote-256186
- Ref: Preface-Footnote-356420
- Node: History56566
- Node: Names59180
- Ref: Names-Footnote-160334
- Node: This Manual60497
- Ref: This Manual-Footnote-167427
- Node: Conventions67535
- Node: Manual History69964
- Ref: Manual History-Footnote-172989
- Ref: Manual History-Footnote-273030
- Node: How To Contribute73104
- Node: Acknowledgments74050
- Node: Getting Started79039
- Node: Running gawk81566
- Node: One-shot82784
- Node: Read Terminal84083
- Node: Long86137
- Node: Executable Scripts87787
- Ref: Executable Scripts-Footnote-190557
- Node: Comments90664
- Node: Quoting93194
- Node: DOS Quoting98838
- Node: Sample Data Files100918
- Node: Very Simple103553
- Node: Two Rules109807
- Node: More Complex111759
- Node: Statements/Lines114179
- Ref: Statements/Lines-Footnote-1119691
- Node: Other Features119980
- Node: When120948
- Ref: When-Footnote-1122750
- Node: Intro Summary122815
- Node: Invoking Gawk123769
- Node: Command Line125331
- Node: Options126181
- Ref: Options-Footnote-1145523
- Ref: Options-Footnote-2145758
- Node: Other Arguments145783
- Node: Naming Standard Input149948
- Node: Environment Variables151218
- Node: AWKPATH Variable151792
- Ref: AWKPATH Variable-Footnote-1155376
- Ref: AWKPATH Variable-Footnote-2155410
- Node: AWKLIBPATH Variable155801
- Ref: AWKLIBPATH Variable-Footnote-1157576
- Node: Other Environment Variables157971
- Node: Exit Status162447
- Node: Include Files163160
- Node: Loading Shared Libraries167220
- Node: Obsolete168712
- Node: Undocumented169460
- Node: Invoking Summary169757
- Node: Regexp172782
- Node: Regexp Usage174276
- Node: Escape Sequences176377
- Ref: Escape Sequences-Footnote-1183912
- Node: Regexp Operators183990
- Node: Regexp Operator Details184483
- Ref: Regexp Operator Details-Footnote-1192494
- Node: Interval Expressions192653
- Ref: Interval Expressions-Footnote-1194920
- Node: Bracket Expressions195018
- Ref: table-char-classes197574
- Node: Leftmost Longest201072
- Node: Computed Regexps202428
- Node: GNU Regexp Operators205943
- Node: Case-sensitivity211040
- Ref: Case-sensitivity-Footnote-1213990
- Ref: Case-sensitivity-Footnote-2214233
- Node: Regexp Summary214345
- Node: Reading Files215867
- Node: Records218186
- Node: awk split records219461
- Node: gawk split records224343
- Ref: gawk split records-Footnote-1229631
- Node: Fields229668
- Ref: Fields-Footnote-1232584
- Node: Nonconstant Fields232704
- Ref: Nonconstant Fields-Footnote-1235012
- Node: Changing Fields235228
- Node: Field Separators241526
- Node: Default Field Splitting244395
- Node: Regexp Field Splitting245537
- Node: Single Character Fields249366
- Node: Comma Separated Fields250455
- Ref: table-csv-examples251859
- Node: Command Line Field Separator254158
- Node: Full Line Fields257534
- Ref: Full Line Fields-Footnote-1259112
- Ref: Full Line Fields-Footnote-2259158
- Node: Field Splitting Summary259263
- Node: Constant Size261580
- Node: Fixed width data262324
- Node: Skipping intervening265839
- Node: Allowing trailing data266641
- Node: Fields with fixed data267702
- Node: Splitting By Content269324
- Ref: Splitting By Content-Footnote-1274818
- Node: FS versus FPAT274981
- Node: Testing field creation276164
- Node: Multiple Line277938
- Node: Getline284407
- Node: Plain Getline286995
- Node: Getline/Variable289643
- Node: Getline/File290839
- Node: Getline/Variable/File292287
- Ref: Getline/Variable/File-Footnote-1293932
- Node: Getline/Pipe294028
- Node: Getline/Variable/Pipe296836
- Node: Getline/Coprocess298019
- Node: Getline/Variable/Coprocess299342
- Node: Getline Notes300108
- Node: Getline Summary304085
- Ref: table-getline-variants304529
- Node: Read Timeout305433
- Ref: Read Timeout-Footnote-1309395
- Node: Retrying Input309453
- Node: Command-line directories310720
- Node: Input Summary311658
- Node: Input Exercises315038
- Node: Printing315476
- Node: Print317419
- Node: Print Examples318920
- Node: Output Separators321765
- Node: OFMT323872
- Node: Printf325585
- Node: Basic Printf326390
- Node: Control Letters328025
- Node: Format Modifiers333471
- Node: Printf Examples339743
- Node: Redirection342284
- Node: Special FD350056
- Ref: Special FD-Footnote-1353354
- Node: Special Files353432
- Node: Other Inherited Files354061
- Node: Special Network355126
- Node: Special Caveats356014
- Node: Close Files And Pipes356997
- Ref: Close Files And Pipes-Footnote-1363121
- Node: Close Return Value363269
- Ref: table-close-pipe-return-values364540
- Ref: Close Return Value-Footnote-1365371
- Node: Noflush365527
- Node: Nonfatal367035
- Node: Output Summary369450
- Node: Output Exercises370736
- Node: Expressions371427
- Node: Values372627
- Node: Constants373305
- Node: Scalar Constants374000
- Ref: Scalar Constants-Footnote-1376576
- Ref: Scalar Constants-Footnote-2376826
- Node: Nondecimal-numbers376906
- Node: Regexp Constants380019
- Node: Using Constant Regexps380565
- Node: Standard Regexp Constants381211
- Node: Strong Regexp Constants384507
- Node: Variables388350
- Node: Using Variables389015
- Node: Assignment Options390989
- Node: Conversion393540
- Node: Strings And Numbers394072
- Ref: Strings And Numbers-Footnote-1397282
- Node: Locale influences conversions397391
- Ref: table-locale-affects400229
- Node: All Operators400871
- Node: Arithmetic Ops401512
- Node: Concatenation404335
- Ref: Concatenation-Footnote-1407271
- Node: Assignment Ops407390
- Ref: table-assign-ops412517
- Node: Increment Ops413898
- Node: Truth Values and Conditions417489
- Node: Truth Values418583
- Node: Typing and Comparison419663
- Node: Variable Typing420495
- Ref: Variable Typing-Footnote-1427139
- Ref: Variable Typing-Footnote-2427219
- Node: Comparison Operators427300
- Ref: table-relational-ops427727
- Node: POSIX String Comparison431403
- Ref: POSIX String Comparison-Footnote-1433160
- Ref: POSIX String Comparison-Footnote-2433303
- Node: Boolean Ops433387
- Ref: Boolean Ops-Footnote-1438061
- Node: Conditional Exp438157
- Node: Function Calls439937
- Node: Precedence443884
- Node: Locales447747
- Node: Expressions Summary449423
- Node: Patterns and Actions452078
- Node: Pattern Overview453214
- Node: Regexp Patterns454939
- Node: Expression Patterns455485
- Node: Ranges459390
- Node: BEGIN/END462564
- Node: Using BEGIN/END463373
- Ref: Using BEGIN/END-Footnote-1466281
- Node: I/O And BEGIN/END466391
- Node: BEGINFILE/ENDFILE468873
- Node: Empty472303
- Node: Using Shell Variables472620
- Node: Action Overview474956
- Node: Statements477392
- Node: If Statement479288
- Node: While Statement480851
- Node: Do Statement482939
- Node: For Statement484123
- Node: Switch Statement487478
- Node: Break Statement490027
- Node: Continue Statement492219
- Node: Next Statement494150
- Node: Nextfile Statement496629
- Node: Exit Statement499482
- Node: Built-in Variables502009
- Node: User-modified503186
- Node: Auto-set511393
- Ref: Auto-set-Footnote-1529477
- Ref: Auto-set-Footnote-2529695
- Node: ARGC and ARGV529751
- Node: Pattern Action Summary534180
- Node: Arrays536786
- Node: Array Basics538159
- Node: Array Intro539007
- Ref: figure-array-elements541018
- Ref: Array Intro-Footnote-1543871
- Node: Reference to Elements544003
- Node: Assigning Elements546523
- Node: Array Example547018
- Node: Scanning an Array548980
- Node: Controlling Scanning552075
- Ref: Controlling Scanning-Footnote-1558710
- Node: Numeric Array Subscripts559034
- Node: Uninitialized Subscripts561302
- Node: Delete562975
- Ref: Delete-Footnote-1565787
- Node: Multidimensional565844
- Node: Multiscanning569047
- Node: Arrays of Arrays570714
- Node: Arrays Summary575018
- Node: Functions577205
- Node: Built-in578337
- Node: Calling Built-in579526
- Node: Boolean Functions581566
- Node: Numeric Functions582128
- Ref: Numeric Functions-Footnote-1586313
- Ref: Numeric Functions-Footnote-2586996
- Ref: Numeric Functions-Footnote-3587048
- Node: String Functions587324
- Ref: String Functions-Footnote-1613775
- Ref: String Functions-Footnote-2613907
- Ref: String Functions-Footnote-3614163
- Node: Gory Details614250
- Ref: table-sub-escapes616259
- Ref: table-sub-proposed617890
- Ref: table-posix-sub619385
- Ref: table-gensub-escapes621058
- Ref: Gory Details-Footnote-1621977
- Node: I/O Functions622131
- Ref: table-system-return-values628807
- Ref: I/O Functions-Footnote-1630969
- Ref: I/O Functions-Footnote-2631117
- Node: Time Functions631237
- Ref: Time Functions-Footnote-1642949
- Ref: Time Functions-Footnote-2643017
- Ref: Time Functions-Footnote-3643179
- Ref: Time Functions-Footnote-4643290
- Ref: Time Functions-Footnote-5643406
- Ref: Time Functions-Footnote-6643633
- Node: Bitwise Functions643911
- Ref: table-bitwise-ops644509
- Ref: Bitwise Functions-Footnote-1650751
- Ref: Bitwise Functions-Footnote-2650928
- Node: Type Functions651123
- Node: I18N Functions653294
- Node: User-defined655029
- Node: Definition Syntax655775
- Ref: Definition Syntax-Footnote-1661593
- Node: Function Example661668
- Ref: Function Example-Footnote-1664647
- Node: Function Calling664669
- Node: Calling A Function665261
- Node: Variable Scope666231
- Node: Pass By Value/Reference669285
- Node: Function Caveats672013
- Ref: Function Caveats-Footnote-1674104
- Node: Return Statement674224
- Node: Dynamic Typing677256
- Node: Dynamic Typing Awk677834
- Node: Dynamic Typing Gawk679972
- Node: Indirect Calls683342
- Node: Functions Summary694479
- Node: Library Functions697445
- Ref: Library Functions-Footnote-1700993
- Ref: Library Functions-Footnote-2701138
- Node: Library Names701313
- Ref: Library Names-Footnote-1705084
- Ref: Library Names-Footnote-2705311
- Node: General Functions705405
- Node: Strtonum Function706675
- Node: Assert Function709757
- Node: Round Function713207
- Node: Cliff Random Function714779
- Node: Ordinal Functions715803
- Ref: Ordinal Functions-Footnote-1718906
- Ref: Ordinal Functions-Footnote-2719158
- Node: Join Function719372
- Ref: Join Function-Footnote-1721170
- Node: Getlocaltime Function721374
- Node: Readfile Function725148
- Node: Shell Quoting727177
- Node: Isnumeric Function728633
- Node: To CSV Function730069
- Node: Data File Management732161
- Node: Filetrans Function732793
- Node: Rewind Function737069
- Node: File Checking739040
- Ref: File Checking-Footnote-1740406
- Node: Empty Files740611
- Node: Ignoring Assigns742674
- Node: Getopt Function744248
- Ref: Getopt Function-Footnote-1760066
- Node: Passwd Functions760278
- Ref: Passwd Functions-Footnote-1769413
- Node: Group Functions769501
- Ref: Group Functions-Footnote-1777625
- Node: Walking Arrays777836
- Node: Library Functions Summary780882
- Node: Library Exercises782302
- Node: Sample Programs782787
- Node: Running Examples783569
- Node: Clones784321
- Node: Cut Program785589
- Node: Egrep Program796013
- Node: Id Program805312
- Node: Split Program815404
- Ref: Split Program-Footnote-1825617
- Node: Tee Program825802
- Node: Uniq Program828708
- Node: Wc Program836568
- Node: Bytes vs. Characters836963
- Node: Using extensions838563
- Node: wc program839341
- Node: Miscellaneous Programs844334
- Node: Dupword Program845559
- Node: Alarm Program847608
- Node: Translate Program852511
- Ref: Translate Program-Footnote-1857220
- Node: Labels Program857498
- Ref: Labels Program-Footnote-1860933
- Node: Word Sorting861017
- Node: History Sorting865191
- Node: Extract Program867464
- Node: Simple Sed875717
- Node: Igawk Program878927
- Ref: Igawk Program-Footnote-1894137
- Ref: Igawk Program-Footnote-2894343
- Ref: Igawk Program-Footnote-3894473
- Node: Anagram Program894600
- Node: Signature Program897686
- Node: Programs Summary898936
- Node: Programs Exercises900190
- Ref: Programs Exercises-Footnote-1905019
- Node: Advanced Features905105
- Node: Nondecimal Data907586
- Node: Boolean Typed Values909216
- Node: Array Sorting911173
- Node: Controlling Array Traversal911902
- Ref: Controlling Array Traversal-Footnote-1920405
- Node: Array Sorting Functions920527
- Ref: Array Sorting Functions-Footnote-1926624
- Node: Two-way I/O926832
- Ref: Two-way I/O-Footnote-1934803
- Ref: Two-way I/O-Footnote-2934994
- Node: TCP/IP Networking935076
- Node: Profiling938244
- Node: Persistent Memory947914
- Ref: Persistent Memory-Footnote-1957486
- Node: Extension Philosophy957617
- Node: Advanced Features Summary959144
- Node: Internationalization961410
- Node: I18N and L10N963112
- Node: Explaining gettext963807
- Ref: Explaining gettext-Footnote-1969943
- Ref: Explaining gettext-Footnote-2970136
- Node: Programmer i18n970301
- Ref: Programmer i18n-Footnote-1975413
- Node: Translator i18n975462
- Node: String Extraction976292
- Ref: String Extraction-Footnote-1977468
- Node: Printf Ordering977566
- Ref: Printf Ordering-Footnote-1980424
- Node: I18N Portability980492
- Ref: I18N Portability-Footnote-1983052
- Node: I18N Example983119
- Ref: I18N Example-Footnote-1986513
- Ref: I18N Example-Footnote-2986586
- Node: Gawk I18N986703
- Node: I18N Summary987357
- Node: Debugger988754
- Node: Debugging989774
- Node: Debugging Concepts990223
- Node: Debugging Terms992040
- Node: Awk Debugging994643
- Ref: Awk Debugging-Footnote-1995616
- Node: Sample Debugging Session995752
- Node: Debugger Invocation996302
- Node: Finding The Bug997927
- Node: List of Debugger Commands1004559
- Node: Breakpoint Control1005936
- Node: Debugger Execution Control1009758
- Node: Viewing And Changing Data1013232
- Node: Execution Stack1016966
- Node: Debugger Info1018647
- Node: Miscellaneous Debugger Commands1022942
- Node: Readline Support1028183
- Node: Limitations1029127
- Node: Debugging Summary1031751
- Node: Namespaces1033050
- Node: Global Namespace1034177
- Node: Qualified Names1035611
- Node: Default Namespace1036646
- Node: Changing The Namespace1037419
- Node: Naming Rules1039101
- Node: Internal Name Management1041056
- Node: Namespace Example1042126
- Node: Namespace And Features1044703
- Node: Namespace Summary1046158
- Node: Arbitrary Precision Arithmetic1047669
- Node: Computer Arithmetic1049188
- Ref: table-numeric-ranges1053113
- Ref: table-floating-point-ranges1053610
- Ref: Computer Arithmetic-Footnote-11054268
- Node: Math Definitions1054325
- Ref: table-ieee-formats1057357
- Node: MPFR features1057930
- Node: MPFR On Parole1058383
- Ref: MPFR On Parole-Footnote-11059224
- Node: MPFR Intro1059383
- Node: FP Math Caution1061067
- Ref: FP Math Caution-Footnote-11062139
- Node: Inexactness of computations1062512
- Node: Inexact representation1063543
- Node: Comparing FP Values1064924
- Node: Errors accumulate1066182
- Node: Strange values1067647
- Ref: Strange values-Footnote-11070301
- Node: Getting Accuracy1070406
- Node: Try To Round1073143
- Node: Setting precision1074050
- Ref: table-predefined-precision-strings1074755
- Node: Setting the rounding mode1076639
- Ref: table-gawk-rounding-modes1077021
- Ref: Setting the rounding mode-Footnote-11081073
- Node: Arbitrary Precision Integers1081258
- Ref: Arbitrary Precision Integers-Footnote-11084468
- Node: Checking for MPFR1084621
- Node: POSIX Floating Point Problems1086111
- Ref: POSIX Floating Point Problems-Footnote-11090931
- Node: Floating point summary1090969
- Node: Dynamic Extensions1093225
- Node: Extension Intro1094822
- Node: Plugin License1096124
- Node: Extension Mechanism Outline1096937
- Ref: figure-load-extension1097388
- Ref: figure-register-new-function1098966
- Ref: figure-call-new-function1100075
- Node: Extension API Description1102190
- Node: Extension API Functions Introduction1103919
- Ref: table-api-std-headers1105813
- Node: General Data Types1110254
- Ref: General Data Types-Footnote-11119400
- Node: Memory Allocation Functions1119703
- Ref: Memory Allocation Functions-Footnote-11124420
- Node: Constructor Functions1124519
- Node: API Ownership of MPFR and GMP Values1128420
- Node: Registration Functions1129973
- Node: Extension Functions1130677
- Node: Exit Callback Functions1136251
- Node: Extension Version String1137565
- Node: Input Parsers1138260
- Node: Output Wrappers1152879
- Node: Two-way processors1157721
- Node: Printing Messages1160074
- Ref: Printing Messages-Footnote-11161285
- Node: Updating ERRNO1161438
- Node: Requesting Values1162237
- Ref: table-value-types-returned1162990
- Node: Accessing Parameters1165049
- Node: Symbol Table Access1166330
- Node: Symbol table by name1166842
- Ref: Symbol table by name-Footnote-11170043
- Node: Symbol table by cookie1170175
- Ref: Symbol table by cookie-Footnote-11174444
- Node: Cached values1174508
- Ref: Cached values-Footnote-11178140
- Node: Array Manipulation1178297
- Ref: Array Manipulation-Footnote-11179396
- Node: Array Data Types1179433
- Ref: Array Data Types-Footnote-11182251
- Node: Array Functions1182347
- Node: Flattening Arrays1187376
- Node: Creating Arrays1194424
- Node: Redirection API1199266
- Node: Extension API Variables1202283
- Node: Extension Versioning1203006
- Ref: gawk-api-version1203435
- Node: Extension GMP/MPFR Versioning1205222
- Node: Extension API Informational Variables1206926
- Node: Extension API Boilerplate1208179
- Node: Changes from API V11212309
- Node: Finding Extensions1213941
- Node: Extension Example1214516
- Node: Internal File Description1215338
- Node: Internal File Ops1219630
- Ref: Internal File Ops-Footnote-11231180
- Node: Using Internal File Ops1231328
- Ref: Using Internal File Ops-Footnote-11233761
- Node: Extension Samples1234039
- Node: Extension Sample File Functions1235608
- Node: Extension Sample Fnmatch1243733
- Node: Extension Sample Fork1245328
- Node: Extension Sample Inplace1246604
- Node: Extension Sample Ord1250706
- Node: Extension Sample Readdir1251582
- Ref: table-readdir-file-types1252371
- Node: Extension Sample Revout1253727
- Node: Extension Sample Rev2way1254324
- Node: Extension Sample Read write array1255076
- Node: Extension Sample Readfile1258350
- Node: Extension Sample Time1259481
- Node: Extension Sample API Tests1261481
- Node: gawkextlib1261989
- Node: Extension summary1265021
- Node: Extension Exercises1268869
- Node: Language History1270139
- Node: V7/SVR3.11271851
- Node: SVR41274201
- Node: POSIX1275733
- Node: BTL1277158
- Node: POSIX/GNU1277925
- Ref: Gawk Extension Functions1281315
- Node: Feature History1284739
- Node: Common Extensions1304580
- Node: Ranges and Locales1306055
- Ref: Ranges and Locales-Footnote-11310840
- Ref: Ranges and Locales-Footnote-21310867
- Ref: Ranges and Locales-Footnote-31311102
- Node: Contributors1311325
- Node: History summary1317516
- Node: Installation1318958
- Node: Gawk Distribution1319922
- Node: Getting1320414
- Node: Extracting1321413
- Node: Distribution contents1323119
- Node: Unix Installation1331009
- Node: Quick Installation1331829
- Node: Compiling with MPFR1334369
- Node: Shell Startup Files1335075
- Node: Additional Configuration Options1336232
- Node: Configuration Philosophy1338615
- Node: Compiling from Git1341115
- Node: Building the Documentation1341674
- Node: Non-Unix Installation1343086
- Node: PC Installation1343562
- Node: PC Binary Installation1344431
- Node: PC Compiling1345324
- Node: PC Using1346502
- Node: Cygwin1350218
- Node: MSYS1351470
- Node: OpenVMS Installation1352096
- Node: OpenVMS Compilation1352777
- Ref: OpenVMS Compilation-Footnote-11354260
- Node: OpenVMS Dynamic Extensions1354318
- Node: OpenVMS Installation Details1355954
- Node: OpenVMS Running1358385
- Node: OpenVMS GNV1362522
- Node: Bugs1363277
- Node: Bug definition1364197
- Node: Bug address1367798
- Node: Usenet1371367
- Node: Performance bugs1372580
- Node: Asking for help1375584
- Node: Maintainers1377571
- Node: Other Versions1378598
- Node: Installation summary1388587
- Node: Notes1389969
- Node: Compatibility Mode1390779
- Node: Additions1391601
- Node: Accessing The Source1392546
- Node: Adding Code1394077
- Node: New Ports1401188
- Node: Derived Files1405691
- Ref: Derived Files-Footnote-11411502
- Ref: Derived Files-Footnote-21411537
- Ref: Derived Files-Footnote-31412148
- Node: Future Extensions1412262
- Node: Implementation Limitations1412932
- Node: Extension Design1414174
- Node: Old Extension Problems1415334
- Ref: Old Extension Problems-Footnote-11416906
- Node: Extension New Mechanism Goals1416967
- Ref: Extension New Mechanism Goals-Footnote-11420437
- Node: Extension Other Design Decisions1420638
- Node: Extension Future Growth1422835
- Node: Notes summary1423455
- Node: Basic Concepts1424665
- Node: Basic High Level1425350
- Ref: figure-general-flow1425632
- Ref: figure-process-flow1426334
- Ref: Basic High Level-Footnote-11429704
- Node: Basic Data Typing1429893
- Node: Glossary1433301
- Node: Copying1466179
- Node: GNU Free Documentation License1503737
- Node: Index1528860
-Node: Foreword347110
-Node: Foreword451684
-Node: Preface53228
-Ref: Preface-Footnote-156214
-Ref: Preface-Footnote-256323
-Ref: Preface-Footnote-356557
-Node: History56703
-Node: Names59317
-Ref: Names-Footnote-160471
-Node: This Manual60634
-Ref: This Manual-Footnote-167564
-Node: Conventions67672
-Node: Manual History70101
-Ref: Manual History-Footnote-173126
-Ref: Manual History-Footnote-273167
-Node: How To Contribute73241
-Node: Acknowledgments74187
-Node: Getting Started79176
-Node: Running gawk81703
-Node: One-shot82921
-Node: Read Terminal84220
-Node: Long86274
-Node: Executable Scripts87924
-Ref: Executable Scripts-Footnote-190694
-Node: Comments90801
-Node: Quoting93331
-Node: DOS Quoting98975
-Node: Sample Data Files101055
-Node: Very Simple103690
-Node: Two Rules109944
-Node: More Complex111896
-Node: Statements/Lines114316
-Ref: Statements/Lines-Footnote-1119828
-Node: Other Features120117
-Node: When121085
-Ref: When-Footnote-1122887
-Node: Intro Summary122952
-Node: Invoking Gawk123906
-Node: Command Line125468
-Node: Options126318
-Ref: Options-Footnote-1145660
-Ref: Options-Footnote-2145895
-Node: Other Arguments145920
-Node: Naming Standard Input150085
-Node: Environment Variables151355
-Node: AWKPATH Variable151929
-Ref: AWKPATH Variable-Footnote-1155513
-Ref: AWKPATH Variable-Footnote-2155547
-Node: AWKLIBPATH Variable155938
-Ref: AWKLIBPATH Variable-Footnote-1157713
-Node: Other Environment Variables158108
-Node: Exit Status162584
-Node: Include Files163297
-Node: Loading Shared Libraries167357
-Node: Obsolete168849
-Node: Undocumented169597
-Node: Invoking Summary169894
-Node: Regexp172919
-Node: Regexp Usage174413
-Node: Escape Sequences176514
-Ref: Escape Sequences-Footnote-1184049
-Node: Regexp Operators184127
-Node: Regexp Operator Details184620
-Ref: Regexp Operator Details-Footnote-1192631
-Node: Interval Expressions192790
-Ref: Interval Expressions-Footnote-1195057
-Node: Bracket Expressions195155
-Ref: table-char-classes197711
-Node: Leftmost Longest201209
-Node: Computed Regexps202565
-Node: GNU Regexp Operators206080
-Node: Case-sensitivity211177
-Ref: Case-sensitivity-Footnote-1214127
-Ref: Case-sensitivity-Footnote-2214370
-Node: Regexp Summary214482
-Node: Reading Files216004
-Node: Records218323
-Node: awk split records219598
-Node: gawk split records224480
-Ref: gawk split records-Footnote-1229768
-Node: Fields229805
-Ref: Fields-Footnote-1232721
-Node: Nonconstant Fields232841
-Ref: Nonconstant Fields-Footnote-1235149
-Node: Changing Fields235365
-Node: Field Separators241663
-Node: Default Field Splitting244532
-Node: Regexp Field Splitting245674
-Node: Single Character Fields249503
-Node: Comma Separated Fields250592
-Ref: table-csv-examples251996
-Node: Command Line Field Separator254295
-Node: Full Line Fields257671
-Ref: Full Line Fields-Footnote-1259249
-Ref: Full Line Fields-Footnote-2259295
-Node: Field Splitting Summary259400
-Node: Constant Size261717
-Node: Fixed width data262461
-Node: Skipping intervening265976
-Node: Allowing trailing data266778
-Node: Fields with fixed data267839
-Node: Splitting By Content269461
-Ref: Splitting By Content-Footnote-1273911
-Node: More CSV274074
-Node: FS versus FPAT275732
-Node: Testing field creation276932
-Node: Multiple Line278706
-Node: Getline285175
-Node: Plain Getline287763
-Node: Getline/Variable290411
-Node: Getline/File291607
-Node: Getline/Variable/File293055
-Ref: Getline/Variable/File-Footnote-1294700
-Node: Getline/Pipe294796
-Node: Getline/Variable/Pipe297604
-Node: Getline/Coprocess298787
-Node: Getline/Variable/Coprocess300110
-Node: Getline Notes300876
-Node: Getline Summary304853
-Ref: table-getline-variants305297
-Node: Read Timeout306201
-Ref: Read Timeout-Footnote-1310163
-Node: Retrying Input310221
-Node: Command-line directories311488
-Node: Input Summary312426
-Node: Input Exercises315806
-Node: Printing316244
-Node: Print318187
-Node: Print Examples319688
-Node: Output Separators322533
-Node: OFMT324640
-Node: Printf326353
-Node: Basic Printf327158
-Node: Control Letters328793
-Node: Format Modifiers334239
-Node: Printf Examples340511
-Node: Redirection343052
-Node: Special FD350824
-Ref: Special FD-Footnote-1354122
-Node: Special Files354200
-Node: Other Inherited Files354829
-Node: Special Network355894
-Node: Special Caveats356782
-Node: Close Files And Pipes357765
-Ref: Close Files And Pipes-Footnote-1363889
-Node: Close Return Value364037
-Ref: table-close-pipe-return-values365308
-Ref: Close Return Value-Footnote-1366139
-Node: Noflush366295
-Node: Nonfatal367803
-Node: Output Summary370218
-Node: Output Exercises371504
-Node: Expressions372195
-Node: Values373395
-Node: Constants374073
-Node: Scalar Constants374768
-Ref: Scalar Constants-Footnote-1377344
-Ref: Scalar Constants-Footnote-2377594
-Node: Nondecimal-numbers377674
-Node: Regexp Constants380787
-Node: Using Constant Regexps381333
-Node: Standard Regexp Constants381979
-Node: Strong Regexp Constants385275
-Node: Variables389118
-Node: Using Variables389783
-Node: Assignment Options391757
-Node: Conversion394308
-Node: Strings And Numbers394840
-Ref: Strings And Numbers-Footnote-1398050
-Node: Locale influences conversions398159
-Ref: table-locale-affects400997
-Node: All Operators401639
-Node: Arithmetic Ops402280
-Node: Concatenation405103
-Ref: Concatenation-Footnote-1408039
-Node: Assignment Ops408158
-Ref: table-assign-ops413285
-Node: Increment Ops414666
-Node: Truth Values and Conditions418257
-Node: Truth Values419351
-Node: Typing and Comparison420431
-Node: Variable Typing421263
-Ref: Variable Typing-Footnote-1427907
-Ref: Variable Typing-Footnote-2427987
-Node: Comparison Operators428068
-Ref: table-relational-ops428495
-Node: POSIX String Comparison432171
-Ref: POSIX String Comparison-Footnote-1433928
-Ref: POSIX String Comparison-Footnote-2434071
-Node: Boolean Ops434155
-Ref: Boolean Ops-Footnote-1438829
-Node: Conditional Exp438925
-Node: Function Calls440705
-Node: Precedence444652
-Node: Locales448515
-Node: Expressions Summary450191
-Node: Patterns and Actions452846
-Node: Pattern Overview453982
-Node: Regexp Patterns455707
-Node: Expression Patterns456253
-Node: Ranges460158
-Node: BEGIN/END463332
-Node: Using BEGIN/END464141
-Ref: Using BEGIN/END-Footnote-1467049
-Node: I/O And BEGIN/END467159
-Node: BEGINFILE/ENDFILE469641
-Node: Empty473071
-Node: Using Shell Variables473388
-Node: Action Overview475724
-Node: Statements478160
-Node: If Statement480056
-Node: While Statement481619
-Node: Do Statement483707
-Node: For Statement484891
-Node: Switch Statement488246
-Node: Break Statement490795
-Node: Continue Statement492987
-Node: Next Statement494918
-Node: Nextfile Statement497397
-Node: Exit Statement500250
-Node: Built-in Variables502777
-Node: User-modified503954
-Node: Auto-set512161
-Ref: Auto-set-Footnote-1530245
-Ref: Auto-set-Footnote-2530463
-Node: ARGC and ARGV530519
-Node: Pattern Action Summary534948
-Node: Arrays537554
-Node: Array Basics538927
-Node: Array Intro539775
-Ref: figure-array-elements541786
-Ref: Array Intro-Footnote-1544639
-Node: Reference to Elements544771
-Node: Assigning Elements547291
-Node: Array Example547786
-Node: Scanning an Array549748
-Node: Controlling Scanning552843
-Ref: Controlling Scanning-Footnote-1559478
-Node: Numeric Array Subscripts559802
-Node: Uninitialized Subscripts562070
-Node: Delete563743
-Ref: Delete-Footnote-1566555
-Node: Multidimensional566612
-Node: Multiscanning569815
-Node: Arrays of Arrays571482
-Node: Arrays Summary575786
-Node: Functions577973
-Node: Built-in579175
-Node: Calling Built-in580364
-Node: Boolean Functions582404
-Node: Numeric Functions582966
-Ref: Numeric Functions-Footnote-1587151
-Ref: Numeric Functions-Footnote-2587834
-Ref: Numeric Functions-Footnote-3587886
-Node: String Functions588162
-Ref: String Functions-Footnote-1614613
-Ref: String Functions-Footnote-2614745
-Ref: String Functions-Footnote-3615001
-Node: Gory Details615088
-Ref: table-sub-escapes617097
-Ref: table-sub-proposed618728
-Ref: table-posix-sub620223
-Ref: table-gensub-escapes621896
-Ref: Gory Details-Footnote-1622815
-Node: I/O Functions622969
-Ref: table-system-return-values629645
-Ref: I/O Functions-Footnote-1631807
-Ref: I/O Functions-Footnote-2631955
-Node: Time Functions632075
-Ref: Time Functions-Footnote-1643787
-Ref: Time Functions-Footnote-2643855
-Ref: Time Functions-Footnote-3644017
-Ref: Time Functions-Footnote-4644128
-Ref: Time Functions-Footnote-5644244
-Ref: Time Functions-Footnote-6644471
-Node: Bitwise Functions644749
-Ref: table-bitwise-ops645347
-Ref: Bitwise Functions-Footnote-1651589
-Ref: Bitwise Functions-Footnote-2651766
-Node: Type Functions651961
-Node: I18N Functions654132
-Node: User-defined655867
-Node: Definition Syntax656613
-Ref: Definition Syntax-Footnote-1662468
-Node: Function Example662543
-Ref: Function Example-Footnote-1665522
-Node: Function Calling665544
-Node: Calling A Function666136
-Node: Variable Scope667106
-Node: Pass By Value/Reference670160
-Node: Function Caveats672888
-Ref: Function Caveats-Footnote-1674979
-Node: Return Statement675099
-Node: Dynamic Typing678131
-Node: Dynamic Typing Awk678713
-Node: Dynamic Typing Gawk680851
-Node: Shadowed Variables684221
-Node: Indirect Calls686569
-Node: Functions Summary697710
-Node: Library Functions700676
-Ref: Library Functions-Footnote-1704224
-Ref: Library Functions-Footnote-2704369
-Node: Library Names704544
-Ref: Library Names-Footnote-1708315
-Ref: Library Names-Footnote-2708542
-Node: General Functions708636
-Node: Strtonum Function709906
-Node: Assert Function712988
-Node: Round Function716438
-Node: Cliff Random Function718010
-Node: Ordinal Functions719034
-Ref: Ordinal Functions-Footnote-1722137
-Ref: Ordinal Functions-Footnote-2722389
-Node: Join Function722603
-Ref: Join Function-Footnote-1724401
-Node: Getlocaltime Function724605
-Node: Readfile Function728379
-Node: Shell Quoting730408
-Node: Isnumeric Function731864
-Node: To CSV Function733300
-Node: Data File Management735392
-Node: Filetrans Function736024
-Node: Rewind Function740300
-Node: File Checking742271
-Ref: File Checking-Footnote-1743637
-Node: Empty Files743842
-Node: Ignoring Assigns745905
-Node: Getopt Function747479
-Ref: Getopt Function-Footnote-1763297
-Node: Passwd Functions763509
-Ref: Passwd Functions-Footnote-1772644
-Node: Group Functions772732
-Ref: Group Functions-Footnote-1780856
-Node: Walking Arrays781067
-Node: Library Functions Summary784113
-Node: Library Exercises785533
-Node: Sample Programs786018
-Node: Running Examples786800
-Node: Clones787552
-Node: Cut Program788820
-Node: Egrep Program799244
-Node: Id Program808543
-Node: Split Program818635
-Ref: Split Program-Footnote-1828848
-Node: Tee Program829033
-Node: Uniq Program831939
-Node: Wc Program839799
-Node: Bytes vs. Characters840194
-Node: Using extensions841794
-Node: wc program842572
-Node: Miscellaneous Programs847565
-Node: Dupword Program848790
-Node: Alarm Program850839
-Node: Translate Program855742
-Ref: Translate Program-Footnote-1860451
-Node: Labels Program860729
-Ref: Labels Program-Footnote-1864164
-Node: Word Sorting864248
-Node: History Sorting868422
-Node: Extract Program870695
-Node: Simple Sed878948
-Node: Igawk Program882158
-Ref: Igawk Program-Footnote-1897368
-Ref: Igawk Program-Footnote-2897574
-Ref: Igawk Program-Footnote-3897704
-Node: Anagram Program897831
-Node: Signature Program900917
-Node: Programs Summary902167
-Node: Programs Exercises903421
-Ref: Programs Exercises-Footnote-1908250
-Node: Advanced Features908336
-Node: Nondecimal Data910817
-Node: Boolean Typed Values912447
-Node: Array Sorting914404
-Node: Controlling Array Traversal915133
-Ref: Controlling Array Traversal-Footnote-1923636
-Node: Array Sorting Functions923758
-Ref: Array Sorting Functions-Footnote-1929855
-Node: Two-way I/O930063
-Ref: Two-way I/O-Footnote-1938034
-Ref: Two-way I/O-Footnote-2938225
-Node: TCP/IP Networking938307
-Node: Profiling941475
-Node: Persistent Memory951145
-Ref: Persistent Memory-Footnote-1960717
-Node: Extension Philosophy960848
-Node: Advanced Features Summary962375
-Node: Internationalization964641
-Node: I18N and L10N966343
-Node: Explaining gettext967038
-Ref: Explaining gettext-Footnote-1973174
-Ref: Explaining gettext-Footnote-2973367
-Node: Programmer i18n973532
-Ref: Programmer i18n-Footnote-1978644
-Node: Translator i18n978693
-Node: String Extraction979523
-Ref: String Extraction-Footnote-1980699
-Node: Printf Ordering980797
-Ref: Printf Ordering-Footnote-1983655
-Node: I18N Portability983723
-Ref: I18N Portability-Footnote-1986283
-Node: I18N Example986350
-Ref: I18N Example-Footnote-1989744
-Ref: I18N Example-Footnote-2989817
-Node: Gawk I18N989934
-Node: I18N Summary990588
-Node: Debugger991985
-Node: Debugging993005
-Node: Debugging Concepts993454
-Node: Debugging Terms995271
-Node: Awk Debugging997874
-Ref: Awk Debugging-Footnote-1998847
-Node: Sample Debugging Session998983
-Node: Debugger Invocation999533
-Node: Finding The Bug1001158
-Node: List of Debugger Commands1007790
-Node: Breakpoint Control1009167
-Node: Debugger Execution Control1012989
-Node: Viewing And Changing Data1016463
-Node: Execution Stack1020197
-Node: Debugger Info1021878
-Node: Miscellaneous Debugger Commands1026173
-Node: Readline Support1031414
-Node: Limitations1032358
-Node: Debugging Summary1034982
-Node: Namespaces1036281
-Node: Global Namespace1037408
-Node: Qualified Names1038842
-Node: Default Namespace1039877
-Node: Changing The Namespace1040650
-Node: Naming Rules1042332
-Node: Internal Name Management1044287
-Node: Namespace Example1045357
-Node: Namespace And Features1047934
-Node: Namespace Summary1049389
-Node: Arbitrary Precision Arithmetic1050900
-Node: Computer Arithmetic1052419
-Ref: table-numeric-ranges1056344
-Ref: table-floating-point-ranges1056841
-Ref: Computer Arithmetic-Footnote-11057499
-Node: Math Definitions1057556
-Ref: table-ieee-formats1060588
-Node: MPFR features1061161
-Node: MPFR On Parole1061614
-Ref: MPFR On Parole-Footnote-11062455
-Node: MPFR Intro1062614
-Node: FP Math Caution1064298
-Ref: FP Math Caution-Footnote-11065370
-Node: Inexactness of computations1065743
-Node: Inexact representation1066774
-Node: Comparing FP Values1068155
-Node: Errors accumulate1069413
-Node: Strange values1070878
-Ref: Strange values-Footnote-11073532
-Node: Getting Accuracy1073637
-Node: Try To Round1076374
-Node: Setting precision1077281
-Ref: table-predefined-precision-strings1077986
-Node: Setting the rounding mode1079870
-Ref: table-gawk-rounding-modes1080252
-Ref: Setting the rounding mode-Footnote-11084304
-Node: Arbitrary Precision Integers1084489
-Ref: Arbitrary Precision Integers-Footnote-11087699
-Node: Checking for MPFR1087852
-Node: POSIX Floating Point Problems1089342
-Ref: POSIX Floating Point Problems-Footnote-11094162
-Node: Floating point summary1094200
-Node: Dynamic Extensions1096456
-Node: Extension Intro1098053
-Node: Plugin License1099355
-Node: Extension Mechanism Outline1100168
-Ref: figure-load-extension1100619
-Ref: figure-register-new-function1102197
-Ref: figure-call-new-function1103306
-Node: Extension API Description1105421
-Node: Extension API Functions Introduction1107150
-Ref: table-api-std-headers1109044
-Node: General Data Types1113485
-Ref: General Data Types-Footnote-11122631
-Node: Memory Allocation Functions1122934
-Ref: Memory Allocation Functions-Footnote-11127651
-Node: Constructor Functions1127750
-Node: API Ownership of MPFR and GMP Values1131651
-Node: Registration Functions1133204
-Node: Extension Functions1133908
-Node: Exit Callback Functions1139482
-Node: Extension Version String1140796
-Node: Input Parsers1141491
-Node: Output Wrappers1156110
-Node: Two-way processors1160952
-Node: Printing Messages1163305
-Ref: Printing Messages-Footnote-11164516
-Node: Updating ERRNO1164669
-Node: Requesting Values1165468
-Ref: table-value-types-returned1166221
-Node: Accessing Parameters1168280
-Node: Symbol Table Access1169561
-Node: Symbol table by name1170073
-Ref: Symbol table by name-Footnote-11173274
-Node: Symbol table by cookie1173406
-Ref: Symbol table by cookie-Footnote-11177675
-Node: Cached values1177739
-Ref: Cached values-Footnote-11181371
-Node: Array Manipulation1181528
-Ref: Array Manipulation-Footnote-11182627
-Node: Array Data Types1182664
-Ref: Array Data Types-Footnote-11185482
-Node: Array Functions1185578
-Node: Flattening Arrays1190607
-Node: Creating Arrays1197655
-Node: Redirection API1202497
-Node: Extension API Variables1205514
-Node: Extension Versioning1206237
-Ref: gawk-api-version1206666
-Node: Extension GMP/MPFR Versioning1208453
-Node: Extension API Informational Variables1210157
-Node: Extension API Boilerplate1211410
-Node: Changes from API V11215540
-Node: Finding Extensions1217172
-Node: Extension Example1217747
-Node: Internal File Description1218569
-Node: Internal File Ops1222861
-Ref: Internal File Ops-Footnote-11234411
-Node: Using Internal File Ops1234559
-Ref: Using Internal File Ops-Footnote-11236992
-Node: Extension Samples1237270
-Node: Extension Sample File Functions1238839
-Node: Extension Sample Fnmatch1246964
-Node: Extension Sample Fork1248559
-Node: Extension Sample Inplace1249835
-Node: Extension Sample Ord1253937
-Node: Extension Sample Readdir1254813
-Ref: table-readdir-file-types1255602
-Node: Extension Sample Revout1256958
-Node: Extension Sample Rev2way1257555
-Node: Extension Sample Read write array1258307
-Node: Extension Sample Readfile1261581
-Node: Extension Sample Time1262712
-Node: Extension Sample API Tests1264712
-Node: gawkextlib1265220
-Node: Extension summary1268252
-Node: Extension Exercises1272100
-Node: Language History1273370
-Node: V7/SVR3.11275082
-Node: SVR41277432
-Node: POSIX1278964
-Node: BTL1280389
-Node: POSIX/GNU1281156
-Ref: Gawk Extension Functions1284546
-Node: Feature History1287970
-Node: Common Extensions1307811
-Node: Ranges and Locales1309286
-Ref: Ranges and Locales-Footnote-11314071
-Ref: Ranges and Locales-Footnote-21314098
-Ref: Ranges and Locales-Footnote-31314333
-Node: Contributors1314556
-Node: History summary1320833
-Node: Installation1322275
-Node: Gawk Distribution1323239
-Node: Getting1323731
-Node: Extracting1324730
-Node: Distribution contents1326436
-Node: Unix Installation1334326
-Node: Quick Installation1335146
-Node: Compiling with MPFR1337686
-Node: Shell Startup Files1338392
-Node: Additional Configuration Options1339549
-Node: Configuration Philosophy1341932
-Node: Compiling from Git1344432
-Node: Building the Documentation1344991
-Node: Non-Unix Installation1346403
-Node: PC Installation1346879
-Node: PC Binary Installation1347748
-Node: PC Compiling1348641
-Node: PC Using1349819
-Node: Cygwin1353535
-Node: MSYS1354787
-Node: OpenVMS Installation1355413
-Node: OpenVMS Compilation1356094
-Ref: OpenVMS Compilation-Footnote-11357577
-Node: OpenVMS Dynamic Extensions1357635
-Node: OpenVMS Installation Details1359271
-Node: OpenVMS Running1361702
-Node: OpenVMS GNV1365839
-Node: Bugs1366594
-Node: Bug definition1367514
-Node: Bug address1371115
-Node: Usenet1374684
-Node: Performance bugs1375897
-Node: Asking for help1378901
-Node: Maintainers1380888
-Node: Other Versions1381915
-Node: Installation summary1391904
-Node: Notes1393286
-Node: Compatibility Mode1394096
-Node: Additions1394918
-Node: Accessing The Source1395863
-Node: Adding Code1397394
-Node: New Ports1404505
-Node: Derived Files1409008
-Ref: Derived Files-Footnote-11414819
-Ref: Derived Files-Footnote-21414854
-Ref: Derived Files-Footnote-31415465
-Node: Future Extensions1415579
-Node: Implementation Limitations1416249
-Node: Extension Design1417491
-Node: Old Extension Problems1418651
-Ref: Old Extension Problems-Footnote-11420223
-Node: Extension New Mechanism Goals1420284
-Ref: Extension New Mechanism Goals-Footnote-11423754
-Node: Extension Other Design Decisions1423955
-Node: Extension Future Growth1426152
-Node: Notes summary1426772
-Node: Basic Concepts1427982
-Node: Basic High Level1428667
-Ref: figure-general-flow1428949
-Ref: figure-process-flow1429651
-Ref: Basic High Level-Footnote-11433021
-Node: Basic Data Typing1433210
-Node: Glossary1436618
-Node: Copying1469496
-Node: GNU Free Documentation License1507054
-Node: Index1532177
++Node: Foreword347051
++Node: Foreword451625
++Node: Preface53169
++Ref: Preface-Footnote-156155
++Ref: Preface-Footnote-256264
++Ref: Preface-Footnote-356498
++Node: History56644
++Node: Names59258
++Ref: Names-Footnote-160412
++Node: This Manual60575
++Ref: This Manual-Footnote-167505
++Node: Conventions67613
++Node: Manual History70042
++Ref: Manual History-Footnote-173067
++Ref: Manual History-Footnote-273108
++Node: How To Contribute73182
++Node: Acknowledgments74128
++Node: Getting Started79117
++Node: Running gawk81644
++Node: One-shot82862
++Node: Read Terminal84161
++Node: Long86215
++Node: Executable Scripts87865
++Ref: Executable Scripts-Footnote-190635
++Node: Comments90742
++Node: Quoting93272
++Node: DOS Quoting98916
++Node: Sample Data Files100996
++Node: Very Simple103631
++Node: Two Rules109885
++Node: More Complex111837
++Node: Statements/Lines114257
++Ref: Statements/Lines-Footnote-1119769
++Node: Other Features120058
++Node: When121026
++Ref: When-Footnote-1122828
++Node: Intro Summary122893
++Node: Invoking Gawk123847
++Node: Command Line125409
++Node: Options126259
++Ref: Options-Footnote-1145601
++Ref: Options-Footnote-2145836
++Node: Other Arguments145861
++Node: Naming Standard Input150026
++Node: Environment Variables151296
++Node: AWKPATH Variable151870
++Ref: AWKPATH Variable-Footnote-1155454
++Ref: AWKPATH Variable-Footnote-2155488
++Node: AWKLIBPATH Variable155879
++Ref: AWKLIBPATH Variable-Footnote-1157654
++Node: Other Environment Variables158049
++Node: Exit Status162525
++Node: Include Files163238
++Node: Loading Shared Libraries167298
++Node: Obsolete168790
++Node: Undocumented169538
++Node: Invoking Summary169835
++Node: Regexp172860
++Node: Regexp Usage174354
++Node: Escape Sequences176455
++Ref: Escape Sequences-Footnote-1183990
++Node: Regexp Operators184068
++Node: Regexp Operator Details184561
++Ref: Regexp Operator Details-Footnote-1192572
++Node: Interval Expressions192731
++Ref: Interval Expressions-Footnote-1194998
++Node: Bracket Expressions195096
++Ref: table-char-classes197652
++Node: Leftmost Longest201150
++Node: Computed Regexps202506
++Node: GNU Regexp Operators206021
++Node: Case-sensitivity211118
++Ref: Case-sensitivity-Footnote-1214068
++Ref: Case-sensitivity-Footnote-2214311
++Node: Regexp Summary214423
++Node: Reading Files215945
++Node: Records218264
++Node: awk split records219539
++Node: gawk split records224421
++Ref: gawk split records-Footnote-1229709
++Node: Fields229746
++Ref: Fields-Footnote-1232662
++Node: Nonconstant Fields232782
++Ref: Nonconstant Fields-Footnote-1235090
++Node: Changing Fields235306
++Node: Field Separators241604
++Node: Default Field Splitting244473
++Node: Regexp Field Splitting245615
++Node: Single Character Fields249444
++Node: Comma Separated Fields250533
++Ref: table-csv-examples251937
++Node: Command Line Field Separator254236
++Node: Full Line Fields257612
++Ref: Full Line Fields-Footnote-1259190
++Ref: Full Line Fields-Footnote-2259236
++Node: Field Splitting Summary259341
++Node: Constant Size261658
++Node: Fixed width data262402
++Node: Skipping intervening265917
++Node: Allowing trailing data266719
++Node: Fields with fixed data267780
++Node: Splitting By Content269402
++Ref: Splitting By Content-Footnote-1274896
++Node: FS versus FPAT275059
++Node: Testing field creation276242
++Node: Multiple Line278016
++Node: Getline284485
++Node: Plain Getline287073
++Node: Getline/Variable289721
++Node: Getline/File290917
++Node: Getline/Variable/File292365
++Ref: Getline/Variable/File-Footnote-1294010
++Node: Getline/Pipe294106
++Node: Getline/Variable/Pipe296914
++Node: Getline/Coprocess298097
++Node: Getline/Variable/Coprocess299420
++Node: Getline Notes300186
++Node: Getline Summary304163
++Ref: table-getline-variants304607
++Node: Read Timeout305511
++Ref: Read Timeout-Footnote-1309473
++Node: Retrying Input309531
++Node: Command-line directories310798
++Node: Input Summary311736
++Node: Input Exercises315116
++Node: Printing315554
++Node: Print317497
++Node: Print Examples318998
++Node: Output Separators321843
++Node: OFMT323950
++Node: Printf325663
++Node: Basic Printf326468
++Node: Control Letters328103
++Node: Format Modifiers333549
++Node: Printf Examples339821
++Node: Redirection342362
++Node: Special FD350134
++Ref: Special FD-Footnote-1353432
++Node: Special Files353510
++Node: Other Inherited Files354139
++Node: Special Network355204
++Node: Special Caveats356092
++Node: Close Files And Pipes357075
++Ref: Close Files And Pipes-Footnote-1363199
++Node: Close Return Value363347
++Ref: table-close-pipe-return-values364618
++Ref: Close Return Value-Footnote-1365449
++Node: Noflush365605
++Node: Nonfatal367113
++Node: Output Summary369528
++Node: Output Exercises370814
++Node: Expressions371505
++Node: Values372705
++Node: Constants373383
++Node: Scalar Constants374078
++Ref: Scalar Constants-Footnote-1376654
++Ref: Scalar Constants-Footnote-2376904
++Node: Nondecimal-numbers376984
++Node: Regexp Constants380097
++Node: Using Constant Regexps380643
++Node: Standard Regexp Constants381289
++Node: Strong Regexp Constants384585
++Node: Variables388428
++Node: Using Variables389093
++Node: Assignment Options391067
++Node: Conversion393618
++Node: Strings And Numbers394150
++Ref: Strings And Numbers-Footnote-1397360
++Node: Locale influences conversions397469
++Ref: table-locale-affects400307
++Node: All Operators400949
++Node: Arithmetic Ops401590
++Node: Concatenation404413
++Ref: Concatenation-Footnote-1407349
++Node: Assignment Ops407468
++Ref: table-assign-ops412595
++Node: Increment Ops413976
++Node: Truth Values and Conditions417567
++Node: Truth Values418661
++Node: Typing and Comparison419741
++Node: Variable Typing420573
++Ref: Variable Typing-Footnote-1427217
++Ref: Variable Typing-Footnote-2427297
++Node: Comparison Operators427378
++Ref: table-relational-ops427805
++Node: POSIX String Comparison431481
++Ref: POSIX String Comparison-Footnote-1433238
++Ref: POSIX String Comparison-Footnote-2433381
++Node: Boolean Ops433465
++Ref: Boolean Ops-Footnote-1438139
++Node: Conditional Exp438235
++Node: Function Calls440015
++Node: Precedence443962
++Node: Locales447825
++Node: Expressions Summary449501
++Node: Patterns and Actions452156
++Node: Pattern Overview453292
++Node: Regexp Patterns455017
++Node: Expression Patterns455563
++Node: Ranges459468
++Node: BEGIN/END462642
++Node: Using BEGIN/END463451
++Ref: Using BEGIN/END-Footnote-1466359
++Node: I/O And BEGIN/END466469
++Node: BEGINFILE/ENDFILE468951
++Node: Empty472381
++Node: Using Shell Variables472698
++Node: Action Overview475034
++Node: Statements477470
++Node: If Statement479366
++Node: While Statement480929
++Node: Do Statement483017
++Node: For Statement484201
++Node: Switch Statement487556
++Node: Break Statement490105
++Node: Continue Statement492297
++Node: Next Statement494228
++Node: Nextfile Statement496707
++Node: Exit Statement499560
++Node: Built-in Variables502087
++Node: User-modified503264
++Node: Auto-set511471
++Ref: Auto-set-Footnote-1529555
++Ref: Auto-set-Footnote-2529773
++Node: ARGC and ARGV529829
++Node: Pattern Action Summary534258
++Node: Arrays536864
++Node: Array Basics538237
++Node: Array Intro539085
++Ref: figure-array-elements541096
++Ref: Array Intro-Footnote-1543949
++Node: Reference to Elements544081
++Node: Assigning Elements546601
++Node: Array Example547096
++Node: Scanning an Array549058
++Node: Controlling Scanning552153
++Ref: Controlling Scanning-Footnote-1558788
++Node: Numeric Array Subscripts559112
++Node: Uninitialized Subscripts561380
++Node: Delete563053
++Ref: Delete-Footnote-1565865
++Node: Multidimensional565922
++Node: Multiscanning569125
++Node: Arrays of Arrays570792
++Node: Arrays Summary575096
++Node: Functions577283
++Node: Built-in578485
++Node: Calling Built-in579674
++Node: Boolean Functions581714
++Node: Numeric Functions582276
++Ref: Numeric Functions-Footnote-1586461
++Ref: Numeric Functions-Footnote-2587144
++Ref: Numeric Functions-Footnote-3587196
++Node: String Functions587472
++Ref: String Functions-Footnote-1613923
++Ref: String Functions-Footnote-2614055
++Ref: String Functions-Footnote-3614311
++Node: Gory Details614398
++Ref: table-sub-escapes616407
++Ref: table-sub-proposed618038
++Ref: table-posix-sub619533
++Ref: table-gensub-escapes621206
++Ref: Gory Details-Footnote-1622125
++Node: I/O Functions622279
++Ref: table-system-return-values628955
++Ref: I/O Functions-Footnote-1631117
++Ref: I/O Functions-Footnote-2631265
++Node: Time Functions631385
++Ref: Time Functions-Footnote-1643097
++Ref: Time Functions-Footnote-2643165
++Ref: Time Functions-Footnote-3643327
++Ref: Time Functions-Footnote-4643438
++Ref: Time Functions-Footnote-5643554
++Ref: Time Functions-Footnote-6643781
++Node: Bitwise Functions644059
++Ref: table-bitwise-ops644657
++Ref: Bitwise Functions-Footnote-1650899
++Ref: Bitwise Functions-Footnote-2651076
++Node: Type Functions651271
++Node: I18N Functions653442
++Node: User-defined655177
++Node: Definition Syntax655923
++Ref: Definition Syntax-Footnote-1661778
++Node: Function Example661853
++Ref: Function Example-Footnote-1664832
++Node: Function Calling664854
++Node: Calling A Function665446
++Node: Variable Scope666416
++Node: Pass By Value/Reference669470
++Node: Function Caveats672198
++Ref: Function Caveats-Footnote-1674289
++Node: Return Statement674409
++Node: Dynamic Typing677441
++Node: Dynamic Typing Awk678023
++Node: Dynamic Typing Gawk680161
++Node: Shadowed Variables683531
++Node: Indirect Calls685879
++Node: Functions Summary697020
++Node: Library Functions699986
++Ref: Library Functions-Footnote-1703534
++Ref: Library Functions-Footnote-2703679
++Node: Library Names703854
++Ref: Library Names-Footnote-1707625
++Ref: Library Names-Footnote-2707852
++Node: General Functions707946
++Node: Strtonum Function709216
++Node: Assert Function712298
++Node: Round Function715748
++Node: Cliff Random Function717320
++Node: Ordinal Functions718344
++Ref: Ordinal Functions-Footnote-1721447
++Ref: Ordinal Functions-Footnote-2721699
++Node: Join Function721913
++Ref: Join Function-Footnote-1723711
++Node: Getlocaltime Function723915
++Node: Readfile Function727689
++Node: Shell Quoting729718
++Node: Isnumeric Function731174
++Node: To CSV Function732610
++Node: Data File Management734702
++Node: Filetrans Function735334
++Node: Rewind Function739610
++Node: File Checking741581
++Ref: File Checking-Footnote-1742947
++Node: Empty Files743152
++Node: Ignoring Assigns745215
++Node: Getopt Function746789
++Ref: Getopt Function-Footnote-1762607
++Node: Passwd Functions762819
++Ref: Passwd Functions-Footnote-1771954
++Node: Group Functions772042
++Ref: Group Functions-Footnote-1780166
++Node: Walking Arrays780377
++Node: Library Functions Summary783423
++Node: Library Exercises784843
++Node: Sample Programs785328
++Node: Running Examples786110
++Node: Clones786862
++Node: Cut Program788130
++Node: Egrep Program798554
++Node: Id Program807853
++Node: Split Program817945
++Ref: Split Program-Footnote-1828158
++Node: Tee Program828343
++Node: Uniq Program831249
++Node: Wc Program839109
++Node: Bytes vs. Characters839504
++Node: Using extensions841104
++Node: wc program841882
++Node: Miscellaneous Programs846875
++Node: Dupword Program848100
++Node: Alarm Program850149
++Node: Translate Program855052
++Ref: Translate Program-Footnote-1859761
++Node: Labels Program860039
++Ref: Labels Program-Footnote-1863474
++Node: Word Sorting863558
++Node: History Sorting867732
++Node: Extract Program870005
++Node: Simple Sed878258
++Node: Igawk Program881468
++Ref: Igawk Program-Footnote-1896678
++Ref: Igawk Program-Footnote-2896884
++Ref: Igawk Program-Footnote-3897014
++Node: Anagram Program897141
++Node: Signature Program900227
++Node: Programs Summary901477
++Node: Programs Exercises902731
++Ref: Programs Exercises-Footnote-1907560
++Node: Advanced Features907646
++Node: Nondecimal Data910127
++Node: Boolean Typed Values911757
++Node: Array Sorting913714
++Node: Controlling Array Traversal914443
++Ref: Controlling Array Traversal-Footnote-1922946
++Node: Array Sorting Functions923068
++Ref: Array Sorting Functions-Footnote-1929165
++Node: Two-way I/O929373
++Ref: Two-way I/O-Footnote-1937344
++Ref: Two-way I/O-Footnote-2937535
++Node: TCP/IP Networking937617
++Node: Profiling940785
++Node: Persistent Memory950455
++Ref: Persistent Memory-Footnote-1960027
++Node: Extension Philosophy960158
++Node: Advanced Features Summary961685
++Node: Internationalization963951
++Node: I18N and L10N965653
++Node: Explaining gettext966348
++Ref: Explaining gettext-Footnote-1972484
++Ref: Explaining gettext-Footnote-2972677
++Node: Programmer i18n972842
++Ref: Programmer i18n-Footnote-1977954
++Node: Translator i18n978003
++Node: String Extraction978833
++Ref: String Extraction-Footnote-1980009
++Node: Printf Ordering980107
++Ref: Printf Ordering-Footnote-1982965
++Node: I18N Portability983033
++Ref: I18N Portability-Footnote-1985593
++Node: I18N Example985660
++Ref: I18N Example-Footnote-1989054
++Ref: I18N Example-Footnote-2989127
++Node: Gawk I18N989244
++Node: I18N Summary989898
++Node: Debugger991295
++Node: Debugging992315
++Node: Debugging Concepts992764
++Node: Debugging Terms994581
++Node: Awk Debugging997184
++Ref: Awk Debugging-Footnote-1998157
++Node: Sample Debugging Session998293
++Node: Debugger Invocation998843
++Node: Finding The Bug1000468
++Node: List of Debugger Commands1007100
++Node: Breakpoint Control1008477
++Node: Debugger Execution Control1012299
++Node: Viewing And Changing Data1015773
++Node: Execution Stack1019507
++Node: Debugger Info1021188
++Node: Miscellaneous Debugger Commands1025483
++Node: Readline Support1030724
++Node: Limitations1031668
++Node: Debugging Summary1034292
++Node: Namespaces1035591
++Node: Global Namespace1036718
++Node: Qualified Names1038152
++Node: Default Namespace1039187
++Node: Changing The Namespace1039960
++Node: Naming Rules1041642
++Node: Internal Name Management1043597
++Node: Namespace Example1044667
++Node: Namespace And Features1047244
++Node: Namespace Summary1048699
++Node: Arbitrary Precision Arithmetic1050210
++Node: Computer Arithmetic1051729
++Ref: table-numeric-ranges1055654
++Ref: table-floating-point-ranges1056151
++Ref: Computer Arithmetic-Footnote-11056809
++Node: Math Definitions1056866
++Ref: table-ieee-formats1059898
++Node: MPFR features1060471
++Node: MPFR On Parole1060924
++Ref: MPFR On Parole-Footnote-11061765
++Node: MPFR Intro1061924
++Node: FP Math Caution1063608
++Ref: FP Math Caution-Footnote-11064680
++Node: Inexactness of computations1065053
++Node: Inexact representation1066084
++Node: Comparing FP Values1067465
++Node: Errors accumulate1068723
++Node: Strange values1070188
++Ref: Strange values-Footnote-11072842
++Node: Getting Accuracy1072947
++Node: Try To Round1075684
++Node: Setting precision1076591
++Ref: table-predefined-precision-strings1077296
++Node: Setting the rounding mode1079180
++Ref: table-gawk-rounding-modes1079562
++Ref: Setting the rounding mode-Footnote-11083614
++Node: Arbitrary Precision Integers1083799
++Ref: Arbitrary Precision Integers-Footnote-11087009
++Node: Checking for MPFR1087162
++Node: POSIX Floating Point Problems1088652
++Ref: POSIX Floating Point Problems-Footnote-11093472
++Node: Floating point summary1093510
++Node: Dynamic Extensions1095766
++Node: Extension Intro1097363
++Node: Plugin License1098665
++Node: Extension Mechanism Outline1099478
++Ref: figure-load-extension1099929
++Ref: figure-register-new-function1101507
++Ref: figure-call-new-function1102616
++Node: Extension API Description1104731
++Node: Extension API Functions Introduction1106460
++Ref: table-api-std-headers1108354
++Node: General Data Types1112795
++Ref: General Data Types-Footnote-11121941
++Node: Memory Allocation Functions1122244
++Ref: Memory Allocation Functions-Footnote-11126961
++Node: Constructor Functions1127060
++Node: API Ownership of MPFR and GMP Values1130961
++Node: Registration Functions1132514
++Node: Extension Functions1133218
++Node: Exit Callback Functions1138792
++Node: Extension Version String1140106
++Node: Input Parsers1140801
++Node: Output Wrappers1155420
++Node: Two-way processors1160262
++Node: Printing Messages1162615
++Ref: Printing Messages-Footnote-11163826
++Node: Updating ERRNO1163979
++Node: Requesting Values1164778
++Ref: table-value-types-returned1165531
++Node: Accessing Parameters1167590
++Node: Symbol Table Access1168871
++Node: Symbol table by name1169383
++Ref: Symbol table by name-Footnote-11172584
++Node: Symbol table by cookie1172716
++Ref: Symbol table by cookie-Footnote-11176985
++Node: Cached values1177049
++Ref: Cached values-Footnote-11180681
++Node: Array Manipulation1180838
++Ref: Array Manipulation-Footnote-11181937
++Node: Array Data Types1181974
++Ref: Array Data Types-Footnote-11184792
++Node: Array Functions1184888
++Node: Flattening Arrays1189917
++Node: Creating Arrays1196965
++Node: Redirection API1201807
++Node: Extension API Variables1204824
++Node: Extension Versioning1205547
++Ref: gawk-api-version1205976
++Node: Extension GMP/MPFR Versioning1207763
++Node: Extension API Informational Variables1209467
++Node: Extension API Boilerplate1210720
++Node: Changes from API V11214850
++Node: Finding Extensions1216482
++Node: Extension Example1217057
++Node: Internal File Description1217879
++Node: Internal File Ops1222171
++Ref: Internal File Ops-Footnote-11233721
++Node: Using Internal File Ops1233869
++Ref: Using Internal File Ops-Footnote-11236302
++Node: Extension Samples1236580
++Node: Extension Sample File Functions1238149
++Node: Extension Sample Fnmatch1246274
++Node: Extension Sample Fork1247869
++Node: Extension Sample Inplace1249145
++Node: Extension Sample Ord1253247
++Node: Extension Sample Readdir1254123
++Ref: table-readdir-file-types1254912
++Node: Extension Sample Revout1256268
++Node: Extension Sample Rev2way1256865
++Node: Extension Sample Read write array1257617
++Node: Extension Sample Readfile1260891
++Node: Extension Sample Time1262022
++Node: Extension Sample API Tests1264022
++Node: gawkextlib1264530
++Node: Extension summary1267562
++Node: Extension Exercises1271410
++Node: Language History1272680
++Node: V7/SVR3.11274392
++Node: SVR41276742
++Node: POSIX1278274
++Node: BTL1279699
++Node: POSIX/GNU1280466
++Ref: Gawk Extension Functions1283856
++Node: Feature History1287280
++Node: Common Extensions1307121
++Node: Ranges and Locales1308596
++Ref: Ranges and Locales-Footnote-11313381
++Ref: Ranges and Locales-Footnote-21313408
++Ref: Ranges and Locales-Footnote-31313643
++Node: Contributors1313866
++Node: History summary1320143
++Node: Installation1321585
++Node: Gawk Distribution1322549
++Node: Getting1323041
++Node: Extracting1324040
++Node: Distribution contents1325746
++Node: Unix Installation1333636
++Node: Quick Installation1334456
++Node: Compiling with MPFR1336996
++Node: Shell Startup Files1337702
++Node: Additional Configuration Options1338859
++Node: Configuration Philosophy1341242
++Node: Compiling from Git1343742
++Node: Building the Documentation1344301
++Node: Non-Unix Installation1345713
++Node: PC Installation1346189
++Node: PC Binary Installation1347058
++Node: PC Compiling1347951
++Node: PC Using1349129
++Node: Cygwin1352845
++Node: MSYS1354097
++Node: OpenVMS Installation1354723
++Node: OpenVMS Compilation1355404
++Ref: OpenVMS Compilation-Footnote-11356887
++Node: OpenVMS Dynamic Extensions1356945
++Node: OpenVMS Installation Details1358581
++Node: OpenVMS Running1361012
++Node: OpenVMS GNV1365149
++Node: Bugs1365904
++Node: Bug definition1366824
++Node: Bug address1370425
++Node: Usenet1373994
++Node: Performance bugs1375207
++Node: Asking for help1378211
++Node: Maintainers1380198
++Node: Other Versions1381225
++Node: Installation summary1391214
++Node: Notes1392596
++Node: Compatibility Mode1393406
++Node: Additions1394228
++Node: Accessing The Source1395173
++Node: Adding Code1396704
++Node: New Ports1403815
++Node: Derived Files1408318
++Ref: Derived Files-Footnote-11414129
++Ref: Derived Files-Footnote-21414164
++Ref: Derived Files-Footnote-31414775
++Node: Future Extensions1414889
++Node: Implementation Limitations1415559
++Node: Extension Design1416801
++Node: Old Extension Problems1417961
++Ref: Old Extension Problems-Footnote-11419533
++Node: Extension New Mechanism Goals1419594
++Ref: Extension New Mechanism Goals-Footnote-11423064
++Node: Extension Other Design Decisions1423265
++Node: Extension Future Growth1425462
++Node: Notes summary1426082
++Node: Basic Concepts1427292
++Node: Basic High Level1427977
++Ref: figure-general-flow1428259
++Ref: figure-process-flow1428961
++Ref: Basic High Level-Footnote-11432331
++Node: Basic Data Typing1432520
++Node: Glossary1435928
++Node: Copying1468806
++Node: GNU Free Documentation License1506364
++Node: Index1531487
End Tag Table
http://git.sv.gnu.org/cgit/gawk.git/commit/?id=20728b62a4b4ec2d152c2f93d38b4ac07512ed20
commit 20728b62a4b4ec2d152c2f93d38b4ac07512ed20
Merge: c090bd9e a228c487
Author: Arnold D. Robbins <arnold@skeeve.com>
Date: Sat Oct 5 20:53:37 2024 +0300
Merge branch 'gawk-5.3-stable' into stable/fpat-doc
diff --cc doc/ChangeLog
index efd74700,482cb3a4..0ff49120
--- a/doc/ChangeLog
+++ b/doc/ChangeLog
@@@ -1,13 -1,9 +1,19 @@@
+ 2024-10-05 Arnold D. Robbins <arnold@skeeve.com>
+
+ * gawk.texi: Move @cindex lines to be before @enumerate /
+ @itemize. Otherwise there are empty lines in the HTML.
+ Thanks to Thérèse Godefroy <godef.th@free.fr> for the report.
+
+2024-10-02 Arnold D. Robbins <arnold@skeeve.com>
+
+ * gawk.texi (Splitting By Content): Some adjustments
+ to quoted-csv.awk.
+
+2024-09-20 Stuart Ferguson <stuart.fergs@gmail.com>
+
+ * gawk.texi (Splitting By Content): Reworked some more.
+ (More CSV): Removed.
+
2024-09-17 Arnold D. Robbins <arnold@skeeve.com>
* 5.3.1: Release tar made.
http://git.sv.gnu.org/cgit/gawk.git/commit/?id=c090bd9e5ad82ffc762d261586d0e783ca5278b6
commit c090bd9e5ad82ffc762d261586d0e783ca5278b6
Author: Arnold D. Robbins <arnold@skeeve.com>
Date: Wed Oct 2 08:57:50 2024 +0300
Small adjustments to FPAT CSV doc.
diff --git a/awklib/eg/misc/quoted-csv.awk b/awklib/eg/misc/quoted-csv.awk
index 13b0ea32..f0002b34 100644
--- a/awklib/eg/misc/quoted-csv.awk
+++ b/awklib/eg/misc/quoted-csv.awk
@@ -1,5 +1,6 @@
BEGIN {
FPAT = "([^,]*)|(\"([^\"]|\"\")+\")"
+ OFS = "\t" # Print tab-separated values
}
{
@@ -9,7 +10,7 @@ BEGIN {
gsub(/^"|"$/, "", $i) # Remove enclosing quotes
gsub(/""/, "\"", $i) # Convert "" to "
}
- # Print tab-separated values
- printf (i < NF) ? "%s\t" : "%s\n", $i
}
+ $1 = $1 # force rebuild of the record
+ print
}
diff --git a/doc/ChangeLog b/doc/ChangeLog
index 42cd6c74..efd74700 100644
--- a/doc/ChangeLog
+++ b/doc/ChangeLog
@@ -1,3 +1,8 @@
+2024-10-02 Arnold D. Robbins <arnold@skeeve.com>
+
+ * gawk.texi (Splitting By Content): Some adjustments
+ to quoted-csv.awk.
+
2024-09-20 Stuart Ferguson <stuart.fergs@gmail.com>
* gawk.texi (Splitting By Content): Reworked some more.
diff --git a/doc/gawk.info b/doc/gawk.info
index 2aea985f..4c60f4be 100644
--- a/doc/gawk.info
+++ b/doc/gawk.info
@@ -5882,10 +5882,11 @@ recognizes this kind of CSV field is
â/([^,]*)|("([^"]|"")+")/â.
The following program uses this improved âFPATâ expression to split
the example CSV fields above, extracts the underlying data from any
double-quoted fields, and finally prints the data as tab-separated
-values.
+values. The latter is accomplished by setting âOFSâ to a TAB character.
BEGIN {
FPAT = "([^,]*)|(\"([^\"]|\"\")+\")"
+ OFS = "\t" # Print tab-separated values
}
{
@@ -5895,9 +5896,9 @@ values.
gsub(/^"|"$/, "", $i) # Remove enclosing quotes
gsub(/""/, "\"", $i) # Convert "" to "
}
- # Print tab-separated values
- printf (i < NF) ? "%s\t" : "%s\n", $i
}
+ $1 = $1 # force rebuild of the record
+ print
}
When run, it produces:
@@ -37083,7 +37084,7 @@ Index
* Collado, Manuel <1>: Splitting By Content.
(line 92)
* Collado, Manuel <2>: Splitting By Content.
- (line 132)
+ (line 133)
* collating elements: Bracket Expressions. (line 90)
* collating symbols: Bracket Expressions. (line 97)
* Colombo, Antonio: Acknowledgments. (line 60)
@@ -37100,7 +37101,7 @@ Index
* Comma separated values (CSV) data, parsing with FPAT: Splitting By Content.
(line 23)
* Comma separated values (CSV) data, parsing with FPAT library: Splitting By
Content.
- (line 132)
+ (line 133)
* comma separated values (CSV) data, records and fields: Comma Separated
Fields.
(line 6)
* command completion, in debugger: Readline Support. (line 6)
@@ -37225,13 +37226,13 @@ Index
* CSV (comma separated values) data, generating CSV data: To CSV Function.
(line 6)
* CSV (comma separated values) data, parsing with CSVMODE library: Splitting
By Content.
- (line 132)
+ (line 133)
* CSV (comma separated values) data, parsing with FPAT: Splitting By Content.
(line 23)
* CSV (comma separated values) data, records and fields: Comma Separated
Fields.
(line 6)
* CSVMODE library for gawk: Splitting By Content.
- (line 132)
+ (line 133)
* ctime() user-defined function: Function Example. (line 74)
* Curreli, Marco: Contributors. (line 147)
* currency symbols, localization: Explaining gettext. (line 104)
@@ -40032,525 +40033,525 @@ Node: Skipping intervening265839
Node: Allowing trailing data266641
Node: Fields with fixed data267702
Node: Splitting By Content269324
-Ref: Splitting By Content-Footnote-1274728
-Node: FS versus FPAT274891
-Node: Testing field creation276074
-Node: Multiple Line277848
-Node: Getline284317
-Node: Plain Getline286905
-Node: Getline/Variable289553
-Node: Getline/File290749
-Node: Getline/Variable/File292197
-Ref: Getline/Variable/File-Footnote-1293842
-Node: Getline/Pipe293938
-Node: Getline/Variable/Pipe296746
-Node: Getline/Coprocess297929
-Node: Getline/Variable/Coprocess299252
-Node: Getline Notes300018
-Node: Getline Summary303995
-Ref: table-getline-variants304439
-Node: Read Timeout305343
-Ref: Read Timeout-Footnote-1309305
-Node: Retrying Input309363
-Node: Command-line directories310630
-Node: Input Summary311568
-Node: Input Exercises314948
-Node: Printing315386
-Node: Print317329
-Node: Print Examples318830
-Node: Output Separators321675
-Node: OFMT323782
-Node: Printf325495
-Node: Basic Printf326300
-Node: Control Letters327935
-Node: Format Modifiers333381
-Node: Printf Examples339653
-Node: Redirection342194
-Node: Special FD349966
-Ref: Special FD-Footnote-1353264
-Node: Special Files353342
-Node: Other Inherited Files353971
-Node: Special Network355036
-Node: Special Caveats355924
-Node: Close Files And Pipes356907
-Ref: Close Files And Pipes-Footnote-1363031
-Node: Close Return Value363179
-Ref: table-close-pipe-return-values364450
-Ref: Close Return Value-Footnote-1365281
-Node: Noflush365437
-Node: Nonfatal366945
-Node: Output Summary369360
-Node: Output Exercises370646
-Node: Expressions371337
-Node: Values372537
-Node: Constants373215
-Node: Scalar Constants373910
-Ref: Scalar Constants-Footnote-1376486
-Ref: Scalar Constants-Footnote-2376736
-Node: Nondecimal-numbers376816
-Node: Regexp Constants379929
-Node: Using Constant Regexps380475
-Node: Standard Regexp Constants381121
-Node: Strong Regexp Constants384417
-Node: Variables388260
-Node: Using Variables388925
-Node: Assignment Options390899
-Node: Conversion393450
-Node: Strings And Numbers393982
-Ref: Strings And Numbers-Footnote-1397192
-Node: Locale influences conversions397301
-Ref: table-locale-affects400139
-Node: All Operators400781
-Node: Arithmetic Ops401422
-Node: Concatenation404245
-Ref: Concatenation-Footnote-1407181
-Node: Assignment Ops407300
-Ref: table-assign-ops412427
-Node: Increment Ops413808
-Node: Truth Values and Conditions417399
-Node: Truth Values418493
-Node: Typing and Comparison419573
-Node: Variable Typing420405
-Ref: Variable Typing-Footnote-1427049
-Ref: Variable Typing-Footnote-2427129
-Node: Comparison Operators427210
-Ref: table-relational-ops427637
-Node: POSIX String Comparison431313
-Ref: POSIX String Comparison-Footnote-1433070
-Ref: POSIX String Comparison-Footnote-2433213
-Node: Boolean Ops433297
-Ref: Boolean Ops-Footnote-1437971
-Node: Conditional Exp438067
-Node: Function Calls439847
-Node: Precedence443794
-Node: Locales447657
-Node: Expressions Summary449333
-Node: Patterns and Actions451988
-Node: Pattern Overview453124
-Node: Regexp Patterns454849
-Node: Expression Patterns455395
-Node: Ranges459300
-Node: BEGIN/END462474
-Node: Using BEGIN/END463283
-Ref: Using BEGIN/END-Footnote-1466191
-Node: I/O And BEGIN/END466301
-Node: BEGINFILE/ENDFILE468783
-Node: Empty472213
-Node: Using Shell Variables472530
-Node: Action Overview474866
-Node: Statements477302
-Node: If Statement479198
-Node: While Statement480761
-Node: Do Statement482849
-Node: For Statement484033
-Node: Switch Statement487388
-Node: Break Statement489937
-Node: Continue Statement492129
-Node: Next Statement494060
-Node: Nextfile Statement496539
-Node: Exit Statement499392
-Node: Built-in Variables501919
-Node: User-modified503096
-Node: Auto-set511303
-Ref: Auto-set-Footnote-1529387
-Ref: Auto-set-Footnote-2529605
-Node: ARGC and ARGV529661
-Node: Pattern Action Summary534090
-Node: Arrays536696
-Node: Array Basics538069
-Node: Array Intro538917
-Ref: figure-array-elements540928
-Ref: Array Intro-Footnote-1543781
-Node: Reference to Elements543913
-Node: Assigning Elements546433
-Node: Array Example546928
-Node: Scanning an Array548890
-Node: Controlling Scanning551985
-Ref: Controlling Scanning-Footnote-1558620
-Node: Numeric Array Subscripts558944
-Node: Uninitialized Subscripts561212
-Node: Delete562885
-Ref: Delete-Footnote-1565697
-Node: Multidimensional565754
-Node: Multiscanning568957
-Node: Arrays of Arrays570624
-Node: Arrays Summary574928
-Node: Functions577115
-Node: Built-in578247
-Node: Calling Built-in579436
-Node: Boolean Functions581476
-Node: Numeric Functions582038
-Ref: Numeric Functions-Footnote-1586223
-Ref: Numeric Functions-Footnote-2586906
-Ref: Numeric Functions-Footnote-3586958
-Node: String Functions587234
-Ref: String Functions-Footnote-1613685
-Ref: String Functions-Footnote-2613817
-Ref: String Functions-Footnote-3614073
-Node: Gory Details614160
-Ref: table-sub-escapes616169
-Ref: table-sub-proposed617800
-Ref: table-posix-sub619295
-Ref: table-gensub-escapes620968
-Ref: Gory Details-Footnote-1621887
-Node: I/O Functions622041
-Ref: table-system-return-values628717
-Ref: I/O Functions-Footnote-1630879
-Ref: I/O Functions-Footnote-2631027
-Node: Time Functions631147
-Ref: Time Functions-Footnote-1642859
-Ref: Time Functions-Footnote-2642927
-Ref: Time Functions-Footnote-3643089
-Ref: Time Functions-Footnote-4643200
-Ref: Time Functions-Footnote-5643316
-Ref: Time Functions-Footnote-6643543
-Node: Bitwise Functions643821
-Ref: table-bitwise-ops644419
-Ref: Bitwise Functions-Footnote-1650661
-Ref: Bitwise Functions-Footnote-2650838
-Node: Type Functions651033
-Node: I18N Functions653204
-Node: User-defined654939
-Node: Definition Syntax655685
-Ref: Definition Syntax-Footnote-1661503
-Node: Function Example661578
-Ref: Function Example-Footnote-1664557
-Node: Function Calling664579
-Node: Calling A Function665171
-Node: Variable Scope666141
-Node: Pass By Value/Reference669195
-Node: Function Caveats671923
-Ref: Function Caveats-Footnote-1674014
-Node: Return Statement674134
-Node: Dynamic Typing677166
-Node: Dynamic Typing Awk677744
-Node: Dynamic Typing Gawk679882
-Node: Indirect Calls683252
-Node: Functions Summary694389
-Node: Library Functions697355
-Ref: Library Functions-Footnote-1700903
-Ref: Library Functions-Footnote-2701048
-Node: Library Names701223
-Ref: Library Names-Footnote-1704994
-Ref: Library Names-Footnote-2705221
-Node: General Functions705315
-Node: Strtonum Function706585
-Node: Assert Function709667
-Node: Round Function713117
-Node: Cliff Random Function714689
-Node: Ordinal Functions715713
-Ref: Ordinal Functions-Footnote-1718816
-Ref: Ordinal Functions-Footnote-2719068
-Node: Join Function719282
-Ref: Join Function-Footnote-1721080
-Node: Getlocaltime Function721284
-Node: Readfile Function725058
-Node: Shell Quoting727087
-Node: Isnumeric Function728543
-Node: To CSV Function729979
-Node: Data File Management732071
-Node: Filetrans Function732703
-Node: Rewind Function736979
-Node: File Checking738950
-Ref: File Checking-Footnote-1740316
-Node: Empty Files740521
-Node: Ignoring Assigns742584
-Node: Getopt Function744158
-Ref: Getopt Function-Footnote-1759976
-Node: Passwd Functions760188
-Ref: Passwd Functions-Footnote-1769323
-Node: Group Functions769411
-Ref: Group Functions-Footnote-1777535
-Node: Walking Arrays777746
-Node: Library Functions Summary780792
-Node: Library Exercises782212
-Node: Sample Programs782697
-Node: Running Examples783479
-Node: Clones784231
-Node: Cut Program785499
-Node: Egrep Program795923
-Node: Id Program805222
-Node: Split Program815314
-Ref: Split Program-Footnote-1825527
-Node: Tee Program825712
-Node: Uniq Program828618
-Node: Wc Program836478
-Node: Bytes vs. Characters836873
-Node: Using extensions838473
-Node: wc program839251
-Node: Miscellaneous Programs844244
-Node: Dupword Program845469
-Node: Alarm Program847518
-Node: Translate Program852421
-Ref: Translate Program-Footnote-1857130
-Node: Labels Program857408
-Ref: Labels Program-Footnote-1860843
-Node: Word Sorting860927
-Node: History Sorting865101
-Node: Extract Program867374
-Node: Simple Sed875627
-Node: Igawk Program878837
-Ref: Igawk Program-Footnote-1894047
-Ref: Igawk Program-Footnote-2894253
-Ref: Igawk Program-Footnote-3894383
-Node: Anagram Program894510
-Node: Signature Program897596
-Node: Programs Summary898846
-Node: Programs Exercises900100
-Ref: Programs Exercises-Footnote-1904929
-Node: Advanced Features905015
-Node: Nondecimal Data907496
-Node: Boolean Typed Values909126
-Node: Array Sorting911083
-Node: Controlling Array Traversal911812
-Ref: Controlling Array Traversal-Footnote-1920315
-Node: Array Sorting Functions920437
-Ref: Array Sorting Functions-Footnote-1926534
-Node: Two-way I/O926742
-Ref: Two-way I/O-Footnote-1934713
-Ref: Two-way I/O-Footnote-2934904
-Node: TCP/IP Networking934986
-Node: Profiling938154
-Node: Persistent Memory947824
-Ref: Persistent Memory-Footnote-1957396
-Node: Extension Philosophy957527
-Node: Advanced Features Summary959054
-Node: Internationalization961320
-Node: I18N and L10N963022
-Node: Explaining gettext963717
-Ref: Explaining gettext-Footnote-1969853
-Ref: Explaining gettext-Footnote-2970046
-Node: Programmer i18n970211
-Ref: Programmer i18n-Footnote-1975323
-Node: Translator i18n975372
-Node: String Extraction976202
-Ref: String Extraction-Footnote-1977378
-Node: Printf Ordering977476
-Ref: Printf Ordering-Footnote-1980334
-Node: I18N Portability980402
-Ref: I18N Portability-Footnote-1982962
-Node: I18N Example983029
-Ref: I18N Example-Footnote-1986423
-Ref: I18N Example-Footnote-2986496
-Node: Gawk I18N986613
-Node: I18N Summary987267
-Node: Debugger988664
-Node: Debugging989684
-Node: Debugging Concepts990133
-Node: Debugging Terms991950
-Node: Awk Debugging994553
-Ref: Awk Debugging-Footnote-1995526
-Node: Sample Debugging Session995662
-Node: Debugger Invocation996212
-Node: Finding The Bug997837
-Node: List of Debugger Commands1004469
-Node: Breakpoint Control1005846
-Node: Debugger Execution Control1009668
-Node: Viewing And Changing Data1013142
-Node: Execution Stack1016876
-Node: Debugger Info1018557
-Node: Miscellaneous Debugger Commands1022852
-Node: Readline Support1028093
-Node: Limitations1029037
-Node: Debugging Summary1031661
-Node: Namespaces1032960
-Node: Global Namespace1034087
-Node: Qualified Names1035521
-Node: Default Namespace1036556
-Node: Changing The Namespace1037329
-Node: Naming Rules1039011
-Node: Internal Name Management1040966
-Node: Namespace Example1042036
-Node: Namespace And Features1044613
-Node: Namespace Summary1046068
-Node: Arbitrary Precision Arithmetic1047579
-Node: Computer Arithmetic1049098
-Ref: table-numeric-ranges1053023
-Ref: table-floating-point-ranges1053520
-Ref: Computer Arithmetic-Footnote-11054178
-Node: Math Definitions1054235
-Ref: table-ieee-formats1057267
-Node: MPFR features1057840
-Node: MPFR On Parole1058293
-Ref: MPFR On Parole-Footnote-11059134
-Node: MPFR Intro1059293
-Node: FP Math Caution1060977
-Ref: FP Math Caution-Footnote-11062049
-Node: Inexactness of computations1062422
-Node: Inexact representation1063453
-Node: Comparing FP Values1064834
-Node: Errors accumulate1066092
-Node: Strange values1067557
-Ref: Strange values-Footnote-11070211
-Node: Getting Accuracy1070316
-Node: Try To Round1073053
-Node: Setting precision1073960
-Ref: table-predefined-precision-strings1074665
-Node: Setting the rounding mode1076549
-Ref: table-gawk-rounding-modes1076931
-Ref: Setting the rounding mode-Footnote-11080983
-Node: Arbitrary Precision Integers1081168
-Ref: Arbitrary Precision Integers-Footnote-11084378
-Node: Checking for MPFR1084531
-Node: POSIX Floating Point Problems1086021
-Ref: POSIX Floating Point Problems-Footnote-11090841
-Node: Floating point summary1090879
-Node: Dynamic Extensions1093135
-Node: Extension Intro1094732
-Node: Plugin License1096034
-Node: Extension Mechanism Outline1096847
-Ref: figure-load-extension1097298
-Ref: figure-register-new-function1098876
-Ref: figure-call-new-function1099985
-Node: Extension API Description1102100
-Node: Extension API Functions Introduction1103829
-Ref: table-api-std-headers1105723
-Node: General Data Types1110164
-Ref: General Data Types-Footnote-11119310
-Node: Memory Allocation Functions1119613
-Ref: Memory Allocation Functions-Footnote-11124330
-Node: Constructor Functions1124429
-Node: API Ownership of MPFR and GMP Values1128330
-Node: Registration Functions1129883
-Node: Extension Functions1130587
-Node: Exit Callback Functions1136161
-Node: Extension Version String1137475
-Node: Input Parsers1138170
-Node: Output Wrappers1152789
-Node: Two-way processors1157631
-Node: Printing Messages1159984
-Ref: Printing Messages-Footnote-11161195
-Node: Updating ERRNO1161348
-Node: Requesting Values1162147
-Ref: table-value-types-returned1162900
-Node: Accessing Parameters1164959
-Node: Symbol Table Access1166240
-Node: Symbol table by name1166752
-Ref: Symbol table by name-Footnote-11169953
-Node: Symbol table by cookie1170085
-Ref: Symbol table by cookie-Footnote-11174354
-Node: Cached values1174418
-Ref: Cached values-Footnote-11178050
-Node: Array Manipulation1178207
-Ref: Array Manipulation-Footnote-11179306
-Node: Array Data Types1179343
-Ref: Array Data Types-Footnote-11182161
-Node: Array Functions1182257
-Node: Flattening Arrays1187286
-Node: Creating Arrays1194334
-Node: Redirection API1199176
-Node: Extension API Variables1202193
-Node: Extension Versioning1202916
-Ref: gawk-api-version1203345
-Node: Extension GMP/MPFR Versioning1205132
-Node: Extension API Informational Variables1206836
-Node: Extension API Boilerplate1208089
-Node: Changes from API V11212219
-Node: Finding Extensions1213851
-Node: Extension Example1214426
-Node: Internal File Description1215248
-Node: Internal File Ops1219540
-Ref: Internal File Ops-Footnote-11231090
-Node: Using Internal File Ops1231238
-Ref: Using Internal File Ops-Footnote-11233671
-Node: Extension Samples1233949
-Node: Extension Sample File Functions1235518
-Node: Extension Sample Fnmatch1243643
-Node: Extension Sample Fork1245238
-Node: Extension Sample Inplace1246514
-Node: Extension Sample Ord1250616
-Node: Extension Sample Readdir1251492
-Ref: table-readdir-file-types1252281
-Node: Extension Sample Revout1253637
-Node: Extension Sample Rev2way1254234
-Node: Extension Sample Read write array1254986
-Node: Extension Sample Readfile1258260
-Node: Extension Sample Time1259391
-Node: Extension Sample API Tests1261391
-Node: gawkextlib1261899
-Node: Extension summary1264931
-Node: Extension Exercises1268779
-Node: Language History1270049
-Node: V7/SVR3.11271761
-Node: SVR41274111
-Node: POSIX1275643
-Node: BTL1277068
-Node: POSIX/GNU1277835
-Ref: Gawk Extension Functions1281225
-Node: Feature History1284649
-Node: Common Extensions1304490
-Node: Ranges and Locales1305965
-Ref: Ranges and Locales-Footnote-11310750
-Ref: Ranges and Locales-Footnote-21310777
-Ref: Ranges and Locales-Footnote-31311012
-Node: Contributors1311235
-Node: History summary1317426
-Node: Installation1318868
-Node: Gawk Distribution1319832
-Node: Getting1320324
-Node: Extracting1321323
-Node: Distribution contents1323029
-Node: Unix Installation1330919
-Node: Quick Installation1331739
-Node: Compiling with MPFR1334279
-Node: Shell Startup Files1334985
-Node: Additional Configuration Options1336142
-Node: Configuration Philosophy1338525
-Node: Compiling from Git1341025
-Node: Building the Documentation1341584
-Node: Non-Unix Installation1342996
-Node: PC Installation1343472
-Node: PC Binary Installation1344341
-Node: PC Compiling1345234
-Node: PC Using1346412
-Node: Cygwin1350128
-Node: MSYS1351380
-Node: OpenVMS Installation1352006
-Node: OpenVMS Compilation1352687
-Ref: OpenVMS Compilation-Footnote-11354170
-Node: OpenVMS Dynamic Extensions1354228
-Node: OpenVMS Installation Details1355864
-Node: OpenVMS Running1358295
-Node: OpenVMS GNV1362432
-Node: Bugs1363187
-Node: Bug definition1364107
-Node: Bug address1367708
-Node: Usenet1371277
-Node: Performance bugs1372490
-Node: Asking for help1375494
-Node: Maintainers1377481
-Node: Other Versions1378508
-Node: Installation summary1388497
-Node: Notes1389879
-Node: Compatibility Mode1390689
-Node: Additions1391511
-Node: Accessing The Source1392456
-Node: Adding Code1393987
-Node: New Ports1401098
-Node: Derived Files1405601
-Ref: Derived Files-Footnote-11411412
-Ref: Derived Files-Footnote-21411447
-Ref: Derived Files-Footnote-31412058
-Node: Future Extensions1412172
-Node: Implementation Limitations1412842
-Node: Extension Design1414084
-Node: Old Extension Problems1415244
-Ref: Old Extension Problems-Footnote-11416816
-Node: Extension New Mechanism Goals1416877
-Ref: Extension New Mechanism Goals-Footnote-11420347
-Node: Extension Other Design Decisions1420548
-Node: Extension Future Growth1422745
-Node: Notes summary1423365
-Node: Basic Concepts1424575
-Node: Basic High Level1425260
-Ref: figure-general-flow1425542
-Ref: figure-process-flow1426244
-Ref: Basic High Level-Footnote-11429614
-Node: Basic Data Typing1429803
-Node: Glossary1433211
-Node: Copying1466089
-Node: GNU Free Documentation License1503647
-Node: Index1528770
+Ref: Splitting By Content-Footnote-1274818
+Node: FS versus FPAT274981
+Node: Testing field creation276164
+Node: Multiple Line277938
+Node: Getline284407
+Node: Plain Getline286995
+Node: Getline/Variable289643
+Node: Getline/File290839
+Node: Getline/Variable/File292287
+Ref: Getline/Variable/File-Footnote-1293932
+Node: Getline/Pipe294028
+Node: Getline/Variable/Pipe296836
+Node: Getline/Coprocess298019
+Node: Getline/Variable/Coprocess299342
+Node: Getline Notes300108
+Node: Getline Summary304085
+Ref: table-getline-variants304529
+Node: Read Timeout305433
+Ref: Read Timeout-Footnote-1309395
+Node: Retrying Input309453
+Node: Command-line directories310720
+Node: Input Summary311658
+Node: Input Exercises315038
+Node: Printing315476
+Node: Print317419
+Node: Print Examples318920
+Node: Output Separators321765
+Node: OFMT323872
+Node: Printf325585
+Node: Basic Printf326390
+Node: Control Letters328025
+Node: Format Modifiers333471
+Node: Printf Examples339743
+Node: Redirection342284
+Node: Special FD350056
+Ref: Special FD-Footnote-1353354
+Node: Special Files353432
+Node: Other Inherited Files354061
+Node: Special Network355126
+Node: Special Caveats356014
+Node: Close Files And Pipes356997
+Ref: Close Files And Pipes-Footnote-1363121
+Node: Close Return Value363269
+Ref: table-close-pipe-return-values364540
+Ref: Close Return Value-Footnote-1365371
+Node: Noflush365527
+Node: Nonfatal367035
+Node: Output Summary369450
+Node: Output Exercises370736
+Node: Expressions371427
+Node: Values372627
+Node: Constants373305
+Node: Scalar Constants374000
+Ref: Scalar Constants-Footnote-1376576
+Ref: Scalar Constants-Footnote-2376826
+Node: Nondecimal-numbers376906
+Node: Regexp Constants380019
+Node: Using Constant Regexps380565
+Node: Standard Regexp Constants381211
+Node: Strong Regexp Constants384507
+Node: Variables388350
+Node: Using Variables389015
+Node: Assignment Options390989
+Node: Conversion393540
+Node: Strings And Numbers394072
+Ref: Strings And Numbers-Footnote-1397282
+Node: Locale influences conversions397391
+Ref: table-locale-affects400229
+Node: All Operators400871
+Node: Arithmetic Ops401512
+Node: Concatenation404335
+Ref: Concatenation-Footnote-1407271
+Node: Assignment Ops407390
+Ref: table-assign-ops412517
+Node: Increment Ops413898
+Node: Truth Values and Conditions417489
+Node: Truth Values418583
+Node: Typing and Comparison419663
+Node: Variable Typing420495
+Ref: Variable Typing-Footnote-1427139
+Ref: Variable Typing-Footnote-2427219
+Node: Comparison Operators427300
+Ref: table-relational-ops427727
+Node: POSIX String Comparison431403
+Ref: POSIX String Comparison-Footnote-1433160
+Ref: POSIX String Comparison-Footnote-2433303
+Node: Boolean Ops433387
+Ref: Boolean Ops-Footnote-1438061
+Node: Conditional Exp438157
+Node: Function Calls439937
+Node: Precedence443884
+Node: Locales447747
+Node: Expressions Summary449423
+Node: Patterns and Actions452078
+Node: Pattern Overview453214
+Node: Regexp Patterns454939
+Node: Expression Patterns455485
+Node: Ranges459390
+Node: BEGIN/END462564
+Node: Using BEGIN/END463373
+Ref: Using BEGIN/END-Footnote-1466281
+Node: I/O And BEGIN/END466391
+Node: BEGINFILE/ENDFILE468873
+Node: Empty472303
+Node: Using Shell Variables472620
+Node: Action Overview474956
+Node: Statements477392
+Node: If Statement479288
+Node: While Statement480851
+Node: Do Statement482939
+Node: For Statement484123
+Node: Switch Statement487478
+Node: Break Statement490027
+Node: Continue Statement492219
+Node: Next Statement494150
+Node: Nextfile Statement496629
+Node: Exit Statement499482
+Node: Built-in Variables502009
+Node: User-modified503186
+Node: Auto-set511393
+Ref: Auto-set-Footnote-1529477
+Ref: Auto-set-Footnote-2529695
+Node: ARGC and ARGV529751
+Node: Pattern Action Summary534180
+Node: Arrays536786
+Node: Array Basics538159
+Node: Array Intro539007
+Ref: figure-array-elements541018
+Ref: Array Intro-Footnote-1543871
+Node: Reference to Elements544003
+Node: Assigning Elements546523
+Node: Array Example547018
+Node: Scanning an Array548980
+Node: Controlling Scanning552075
+Ref: Controlling Scanning-Footnote-1558710
+Node: Numeric Array Subscripts559034
+Node: Uninitialized Subscripts561302
+Node: Delete562975
+Ref: Delete-Footnote-1565787
+Node: Multidimensional565844
+Node: Multiscanning569047
+Node: Arrays of Arrays570714
+Node: Arrays Summary575018
+Node: Functions577205
+Node: Built-in578337
+Node: Calling Built-in579526
+Node: Boolean Functions581566
+Node: Numeric Functions582128
+Ref: Numeric Functions-Footnote-1586313
+Ref: Numeric Functions-Footnote-2586996
+Ref: Numeric Functions-Footnote-3587048
+Node: String Functions587324
+Ref: String Functions-Footnote-1613775
+Ref: String Functions-Footnote-2613907
+Ref: String Functions-Footnote-3614163
+Node: Gory Details614250
+Ref: table-sub-escapes616259
+Ref: table-sub-proposed617890
+Ref: table-posix-sub619385
+Ref: table-gensub-escapes621058
+Ref: Gory Details-Footnote-1621977
+Node: I/O Functions622131
+Ref: table-system-return-values628807
+Ref: I/O Functions-Footnote-1630969
+Ref: I/O Functions-Footnote-2631117
+Node: Time Functions631237
+Ref: Time Functions-Footnote-1642949
+Ref: Time Functions-Footnote-2643017
+Ref: Time Functions-Footnote-3643179
+Ref: Time Functions-Footnote-4643290
+Ref: Time Functions-Footnote-5643406
+Ref: Time Functions-Footnote-6643633
+Node: Bitwise Functions643911
+Ref: table-bitwise-ops644509
+Ref: Bitwise Functions-Footnote-1650751
+Ref: Bitwise Functions-Footnote-2650928
+Node: Type Functions651123
+Node: I18N Functions653294
+Node: User-defined655029
+Node: Definition Syntax655775
+Ref: Definition Syntax-Footnote-1661593
+Node: Function Example661668
+Ref: Function Example-Footnote-1664647
+Node: Function Calling664669
+Node: Calling A Function665261
+Node: Variable Scope666231
+Node: Pass By Value/Reference669285
+Node: Function Caveats672013
+Ref: Function Caveats-Footnote-1674104
+Node: Return Statement674224
+Node: Dynamic Typing677256
+Node: Dynamic Typing Awk677834
+Node: Dynamic Typing Gawk679972
+Node: Indirect Calls683342
+Node: Functions Summary694479
+Node: Library Functions697445
+Ref: Library Functions-Footnote-1700993
+Ref: Library Functions-Footnote-2701138
+Node: Library Names701313
+Ref: Library Names-Footnote-1705084
+Ref: Library Names-Footnote-2705311
+Node: General Functions705405
+Node: Strtonum Function706675
+Node: Assert Function709757
+Node: Round Function713207
+Node: Cliff Random Function714779
+Node: Ordinal Functions715803
+Ref: Ordinal Functions-Footnote-1718906
+Ref: Ordinal Functions-Footnote-2719158
+Node: Join Function719372
+Ref: Join Function-Footnote-1721170
+Node: Getlocaltime Function721374
+Node: Readfile Function725148
+Node: Shell Quoting727177
+Node: Isnumeric Function728633
+Node: To CSV Function730069
+Node: Data File Management732161
+Node: Filetrans Function732793
+Node: Rewind Function737069
+Node: File Checking739040
+Ref: File Checking-Footnote-1740406
+Node: Empty Files740611
+Node: Ignoring Assigns742674
+Node: Getopt Function744248
+Ref: Getopt Function-Footnote-1760066
+Node: Passwd Functions760278
+Ref: Passwd Functions-Footnote-1769413
+Node: Group Functions769501
+Ref: Group Functions-Footnote-1777625
+Node: Walking Arrays777836
+Node: Library Functions Summary780882
+Node: Library Exercises782302
+Node: Sample Programs782787
+Node: Running Examples783569
+Node: Clones784321
+Node: Cut Program785589
+Node: Egrep Program796013
+Node: Id Program805312
+Node: Split Program815404
+Ref: Split Program-Footnote-1825617
+Node: Tee Program825802
+Node: Uniq Program828708
+Node: Wc Program836568
+Node: Bytes vs. Characters836963
+Node: Using extensions838563
+Node: wc program839341
+Node: Miscellaneous Programs844334
+Node: Dupword Program845559
+Node: Alarm Program847608
+Node: Translate Program852511
+Ref: Translate Program-Footnote-1857220
+Node: Labels Program857498
+Ref: Labels Program-Footnote-1860933
+Node: Word Sorting861017
+Node: History Sorting865191
+Node: Extract Program867464
+Node: Simple Sed875717
+Node: Igawk Program878927
+Ref: Igawk Program-Footnote-1894137
+Ref: Igawk Program-Footnote-2894343
+Ref: Igawk Program-Footnote-3894473
+Node: Anagram Program894600
+Node: Signature Program897686
+Node: Programs Summary898936
+Node: Programs Exercises900190
+Ref: Programs Exercises-Footnote-1905019
+Node: Advanced Features905105
+Node: Nondecimal Data907586
+Node: Boolean Typed Values909216
+Node: Array Sorting911173
+Node: Controlling Array Traversal911902
+Ref: Controlling Array Traversal-Footnote-1920405
+Node: Array Sorting Functions920527
+Ref: Array Sorting Functions-Footnote-1926624
+Node: Two-way I/O926832
+Ref: Two-way I/O-Footnote-1934803
+Ref: Two-way I/O-Footnote-2934994
+Node: TCP/IP Networking935076
+Node: Profiling938244
+Node: Persistent Memory947914
+Ref: Persistent Memory-Footnote-1957486
+Node: Extension Philosophy957617
+Node: Advanced Features Summary959144
+Node: Internationalization961410
+Node: I18N and L10N963112
+Node: Explaining gettext963807
+Ref: Explaining gettext-Footnote-1969943
+Ref: Explaining gettext-Footnote-2970136
+Node: Programmer i18n970301
+Ref: Programmer i18n-Footnote-1975413
+Node: Translator i18n975462
+Node: String Extraction976292
+Ref: String Extraction-Footnote-1977468
+Node: Printf Ordering977566
+Ref: Printf Ordering-Footnote-1980424
+Node: I18N Portability980492
+Ref: I18N Portability-Footnote-1983052
+Node: I18N Example983119
+Ref: I18N Example-Footnote-1986513
+Ref: I18N Example-Footnote-2986586
+Node: Gawk I18N986703
+Node: I18N Summary987357
+Node: Debugger988754
+Node: Debugging989774
+Node: Debugging Concepts990223
+Node: Debugging Terms992040
+Node: Awk Debugging994643
+Ref: Awk Debugging-Footnote-1995616
+Node: Sample Debugging Session995752
+Node: Debugger Invocation996302
+Node: Finding The Bug997927
+Node: List of Debugger Commands1004559
+Node: Breakpoint Control1005936
+Node: Debugger Execution Control1009758
+Node: Viewing And Changing Data1013232
+Node: Execution Stack1016966
+Node: Debugger Info1018647
+Node: Miscellaneous Debugger Commands1022942
+Node: Readline Support1028183
+Node: Limitations1029127
+Node: Debugging Summary1031751
+Node: Namespaces1033050
+Node: Global Namespace1034177
+Node: Qualified Names1035611
+Node: Default Namespace1036646
+Node: Changing The Namespace1037419
+Node: Naming Rules1039101
+Node: Internal Name Management1041056
+Node: Namespace Example1042126
+Node: Namespace And Features1044703
+Node: Namespace Summary1046158
+Node: Arbitrary Precision Arithmetic1047669
+Node: Computer Arithmetic1049188
+Ref: table-numeric-ranges1053113
+Ref: table-floating-point-ranges1053610
+Ref: Computer Arithmetic-Footnote-11054268
+Node: Math Definitions1054325
+Ref: table-ieee-formats1057357
+Node: MPFR features1057930
+Node: MPFR On Parole1058383
+Ref: MPFR On Parole-Footnote-11059224
+Node: MPFR Intro1059383
+Node: FP Math Caution1061067
+Ref: FP Math Caution-Footnote-11062139
+Node: Inexactness of computations1062512
+Node: Inexact representation1063543
+Node: Comparing FP Values1064924
+Node: Errors accumulate1066182
+Node: Strange values1067647
+Ref: Strange values-Footnote-11070301
+Node: Getting Accuracy1070406
+Node: Try To Round1073143
+Node: Setting precision1074050
+Ref: table-predefined-precision-strings1074755
+Node: Setting the rounding mode1076639
+Ref: table-gawk-rounding-modes1077021
+Ref: Setting the rounding mode-Footnote-11081073
+Node: Arbitrary Precision Integers1081258
+Ref: Arbitrary Precision Integers-Footnote-11084468
+Node: Checking for MPFR1084621
+Node: POSIX Floating Point Problems1086111
+Ref: POSIX Floating Point Problems-Footnote-11090931
+Node: Floating point summary1090969
+Node: Dynamic Extensions1093225
+Node: Extension Intro1094822
+Node: Plugin License1096124
+Node: Extension Mechanism Outline1096937
+Ref: figure-load-extension1097388
+Ref: figure-register-new-function1098966
+Ref: figure-call-new-function1100075
+Node: Extension API Description1102190
+Node: Extension API Functions Introduction1103919
+Ref: table-api-std-headers1105813
+Node: General Data Types1110254
+Ref: General Data Types-Footnote-11119400
+Node: Memory Allocation Functions1119703
+Ref: Memory Allocation Functions-Footnote-11124420
+Node: Constructor Functions1124519
+Node: API Ownership of MPFR and GMP Values1128420
+Node: Registration Functions1129973
+Node: Extension Functions1130677
+Node: Exit Callback Functions1136251
+Node: Extension Version String1137565
+Node: Input Parsers1138260
+Node: Output Wrappers1152879
+Node: Two-way processors1157721
+Node: Printing Messages1160074
+Ref: Printing Messages-Footnote-11161285
+Node: Updating ERRNO1161438
+Node: Requesting Values1162237
+Ref: table-value-types-returned1162990
+Node: Accessing Parameters1165049
+Node: Symbol Table Access1166330
+Node: Symbol table by name1166842
+Ref: Symbol table by name-Footnote-11170043
+Node: Symbol table by cookie1170175
+Ref: Symbol table by cookie-Footnote-11174444
+Node: Cached values1174508
+Ref: Cached values-Footnote-11178140
+Node: Array Manipulation1178297
+Ref: Array Manipulation-Footnote-11179396
+Node: Array Data Types1179433
+Ref: Array Data Types-Footnote-11182251
+Node: Array Functions1182347
+Node: Flattening Arrays1187376
+Node: Creating Arrays1194424
+Node: Redirection API1199266
+Node: Extension API Variables1202283
+Node: Extension Versioning1203006
+Ref: gawk-api-version1203435
+Node: Extension GMP/MPFR Versioning1205222
+Node: Extension API Informational Variables1206926
+Node: Extension API Boilerplate1208179
+Node: Changes from API V11212309
+Node: Finding Extensions1213941
+Node: Extension Example1214516
+Node: Internal File Description1215338
+Node: Internal File Ops1219630
+Ref: Internal File Ops-Footnote-11231180
+Node: Using Internal File Ops1231328
+Ref: Using Internal File Ops-Footnote-11233761
+Node: Extension Samples1234039
+Node: Extension Sample File Functions1235608
+Node: Extension Sample Fnmatch1243733
+Node: Extension Sample Fork1245328
+Node: Extension Sample Inplace1246604
+Node: Extension Sample Ord1250706
+Node: Extension Sample Readdir1251582
+Ref: table-readdir-file-types1252371
+Node: Extension Sample Revout1253727
+Node: Extension Sample Rev2way1254324
+Node: Extension Sample Read write array1255076
+Node: Extension Sample Readfile1258350
+Node: Extension Sample Time1259481
+Node: Extension Sample API Tests1261481
+Node: gawkextlib1261989
+Node: Extension summary1265021
+Node: Extension Exercises1268869
+Node: Language History1270139
+Node: V7/SVR3.11271851
+Node: SVR41274201
+Node: POSIX1275733
+Node: BTL1277158
+Node: POSIX/GNU1277925
+Ref: Gawk Extension Functions1281315
+Node: Feature History1284739
+Node: Common Extensions1304580
+Node: Ranges and Locales1306055
+Ref: Ranges and Locales-Footnote-11310840
+Ref: Ranges and Locales-Footnote-21310867
+Ref: Ranges and Locales-Footnote-31311102
+Node: Contributors1311325
+Node: History summary1317516
+Node: Installation1318958
+Node: Gawk Distribution1319922
+Node: Getting1320414
+Node: Extracting1321413
+Node: Distribution contents1323119
+Node: Unix Installation1331009
+Node: Quick Installation1331829
+Node: Compiling with MPFR1334369
+Node: Shell Startup Files1335075
+Node: Additional Configuration Options1336232
+Node: Configuration Philosophy1338615
+Node: Compiling from Git1341115
+Node: Building the Documentation1341674
+Node: Non-Unix Installation1343086
+Node: PC Installation1343562
+Node: PC Binary Installation1344431
+Node: PC Compiling1345324
+Node: PC Using1346502
+Node: Cygwin1350218
+Node: MSYS1351470
+Node: OpenVMS Installation1352096
+Node: OpenVMS Compilation1352777
+Ref: OpenVMS Compilation-Footnote-11354260
+Node: OpenVMS Dynamic Extensions1354318
+Node: OpenVMS Installation Details1355954
+Node: OpenVMS Running1358385
+Node: OpenVMS GNV1362522
+Node: Bugs1363277
+Node: Bug definition1364197
+Node: Bug address1367798
+Node: Usenet1371367
+Node: Performance bugs1372580
+Node: Asking for help1375584
+Node: Maintainers1377571
+Node: Other Versions1378598
+Node: Installation summary1388587
+Node: Notes1389969
+Node: Compatibility Mode1390779
+Node: Additions1391601
+Node: Accessing The Source1392546
+Node: Adding Code1394077
+Node: New Ports1401188
+Node: Derived Files1405691
+Ref: Derived Files-Footnote-11411502
+Ref: Derived Files-Footnote-21411537
+Ref: Derived Files-Footnote-31412148
+Node: Future Extensions1412262
+Node: Implementation Limitations1412932
+Node: Extension Design1414174
+Node: Old Extension Problems1415334
+Ref: Old Extension Problems-Footnote-11416906
+Node: Extension New Mechanism Goals1416967
+Ref: Extension New Mechanism Goals-Footnote-11420437
+Node: Extension Other Design Decisions1420638
+Node: Extension Future Growth1422835
+Node: Notes summary1423455
+Node: Basic Concepts1424665
+Node: Basic High Level1425350
+Ref: figure-general-flow1425632
+Ref: figure-process-flow1426334
+Ref: Basic High Level-Footnote-11429704
+Node: Basic Data Typing1429893
+Node: Glossary1433301
+Node: Copying1466179
+Node: GNU Free Documentation License1503737
+Node: Index1528860
End Tag Table
diff --git a/doc/gawk.texi b/doc/gawk.texi
index 7b653bd7..8a833b4f 100644
--- a/doc/gawk.texi
+++ b/doc/gawk.texi
@@ -8406,12 +8406,14 @@ recognizes this kind of CSV field is
@code{/([^,]*)|("([^"]|"")+")/}.
The following program uses this improved @code{FPAT} expression to split the
example CSV fields above, extracts the underlying data from any double-quoted
fields, and finally prints the data as tab-separated values.
+The latter is accomplished by setting @code{OFS} to a TAB character.
@example
@c file eg/misc/quoted-csv.awk
@group
BEGIN @{
FPAT = "([^,]*)|(\"([^\"]|\"\")+\")"
+ OFS = "\t" # Print tab-separated values
@}
@end group
@@ -8423,9 +8425,9 @@ BEGIN @{
gsub(/^"|"$/, "", $i) # Remove enclosing quotes
gsub(/""/, "\"", $i) # Convert "" to "
@}
- # Print tab-separated values
- printf (i < NF) ? "%s\t" : "%s\n", $i
@}
+ $1 = $1 # force rebuild of the record
+ print
@}
@end group
@c endfile
http://git.sv.gnu.org/cgit/gawk.git/commit/?id=eebe70843b364e347b357a98e85470f90ca10128
commit eebe70843b364e347b357a98e85470f90ca10128
Merge: 95ecba4f f949fd31
Author: Arnold D. Robbins <arnold@skeeve.com>
Date: Tue Sep 24 20:15:06 2024 +0300
Merge branch 'gawk-5.3-stable' into stable/fpat-doc
http://git.sv.gnu.org/cgit/gawk.git/commit/?id=95ecba4f6e90b744a4665af63695112c4a0939a4
commit 95ecba4f6e90b744a4665af63695112c4a0939a4
Author: Arnold D. Robbins <arnold@skeeve.com>
Date: Fri Sep 20 10:50:01 2024 +0300
More updates on CSV doc.
diff --git a/awklib/eg/misc/addresses.csv b/awklib/eg/misc/addresses.csv
index a9eee0b2..eb829edf 100644
--- a/awklib/eg/misc/addresses.csv
+++ b/awklib/eg/misc/addresses.csv
@@ -1 +1 @@
-Robbins,Arnold,"1234 A Pretty Street, NE",MyTown,MyState,12345-6789,USA
+Robbins,Arnold,,"1234 A Pretty Street, NE",MyTown,MyState,12345-6789,USA
diff --git a/awklib/eg/misc/quoted-csv.awk b/awklib/eg/misc/quoted-csv.awk
new file mode 100644
index 00000000..13b0ea32
--- /dev/null
+++ b/awklib/eg/misc/quoted-csv.awk
@@ -0,0 +1,15 @@
+BEGIN {
+ FPAT = "([^,]*)|(\"([^\"]|\"\")+\")"
+}
+
+{
+ for (i = 1; i <= NF; i++) {
+ # Extract data from double-quoted fields
+ if (substr($i, 1, 1) == "\"") {
+ gsub(/^"|"$/, "", $i) # Remove enclosing quotes
+ gsub(/""/, "\"", $i) # Convert "" to "
+ }
+ # Print tab-separated values
+ printf (i < NF) ? "%s\t" : "%s\n", $i
+ }
+}
diff --git a/awklib/eg/misc/sample.csv b/awklib/eg/misc/sample.csv
index 12a4f711..2cce646b 100644
--- a/awklib/eg/misc/sample.csv
+++ b/awklib/eg/misc/sample.csv
@@ -1,3 +1,4 @@
+1,2,3
p,"q,r",s
p,"q""r",s
p,"q,""r",s
diff --git a/awklib/eg/misc/simple-csv.awk b/awklib/eg/misc/simple-csv.awk
index 36cb4a6e..cb718729 100644
--- a/awklib/eg/misc/simple-csv.awk
+++ b/awklib/eg/misc/simple-csv.awk
@@ -3,7 +3,7 @@ BEGIN {
}
{
- print "NF = ", NF
+ print "NF =", NF
for (i = 1; i <= NF; i++) {
printf("$%d = <%s>\n", i, $i)
}
diff --git a/awklib/eg/misc/test-csv.awk b/awklib/eg/misc/test-csv.awk
deleted file mode 100644
index 12cd2d4c..00000000
--- a/awklib/eg/misc/test-csv.awk
+++ /dev/null
@@ -1,15 +0,0 @@
-BEGIN {
- fp[0] = "([^,]+)|(\"[^\"]+\")"
- fp[1] = "([^,]*)|(\"[^\"]+\")"
- fp[2] = "([^,]*)|(\"([^\"]|\"\")+\")"
- FPAT = fp[fpat+0]
-}
-
-{
- print "<" $0 ">"
- printf("NF = %s ", NF)
- for (i = 1; i <= NF; i++) {
- printf("<%s>", $i)
- }
- print ""
-}
diff --git a/doc/ChangeLog b/doc/ChangeLog
index 3d07f3c9..42cd6c74 100644
--- a/doc/ChangeLog
+++ b/doc/ChangeLog
@@ -1,3 +1,8 @@
+2024-09-20 Stuart Ferguson <stuart.fergs@gmail.com>
+
+ * gawk.texi (Splitting By Content): Reworked some more.
+ (More CSV): Removed.
+
2024-09-17 Arnold D. Robbins <arnold@skeeve.com>
* 5.3.1: Release tar made.
diff --git a/doc/gawk.info b/doc/gawk.info
index 50331a8a..2aea985f 100644
--- a/doc/gawk.info
+++ b/doc/gawk.info
@@ -205,7 +205,6 @@ in (a) below. A copy of the license is included in the
section entitled
* Allowing trailing data:: Capturing optional trailing data.
* Fields with fixed data:: Field values with fixed-width data.
* Splitting By Content:: Defining Fields By Content
-* More CSV:: More on CSV files.
* FS versus FPAT:: A subtle difference.
* Testing field creation:: Checking how âgawkâ is
splitting records.
@@ -5793,7 +5792,6 @@ File: gawk.info, Node: Splitting By Content, Next:
Testing field creation, Pr
* Menu:
-* More CSV:: More on CSV files.
* FS versus FPAT:: A subtle difference.
This minor node discusses an advanced feature of âgawkâ. If you are a
@@ -5810,9 +5808,9 @@ of âFPATâ should be a string that provides a regular
expression. This
regular expression describes the contents of each field.
We can explore the strengths, and some limitations, of âFPATâ using
-the case of comma-separated values (CSV) data. This case is rather
-academic as âgawkâ now has built-in CSV parsing (*note Comma Separated
-Fields::), Nonetheless, it remains useful as an example of what
+the case of comma-separated values (CSV) data. This case is somewhat
+obsolete as âgawkâ now has built-in CSV parsing (*note Comma Separated
+Fields::). Nonetheless, it remains useful as an example of what
âFPATâ-based field parsing can do. It is also useful for versions of
âgawkâ prior to version 5.3.
@@ -5824,17 +5822,16 @@ fields. The problem comes when one of the fields
contains an _embedded_
comma. In such cases, most programs embed the field in double
quotes.(1) So, we might have data like this:
- Robbins,Arnold,"1234 A Pretty Street, NE",MyTown,MyState,12345-6789,USA
+ Robbins,Arnold,,"1234 A Pretty Street, NE",MyTown,MyState,12345-6789,USA
In the case of CSV data as presented here, each field is either
"anything that is not a comma," or "a double quote, anything that is not
-a double quote, and a closing double quote." (There are more
-complicated definitions of CSV data, treated shortly.) If written as a
-regular expression constant (*note Regexp::), we would have
-â/([^,]+)|("[^"]+")/â. Writing this as a string requires us to escape
-the double quotes, leading to:
+a double quote, and a closing double quote." We also need to bear in
+mind that some fields may be empty. If written as a regular expression
+constant (*note Regexp::), we would have â/([^,]*)|("[^"]+")/â. Writing
+this as a string requires us to escape the double quotes, leading to:
- FPAT = "([^,]+)|(\"[^\"]+\")"
+ FPAT = "([^,]*)|(\"[^\"]+\")"
Putting this to use, here is a simple program to parse the data:
@@ -5843,7 +5840,7 @@ the double quotes, leading to:
}
{
- print "NF = ", NF
+ print "NF =", NF
for (i = 1; i <= NF; i++) {
printf("$%d = <%s>\n", i, $i)
}
@@ -5852,116 +5849,97 @@ the double quotes, leading to:
When run, we get the following:
$ gawk -f simple-csv.awk addresses.csv
- ⣠NF = 7
+ ⣠NF = 8
⣠$1 = <Robbins>
⣠$2 = <Arnold>
- ⣠$3 = <"1234 A Pretty Street, NE">
- ⣠$4 = <MyTown>
- ⣠$5 = <MyState>
- ⣠$6 = <12345-6789>
- ⣠$7 = <USA>
-
- Note the embedded comma in the value of â$3â.
-
- A straightforward improvement when processing CSV data of this sort
-would be to remove the quotes when they occur, with something like this:
-
- if (substr($i, 1, 1) == "\"") {
- len = length($i)
- $i = substr($i, 2, len - 2) # Get text within the two quotes
- }
-
- As written, the regexp used for âFPATâ requires that each field
-contain at least one character. A straightforward modification
-(changing the first â+â to â*â) allows fields to be empty:
-
- FPAT = "([^,]*)|(\"[^\"]+\")"
-
- As with âFSâ, the âIGNORECASEâ variable (*note User-modified::)
-affects field splitting with âFPATâ.
-
- Assigning a value to âFPATâ overrides field splitting with âFSâ and
-with âFIELDWIDTHSâ.
-
- Finally, the âpatsplit()â function makes the same functionality
-available for splitting regular strings (*note String Functions::).
-
- ---------- Footnotes ----------
-
- (1) The CSV format lacked a formal standard definition for many
-years. RFC 4180 (http://www.ietf.org/rfc/rfc4180.txt) standardizes the
-most common practices.
-
-
-File: gawk.info, Node: More CSV, Next: FS versus FPAT, Up: Splitting By
Content
-
-4.7.1 More on Using âFPATâ with CSV Files
------------------------------------------
-
-Manuel Collado notes that in addition to commas, a CSV field can also
-contains quotes, that have to be escaped by doubling them. The
-previously described regexps fail to accept quoted fields with both
-commas and quotes inside. He suggests that the simplest âFPATâ
-expression that recognizes this kind of fields is
-â/([^,]*)|("([^"]|"")+")/â. He provides the following input data to
-test these variants:
-
+ ⣠$3 = <>
+ ⣠$4 = <"1234 A Pretty Street, NE">
+ ⣠$5 = <MyTown>
+ ⣠$6 = <MyState>
+ ⣠$7 = <12345-6789>
+ ⣠$8 = <USA>
+
+ Note the empty data field in the value of â$3â and the embedded comma
+in the value of â$4â, in which the data remains wrapped in its enclosing
+double quotes.
+
+ The use of enclosing double quotes has a consequence for fields that
+contain double quotes as part of the data itself. For those fields, a
+double quote appearing inside a field must be escaped by preceding it
+with another double quote, as shown in the third and fourth lines of the
+following example:
+
+ 1,2,3
p,"q,r",s
p,"q""r",s
p,"q,""r",s
p,"",s
p,,s
- And here is his test program:
+ Manuel Collado suggests that the simplest âFPATâ expression that
+recognizes this kind of CSV field is â/([^,]*)|("([^"]|"")+")/â.
+
+ The following program uses this improved âFPATâ expression to split
+the example CSV fields above, extracts the underlying data from any
+double-quoted fields, and finally prints the data as tab-separated
+values.
BEGIN {
- fp[0] = "([^,]+)|(\"[^\"]+\")"
- fp[1] = "([^,]*)|(\"[^\"]+\")"
- fp[2] = "([^,]*)|(\"([^\"]|\"\")+\")"
- FPAT = fp[fpat+0]
+ FPAT = "([^,]*)|(\"([^\"]|\"\")+\")"
}
{
- print "<" $0 ">"
- printf("NF = %s ", NF)
- for (i = 1; i <= NF; i++) {
- printf("<%s>", $i)
- }
- print ""
+ for (i = 1; i <= NF; i++) {
+ # Extract data from double-quoted fields
+ if (substr($i, 1, 1) == "\"") {
+ gsub(/^"|"$/, "", $i) # Remove enclosing quotes
+ gsub(/""/, "\"", $i) # Convert "" to "
+ }
+ # Print tab-separated values
+ printf (i < NF) ? "%s\t" : "%s\n", $i
+ }
}
- When run on the third variant, it produces:
+ When run, it produces:
- $ gawk -v fpat=2 -f test-csv.awk sample.csv
- ⣠<p,"q,r",s>
- ⣠NF = 3 <p><"q,r"><s>
- ⣠<p,"q""r",s>
- ⣠NF = 3 <p><"q""r"><s>
- ⣠<p,"q,""r",s>
- ⣠NF = 3 <p><"q,""r"><s>
- ⣠<p,"",s>
- ⣠NF = 3 <p><""><s>
- ⣠<p,,s>
- ⣠NF = 3 <p><><s>
+ $ gawk -f quoted-csv.awk sample.csv
+ ⣠1 2 3
+ ⣠p q,r s
+ ⣠p q"r s
+ ⣠p q,"r s
+ ⣠p s
+ ⣠p s
- Some programs export CSV data that contains _embedded newlines_
+ Some programs export CSV data that contain _embedded newlines_
between the double quotes, and here we run into a limitation of âFPATâ:
-it provides no way to deal with this.
-
- Using âFPATâ to do your own CSV parsing is an elegant approach for
-the majority of cases, but not all. It is rather like having a bed with
-a blanket thatâs not quite big enough: thereâs always a corner that
-isnât covered.
+it provides no way to deal with this. Hence, using âFPATâ to do your
+own CSV parsing is an elegant approach for the majority of cases, but
+not all.
For a more general solution to working with CSV data, see *note Comma
Separated Fields::. If your version of âgawkâ is prior to version 5.3,
we recommend that you use Manuel Collado's âCSVMODEâ library for âgawkâ
(http://mcollado.z15.es/xgawk/).
+ As with âFSâ, the âIGNORECASEâ variable (*note User-modified::)
+affects field splitting with âFPATâ.
+
+ Assigning a value to âFPATâ overrides field splitting with âFSâ and
+with âFIELDWIDTHSâ.
+
+ Finally, the âpatsplit()â function makes the same functionality
+available for splitting regular strings (*note String Functions::).
+
+ ---------- Footnotes ----------
+
+ (1) The CSV format lacked a formal standard definition for many
+years. RFC 4180 (http://www.ietf.org/rfc/rfc4180.txt) standardizes the
+most common practices.
+
-File: gawk.info, Node: FS versus FPAT, Prev: More CSV, Up: Splitting By
Content
+File: gawk.info, Node: FS versus FPAT, Up: Splitting By Content
-4.7.2 âFSâ Versus âFPATâ: A Subtle Difference
+4.7.1 âFSâ Versus âFPATâ: A Subtle Difference
---------------------------------------------
As we discussed earlier, âFSâ describes the data between fields ("what
@@ -36563,7 +36541,7 @@ Index
* advanced features, processes, communicating with: Two-way I/O.
(line 6)
* advanced features, specifying field content: Splitting By Content.
- (line 14)
+ (line 13)
* Aho, Alfred: History. (line 21)
* Aho, Alfred <1>: Contributors. (line 12)
* Aho, Alfred <2>: Other Versions. (line 35)
@@ -37102,8 +37080,10 @@ Index
* close() function, return value: Close Return Value. (line 6)
* close() function, two-way pipes and: Two-way I/O. (line 60)
* Collado, Manuel: Acknowledgments. (line 60)
-* Collado, Manuel <1>: More CSV. (line 6)
-* Collado, Manuel <2>: More CSV. (line 61)
+* Collado, Manuel <1>: Splitting By Content.
+ (line 92)
+* Collado, Manuel <2>: Splitting By Content.
+ (line 132)
* collating elements: Bracket Expressions. (line 90)
* collating symbols: Bracket Expressions. (line 97)
* Colombo, Antonio: Acknowledgments. (line 60)
@@ -37118,9 +37098,9 @@ Index
* comma separated values (CSV) data, generating CSV data: To CSV Function.
(line 6)
* Comma separated values (CSV) data, parsing with FPAT: Splitting By Content.
- (line 24)
-* Comma separated values (CSV) data, parsing with FPAT library: More CSV.
- (line 61)
+ (line 23)
+* Comma separated values (CSV) data, parsing with FPAT library: Splitting By
Content.
+ (line 132)
* comma separated values (CSV) data, records and fields: Comma Separated
Fields.
(line 6)
* command completion, in debugger: Readline Support. (line 6)
@@ -37244,13 +37224,14 @@ Index
* CSV (comma separated values) data, -k option: Options. (line 203)
* CSV (comma separated values) data, generating CSV data: To CSV Function.
(line 6)
-* CSV (comma separated values) data, parsing with CSVMODE library: More CSV.
- (line 61)
+* CSV (comma separated values) data, parsing with CSVMODE library: Splitting
By Content.
+ (line 132)
* CSV (comma separated values) data, parsing with FPAT: Splitting By Content.
- (line 24)
+ (line 23)
* CSV (comma separated values) data, records and fields: Comma Separated
Fields.
(line 6)
-* CSVMODE library for gawk: More CSV. (line 61)
+* CSVMODE library for gawk: Splitting By Content.
+ (line 132)
* ctime() user-defined function: Function Example. (line 74)
* Curreli, Marco: Contributors. (line 147)
* currency symbols, localization: Explaining gettext. (line 104)
@@ -38028,7 +38009,7 @@ Index
* forward slash (/), patterns and: Expression Patterns. (line 24)
* forward slash (/), to enclose regular expressions: Regexp. (line 10)
* FPAT variable: Splitting By Content.
- (line 20)
+ (line 19)
* FPAT variable <1>: User-modified. (line 46)
* frame debugger command: Execution Stack. (line 27)
* frawk: Other Versions. (line 123)
@@ -38146,7 +38127,7 @@ Index
* gawk, format-control characters: Control Letters. (line 33)
* gawk, format-control characters <1>: Control Letters. (line 108)
* gawk, FPAT variable in: Splitting By Content.
- (line 20)
+ (line 19)
* gawk, FPAT variable in <1>: User-modified. (line 46)
* gawk, FUNCTAB array in: Auto-set. (line 134)
* gawk, function arguments and: Calling Built-in. (line 16)
@@ -39949,628 +39930,627 @@ Index
Tag Table:
Node: Top1203
-Node: Foreword347032
-Node: Foreword451606
-Node: Preface53150
-Ref: Preface-Footnote-156136
-Ref: Preface-Footnote-256245
-Ref: Preface-Footnote-356479
-Node: History56625
-Node: Names59239
-Ref: Names-Footnote-160393
-Node: This Manual60556
-Ref: This Manual-Footnote-167486
-Node: Conventions67594
-Node: Manual History70023
-Ref: Manual History-Footnote-173048
-Ref: Manual History-Footnote-273089
-Node: How To Contribute73163
-Node: Acknowledgments74109
-Node: Getting Started79098
-Node: Running gawk81625
-Node: One-shot82843
-Node: Read Terminal84142
-Node: Long86196
-Node: Executable Scripts87846
-Ref: Executable Scripts-Footnote-190616
-Node: Comments90723
-Node: Quoting93253
-Node: DOS Quoting98897
-Node: Sample Data Files100977
-Node: Very Simple103612
-Node: Two Rules109866
-Node: More Complex111818
-Node: Statements/Lines114238
-Ref: Statements/Lines-Footnote-1119750
-Node: Other Features120039
-Node: When121007
-Ref: When-Footnote-1122809
-Node: Intro Summary122874
-Node: Invoking Gawk123828
-Node: Command Line125390
-Node: Options126240
-Ref: Options-Footnote-1145582
-Ref: Options-Footnote-2145817
-Node: Other Arguments145842
-Node: Naming Standard Input150007
-Node: Environment Variables151277
-Node: AWKPATH Variable151851
-Ref: AWKPATH Variable-Footnote-1155435
-Ref: AWKPATH Variable-Footnote-2155469
-Node: AWKLIBPATH Variable155860
-Ref: AWKLIBPATH Variable-Footnote-1157635
-Node: Other Environment Variables158030
-Node: Exit Status162506
-Node: Include Files163219
-Node: Loading Shared Libraries167279
-Node: Obsolete168771
-Node: Undocumented169519
-Node: Invoking Summary169816
-Node: Regexp172841
-Node: Regexp Usage174335
-Node: Escape Sequences176436
-Ref: Escape Sequences-Footnote-1183971
-Node: Regexp Operators184049
-Node: Regexp Operator Details184542
-Ref: Regexp Operator Details-Footnote-1192553
-Node: Interval Expressions192712
-Ref: Interval Expressions-Footnote-1194979
-Node: Bracket Expressions195077
-Ref: table-char-classes197633
-Node: Leftmost Longest201131
-Node: Computed Regexps202487
-Node: GNU Regexp Operators206002
-Node: Case-sensitivity211099
-Ref: Case-sensitivity-Footnote-1214049
-Ref: Case-sensitivity-Footnote-2214292
-Node: Regexp Summary214404
-Node: Reading Files215926
-Node: Records218245
-Node: awk split records219520
-Node: gawk split records224402
-Ref: gawk split records-Footnote-1229690
-Node: Fields229727
-Ref: Fields-Footnote-1232643
-Node: Nonconstant Fields232763
-Ref: Nonconstant Fields-Footnote-1235071
-Node: Changing Fields235287
-Node: Field Separators241585
-Node: Default Field Splitting244454
-Node: Regexp Field Splitting245596
-Node: Single Character Fields249425
-Node: Comma Separated Fields250514
-Ref: table-csv-examples251918
-Node: Command Line Field Separator254217
-Node: Full Line Fields257593
-Ref: Full Line Fields-Footnote-1259171
-Ref: Full Line Fields-Footnote-2259217
-Node: Field Splitting Summary259322
-Node: Constant Size261639
-Node: Fixed width data262383
-Node: Skipping intervening265898
-Node: Allowing trailing data266700
-Node: Fields with fixed data267761
-Node: Splitting By Content269383
-Ref: Splitting By Content-Footnote-1273306
-Node: More CSV273469
-Node: FS versus FPAT275545
-Node: Testing field creation276745
-Node: Multiple Line278519
-Node: Getline284988
-Node: Plain Getline287576
-Node: Getline/Variable290224
-Node: Getline/File291420
-Node: Getline/Variable/File292868
-Ref: Getline/Variable/File-Footnote-1294513
-Node: Getline/Pipe294609
-Node: Getline/Variable/Pipe297417
-Node: Getline/Coprocess298600
-Node: Getline/Variable/Coprocess299923
-Node: Getline Notes300689
-Node: Getline Summary304666
-Ref: table-getline-variants305110
-Node: Read Timeout306014
-Ref: Read Timeout-Footnote-1309976
-Node: Retrying Input310034
-Node: Command-line directories311301
-Node: Input Summary312239
-Node: Input Exercises315619
-Node: Printing316057
-Node: Print318000
-Node: Print Examples319501
-Node: Output Separators322346
-Node: OFMT324453
-Node: Printf326166
-Node: Basic Printf326971
-Node: Control Letters328606
-Node: Format Modifiers334052
-Node: Printf Examples340324
-Node: Redirection342865
-Node: Special FD350637
-Ref: Special FD-Footnote-1353935
-Node: Special Files354013
-Node: Other Inherited Files354642
-Node: Special Network355707
-Node: Special Caveats356595
-Node: Close Files And Pipes357578
-Ref: Close Files And Pipes-Footnote-1363702
-Node: Close Return Value363850
-Ref: table-close-pipe-return-values365121
-Ref: Close Return Value-Footnote-1365952
-Node: Noflush366108
-Node: Nonfatal367616
-Node: Output Summary370031
-Node: Output Exercises371317
-Node: Expressions372008
-Node: Values373208
-Node: Constants373886
-Node: Scalar Constants374581
-Ref: Scalar Constants-Footnote-1377157
-Ref: Scalar Constants-Footnote-2377407
-Node: Nondecimal-numbers377487
-Node: Regexp Constants380600
-Node: Using Constant Regexps381146
-Node: Standard Regexp Constants381792
-Node: Strong Regexp Constants385088
-Node: Variables388931
-Node: Using Variables389596
-Node: Assignment Options391570
-Node: Conversion394121
-Node: Strings And Numbers394653
-Ref: Strings And Numbers-Footnote-1397863
-Node: Locale influences conversions397972
-Ref: table-locale-affects400810
-Node: All Operators401452
-Node: Arithmetic Ops402093
-Node: Concatenation404916
-Ref: Concatenation-Footnote-1407852
-Node: Assignment Ops407971
-Ref: table-assign-ops413098
-Node: Increment Ops414479
-Node: Truth Values and Conditions418070
-Node: Truth Values419164
-Node: Typing and Comparison420244
-Node: Variable Typing421076
-Ref: Variable Typing-Footnote-1427720
-Ref: Variable Typing-Footnote-2427800
-Node: Comparison Operators427881
-Ref: table-relational-ops428308
-Node: POSIX String Comparison431984
-Ref: POSIX String Comparison-Footnote-1433741
-Ref: POSIX String Comparison-Footnote-2433884
-Node: Boolean Ops433968
-Ref: Boolean Ops-Footnote-1438642
-Node: Conditional Exp438738
-Node: Function Calls440518
-Node: Precedence444465
-Node: Locales448328
-Node: Expressions Summary450004
-Node: Patterns and Actions452659
-Node: Pattern Overview453795
-Node: Regexp Patterns455520
-Node: Expression Patterns456066
-Node: Ranges459971
-Node: BEGIN/END463145
-Node: Using BEGIN/END463954
-Ref: Using BEGIN/END-Footnote-1466862
-Node: I/O And BEGIN/END466972
-Node: BEGINFILE/ENDFILE469454
-Node: Empty472884
-Node: Using Shell Variables473201
-Node: Action Overview475537
-Node: Statements477973
-Node: If Statement479869
-Node: While Statement481432
-Node: Do Statement483520
-Node: For Statement484704
-Node: Switch Statement488059
-Node: Break Statement490608
-Node: Continue Statement492800
-Node: Next Statement494731
-Node: Nextfile Statement497210
-Node: Exit Statement500063
-Node: Built-in Variables502590
-Node: User-modified503767
-Node: Auto-set511974
-Ref: Auto-set-Footnote-1530058
-Ref: Auto-set-Footnote-2530276
-Node: ARGC and ARGV530332
-Node: Pattern Action Summary534761
-Node: Arrays537367
-Node: Array Basics538740
-Node: Array Intro539588
-Ref: figure-array-elements541599
-Ref: Array Intro-Footnote-1544452
-Node: Reference to Elements544584
-Node: Assigning Elements547104
-Node: Array Example547599
-Node: Scanning an Array549561
-Node: Controlling Scanning552656
-Ref: Controlling Scanning-Footnote-1559291
-Node: Numeric Array Subscripts559615
-Node: Uninitialized Subscripts561883
-Node: Delete563556
-Ref: Delete-Footnote-1566368
-Node: Multidimensional566425
-Node: Multiscanning569628
-Node: Arrays of Arrays571295
-Node: Arrays Summary575599
-Node: Functions577786
-Node: Built-in578918
-Node: Calling Built-in580107
-Node: Boolean Functions582147
-Node: Numeric Functions582709
-Ref: Numeric Functions-Footnote-1586894
-Ref: Numeric Functions-Footnote-2587577
-Ref: Numeric Functions-Footnote-3587629
-Node: String Functions587905
-Ref: String Functions-Footnote-1614356
-Ref: String Functions-Footnote-2614488
-Ref: String Functions-Footnote-3614744
-Node: Gory Details614831
-Ref: table-sub-escapes616840
-Ref: table-sub-proposed618471
-Ref: table-posix-sub619966
-Ref: table-gensub-escapes621639
-Ref: Gory Details-Footnote-1622558
-Node: I/O Functions622712
-Ref: table-system-return-values629388
-Ref: I/O Functions-Footnote-1631550
-Ref: I/O Functions-Footnote-2631698
-Node: Time Functions631818
-Ref: Time Functions-Footnote-1643530
-Ref: Time Functions-Footnote-2643598
-Ref: Time Functions-Footnote-3643760
-Ref: Time Functions-Footnote-4643871
-Ref: Time Functions-Footnote-5643987
-Ref: Time Functions-Footnote-6644214
-Node: Bitwise Functions644492
-Ref: table-bitwise-ops645090
-Ref: Bitwise Functions-Footnote-1651332
-Ref: Bitwise Functions-Footnote-2651509
-Node: Type Functions651704
-Node: I18N Functions653875
-Node: User-defined655610
-Node: Definition Syntax656356
-Ref: Definition Syntax-Footnote-1662174
-Node: Function Example662249
-Ref: Function Example-Footnote-1665228
-Node: Function Calling665250
-Node: Calling A Function665842
-Node: Variable Scope666812
-Node: Pass By Value/Reference669866
-Node: Function Caveats672594
-Ref: Function Caveats-Footnote-1674685
-Node: Return Statement674805
-Node: Dynamic Typing677837
-Node: Dynamic Typing Awk678415
-Node: Dynamic Typing Gawk680553
-Node: Indirect Calls683923
-Node: Functions Summary695060
-Node: Library Functions698026
-Ref: Library Functions-Footnote-1701574
-Ref: Library Functions-Footnote-2701719
-Node: Library Names701894
-Ref: Library Names-Footnote-1705665
-Ref: Library Names-Footnote-2705892
-Node: General Functions705986
-Node: Strtonum Function707256
-Node: Assert Function710338
-Node: Round Function713788
-Node: Cliff Random Function715360
-Node: Ordinal Functions716384
-Ref: Ordinal Functions-Footnote-1719487
-Ref: Ordinal Functions-Footnote-2719739
-Node: Join Function719953
-Ref: Join Function-Footnote-1721751
-Node: Getlocaltime Function721955
-Node: Readfile Function725729
-Node: Shell Quoting727758
-Node: Isnumeric Function729214
-Node: To CSV Function730650
-Node: Data File Management732742
-Node: Filetrans Function733374
-Node: Rewind Function737650
-Node: File Checking739621
-Ref: File Checking-Footnote-1740987
-Node: Empty Files741192
-Node: Ignoring Assigns743255
-Node: Getopt Function744829
-Ref: Getopt Function-Footnote-1760647
-Node: Passwd Functions760859
-Ref: Passwd Functions-Footnote-1769994
-Node: Group Functions770082
-Ref: Group Functions-Footnote-1778206
-Node: Walking Arrays778417
-Node: Library Functions Summary781463
-Node: Library Exercises782883
-Node: Sample Programs783368
-Node: Running Examples784150
-Node: Clones784902
-Node: Cut Program786170
-Node: Egrep Program796594
-Node: Id Program805893
-Node: Split Program815985
-Ref: Split Program-Footnote-1826198
-Node: Tee Program826383
-Node: Uniq Program829289
-Node: Wc Program837149
-Node: Bytes vs. Characters837544
-Node: Using extensions839144
-Node: wc program839922
-Node: Miscellaneous Programs844915
-Node: Dupword Program846140
-Node: Alarm Program848189
-Node: Translate Program853092
-Ref: Translate Program-Footnote-1857801
-Node: Labels Program858079
-Ref: Labels Program-Footnote-1861514
-Node: Word Sorting861598
-Node: History Sorting865772
-Node: Extract Program868045
-Node: Simple Sed876298
-Node: Igawk Program879508
-Ref: Igawk Program-Footnote-1894718
-Ref: Igawk Program-Footnote-2894924
-Ref: Igawk Program-Footnote-3895054
-Node: Anagram Program895181
-Node: Signature Program898267
-Node: Programs Summary899517
-Node: Programs Exercises900771
-Ref: Programs Exercises-Footnote-1905600
-Node: Advanced Features905686
-Node: Nondecimal Data908167
-Node: Boolean Typed Values909797
-Node: Array Sorting911754
-Node: Controlling Array Traversal912483
-Ref: Controlling Array Traversal-Footnote-1920986
-Node: Array Sorting Functions921108
-Ref: Array Sorting Functions-Footnote-1927205
-Node: Two-way I/O927413
-Ref: Two-way I/O-Footnote-1935384
-Ref: Two-way I/O-Footnote-2935575
-Node: TCP/IP Networking935657
-Node: Profiling938825
-Node: Persistent Memory948495
-Ref: Persistent Memory-Footnote-1958067
-Node: Extension Philosophy958198
-Node: Advanced Features Summary959725
-Node: Internationalization961991
-Node: I18N and L10N963693
-Node: Explaining gettext964388
-Ref: Explaining gettext-Footnote-1970524
-Ref: Explaining gettext-Footnote-2970717
-Node: Programmer i18n970882
-Ref: Programmer i18n-Footnote-1975994
-Node: Translator i18n976043
-Node: String Extraction976873
-Ref: String Extraction-Footnote-1978049
-Node: Printf Ordering978147
-Ref: Printf Ordering-Footnote-1981005
-Node: I18N Portability981073
-Ref: I18N Portability-Footnote-1983633
-Node: I18N Example983700
-Ref: I18N Example-Footnote-1987094
-Ref: I18N Example-Footnote-2987167
-Node: Gawk I18N987284
-Node: I18N Summary987938
-Node: Debugger989335
-Node: Debugging990355
-Node: Debugging Concepts990804
-Node: Debugging Terms992621
-Node: Awk Debugging995224
-Ref: Awk Debugging-Footnote-1996197
-Node: Sample Debugging Session996333
-Node: Debugger Invocation996883
-Node: Finding The Bug998508
-Node: List of Debugger Commands1005140
-Node: Breakpoint Control1006517
-Node: Debugger Execution Control1010339
-Node: Viewing And Changing Data1013813
-Node: Execution Stack1017547
-Node: Debugger Info1019228
-Node: Miscellaneous Debugger Commands1023523
-Node: Readline Support1028764
-Node: Limitations1029708
-Node: Debugging Summary1032332
-Node: Namespaces1033631
-Node: Global Namespace1034758
-Node: Qualified Names1036192
-Node: Default Namespace1037227
-Node: Changing The Namespace1038000
-Node: Naming Rules1039682
-Node: Internal Name Management1041637
-Node: Namespace Example1042707
-Node: Namespace And Features1045284
-Node: Namespace Summary1046739
-Node: Arbitrary Precision Arithmetic1048250
-Node: Computer Arithmetic1049769
-Ref: table-numeric-ranges1053694
-Ref: table-floating-point-ranges1054191
-Ref: Computer Arithmetic-Footnote-11054849
-Node: Math Definitions1054906
-Ref: table-ieee-formats1057938
-Node: MPFR features1058511
-Node: MPFR On Parole1058964
-Ref: MPFR On Parole-Footnote-11059805
-Node: MPFR Intro1059964
-Node: FP Math Caution1061648
-Ref: FP Math Caution-Footnote-11062720
-Node: Inexactness of computations1063093
-Node: Inexact representation1064124
-Node: Comparing FP Values1065505
-Node: Errors accumulate1066763
-Node: Strange values1068228
-Ref: Strange values-Footnote-11070882
-Node: Getting Accuracy1070987
-Node: Try To Round1073724
-Node: Setting precision1074631
-Ref: table-predefined-precision-strings1075336
-Node: Setting the rounding mode1077220
-Ref: table-gawk-rounding-modes1077602
-Ref: Setting the rounding mode-Footnote-11081654
-Node: Arbitrary Precision Integers1081839
-Ref: Arbitrary Precision Integers-Footnote-11085049
-Node: Checking for MPFR1085202
-Node: POSIX Floating Point Problems1086692
-Ref: POSIX Floating Point Problems-Footnote-11091512
-Node: Floating point summary1091550
-Node: Dynamic Extensions1093806
-Node: Extension Intro1095403
-Node: Plugin License1096705
-Node: Extension Mechanism Outline1097518
-Ref: figure-load-extension1097969
-Ref: figure-register-new-function1099547
-Ref: figure-call-new-function1100656
-Node: Extension API Description1102771
-Node: Extension API Functions Introduction1104500
-Ref: table-api-std-headers1106394
-Node: General Data Types1110835
-Ref: General Data Types-Footnote-11119981
-Node: Memory Allocation Functions1120284
-Ref: Memory Allocation Functions-Footnote-11125001
-Node: Constructor Functions1125100
-Node: API Ownership of MPFR and GMP Values1129001
-Node: Registration Functions1130554
-Node: Extension Functions1131258
-Node: Exit Callback Functions1136832
-Node: Extension Version String1138146
-Node: Input Parsers1138841
-Node: Output Wrappers1153460
-Node: Two-way processors1158302
-Node: Printing Messages1160655
-Ref: Printing Messages-Footnote-11161866
-Node: Updating ERRNO1162019
-Node: Requesting Values1162818
-Ref: table-value-types-returned1163571
-Node: Accessing Parameters1165630
-Node: Symbol Table Access1166911
-Node: Symbol table by name1167423
-Ref: Symbol table by name-Footnote-11170624
-Node: Symbol table by cookie1170756
-Ref: Symbol table by cookie-Footnote-11175025
-Node: Cached values1175089
-Ref: Cached values-Footnote-11178721
-Node: Array Manipulation1178878
-Ref: Array Manipulation-Footnote-11179977
-Node: Array Data Types1180014
-Ref: Array Data Types-Footnote-11182832
-Node: Array Functions1182928
-Node: Flattening Arrays1187957
-Node: Creating Arrays1195005
-Node: Redirection API1199847
-Node: Extension API Variables1202864
-Node: Extension Versioning1203587
-Ref: gawk-api-version1204016
-Node: Extension GMP/MPFR Versioning1205803
-Node: Extension API Informational Variables1207507
-Node: Extension API Boilerplate1208760
-Node: Changes from API V11212890
-Node: Finding Extensions1214522
-Node: Extension Example1215097
-Node: Internal File Description1215919
-Node: Internal File Ops1220211
-Ref: Internal File Ops-Footnote-11231761
-Node: Using Internal File Ops1231909
-Ref: Using Internal File Ops-Footnote-11234342
-Node: Extension Samples1234620
-Node: Extension Sample File Functions1236189
-Node: Extension Sample Fnmatch1244314
-Node: Extension Sample Fork1245909
-Node: Extension Sample Inplace1247185
-Node: Extension Sample Ord1251287
-Node: Extension Sample Readdir1252163
-Ref: table-readdir-file-types1252952
-Node: Extension Sample Revout1254308
-Node: Extension Sample Rev2way1254905
-Node: Extension Sample Read write array1255657
-Node: Extension Sample Readfile1258931
-Node: Extension Sample Time1260062
-Node: Extension Sample API Tests1262062
-Node: gawkextlib1262570
-Node: Extension summary1265602
-Node: Extension Exercises1269450
-Node: Language History1270720
-Node: V7/SVR3.11272432
-Node: SVR41274782
-Node: POSIX1276314
-Node: BTL1277739
-Node: POSIX/GNU1278506
-Ref: Gawk Extension Functions1281896
-Node: Feature History1285320
-Node: Common Extensions1305161
-Node: Ranges and Locales1306636
-Ref: Ranges and Locales-Footnote-11311421
-Ref: Ranges and Locales-Footnote-21311448
-Ref: Ranges and Locales-Footnote-31311683
-Node: Contributors1311906
-Node: History summary1318097
-Node: Installation1319539
-Node: Gawk Distribution1320503
-Node: Getting1320995
-Node: Extracting1321994
-Node: Distribution contents1323700
-Node: Unix Installation1331590
-Node: Quick Installation1332410
-Node: Compiling with MPFR1334950
-Node: Shell Startup Files1335656
-Node: Additional Configuration Options1336813
-Node: Configuration Philosophy1339196
-Node: Compiling from Git1341696
-Node: Building the Documentation1342255
-Node: Non-Unix Installation1343667
-Node: PC Installation1344143
-Node: PC Binary Installation1345012
-Node: PC Compiling1345905
-Node: PC Using1347083
-Node: Cygwin1350799
-Node: MSYS1352051
-Node: OpenVMS Installation1352677
-Node: OpenVMS Compilation1353358
-Ref: OpenVMS Compilation-Footnote-11354841
-Node: OpenVMS Dynamic Extensions1354899
-Node: OpenVMS Installation Details1356535
-Node: OpenVMS Running1358966
-Node: OpenVMS GNV1363103
-Node: Bugs1363858
-Node: Bug definition1364778
-Node: Bug address1368379
-Node: Usenet1371948
-Node: Performance bugs1373161
-Node: Asking for help1376165
-Node: Maintainers1378152
-Node: Other Versions1379179
-Node: Installation summary1389168
-Node: Notes1390550
-Node: Compatibility Mode1391360
-Node: Additions1392182
-Node: Accessing The Source1393127
-Node: Adding Code1394658
-Node: New Ports1401769
-Node: Derived Files1406272
-Ref: Derived Files-Footnote-11412083
-Ref: Derived Files-Footnote-21412118
-Ref: Derived Files-Footnote-31412729
-Node: Future Extensions1412843
-Node: Implementation Limitations1413513
-Node: Extension Design1414755
-Node: Old Extension Problems1415915
-Ref: Old Extension Problems-Footnote-11417487
-Node: Extension New Mechanism Goals1417548
-Ref: Extension New Mechanism Goals-Footnote-11421018
-Node: Extension Other Design Decisions1421219
-Node: Extension Future Growth1423416
-Node: Notes summary1424036
-Node: Basic Concepts1425246
-Node: Basic High Level1425931
-Ref: figure-general-flow1426213
-Ref: figure-process-flow1426915
-Ref: Basic High Level-Footnote-11430285
-Node: Basic Data Typing1430474
-Node: Glossary1433882
-Node: Copying1466760
-Node: GNU Free Documentation License1504318
-Node: Index1529441
+Node: Foreword346973
+Node: Foreword451547
+Node: Preface53091
+Ref: Preface-Footnote-156077
+Ref: Preface-Footnote-256186
+Ref: Preface-Footnote-356420
+Node: History56566
+Node: Names59180
+Ref: Names-Footnote-160334
+Node: This Manual60497
+Ref: This Manual-Footnote-167427
+Node: Conventions67535
+Node: Manual History69964
+Ref: Manual History-Footnote-172989
+Ref: Manual History-Footnote-273030
+Node: How To Contribute73104
+Node: Acknowledgments74050
+Node: Getting Started79039
+Node: Running gawk81566
+Node: One-shot82784
+Node: Read Terminal84083
+Node: Long86137
+Node: Executable Scripts87787
+Ref: Executable Scripts-Footnote-190557
+Node: Comments90664
+Node: Quoting93194
+Node: DOS Quoting98838
+Node: Sample Data Files100918
+Node: Very Simple103553
+Node: Two Rules109807
+Node: More Complex111759
+Node: Statements/Lines114179
+Ref: Statements/Lines-Footnote-1119691
+Node: Other Features119980
+Node: When120948
+Ref: When-Footnote-1122750
+Node: Intro Summary122815
+Node: Invoking Gawk123769
+Node: Command Line125331
+Node: Options126181
+Ref: Options-Footnote-1145523
+Ref: Options-Footnote-2145758
+Node: Other Arguments145783
+Node: Naming Standard Input149948
+Node: Environment Variables151218
+Node: AWKPATH Variable151792
+Ref: AWKPATH Variable-Footnote-1155376
+Ref: AWKPATH Variable-Footnote-2155410
+Node: AWKLIBPATH Variable155801
+Ref: AWKLIBPATH Variable-Footnote-1157576
+Node: Other Environment Variables157971
+Node: Exit Status162447
+Node: Include Files163160
+Node: Loading Shared Libraries167220
+Node: Obsolete168712
+Node: Undocumented169460
+Node: Invoking Summary169757
+Node: Regexp172782
+Node: Regexp Usage174276
+Node: Escape Sequences176377
+Ref: Escape Sequences-Footnote-1183912
+Node: Regexp Operators183990
+Node: Regexp Operator Details184483
+Ref: Regexp Operator Details-Footnote-1192494
+Node: Interval Expressions192653
+Ref: Interval Expressions-Footnote-1194920
+Node: Bracket Expressions195018
+Ref: table-char-classes197574
+Node: Leftmost Longest201072
+Node: Computed Regexps202428
+Node: GNU Regexp Operators205943
+Node: Case-sensitivity211040
+Ref: Case-sensitivity-Footnote-1213990
+Ref: Case-sensitivity-Footnote-2214233
+Node: Regexp Summary214345
+Node: Reading Files215867
+Node: Records218186
+Node: awk split records219461
+Node: gawk split records224343
+Ref: gawk split records-Footnote-1229631
+Node: Fields229668
+Ref: Fields-Footnote-1232584
+Node: Nonconstant Fields232704
+Ref: Nonconstant Fields-Footnote-1235012
+Node: Changing Fields235228
+Node: Field Separators241526
+Node: Default Field Splitting244395
+Node: Regexp Field Splitting245537
+Node: Single Character Fields249366
+Node: Comma Separated Fields250455
+Ref: table-csv-examples251859
+Node: Command Line Field Separator254158
+Node: Full Line Fields257534
+Ref: Full Line Fields-Footnote-1259112
+Ref: Full Line Fields-Footnote-2259158
+Node: Field Splitting Summary259263
+Node: Constant Size261580
+Node: Fixed width data262324
+Node: Skipping intervening265839
+Node: Allowing trailing data266641
+Node: Fields with fixed data267702
+Node: Splitting By Content269324
+Ref: Splitting By Content-Footnote-1274728
+Node: FS versus FPAT274891
+Node: Testing field creation276074
+Node: Multiple Line277848
+Node: Getline284317
+Node: Plain Getline286905
+Node: Getline/Variable289553
+Node: Getline/File290749
+Node: Getline/Variable/File292197
+Ref: Getline/Variable/File-Footnote-1293842
+Node: Getline/Pipe293938
+Node: Getline/Variable/Pipe296746
+Node: Getline/Coprocess297929
+Node: Getline/Variable/Coprocess299252
+Node: Getline Notes300018
+Node: Getline Summary303995
+Ref: table-getline-variants304439
+Node: Read Timeout305343
+Ref: Read Timeout-Footnote-1309305
+Node: Retrying Input309363
+Node: Command-line directories310630
+Node: Input Summary311568
+Node: Input Exercises314948
+Node: Printing315386
+Node: Print317329
+Node: Print Examples318830
+Node: Output Separators321675
+Node: OFMT323782
+Node: Printf325495
+Node: Basic Printf326300
+Node: Control Letters327935
+Node: Format Modifiers333381
+Node: Printf Examples339653
+Node: Redirection342194
+Node: Special FD349966
+Ref: Special FD-Footnote-1353264
+Node: Special Files353342
+Node: Other Inherited Files353971
+Node: Special Network355036
+Node: Special Caveats355924
+Node: Close Files And Pipes356907
+Ref: Close Files And Pipes-Footnote-1363031
+Node: Close Return Value363179
+Ref: table-close-pipe-return-values364450
+Ref: Close Return Value-Footnote-1365281
+Node: Noflush365437
+Node: Nonfatal366945
+Node: Output Summary369360
+Node: Output Exercises370646
+Node: Expressions371337
+Node: Values372537
+Node: Constants373215
+Node: Scalar Constants373910
+Ref: Scalar Constants-Footnote-1376486
+Ref: Scalar Constants-Footnote-2376736
+Node: Nondecimal-numbers376816
+Node: Regexp Constants379929
+Node: Using Constant Regexps380475
+Node: Standard Regexp Constants381121
+Node: Strong Regexp Constants384417
+Node: Variables388260
+Node: Using Variables388925
+Node: Assignment Options390899
+Node: Conversion393450
+Node: Strings And Numbers393982
+Ref: Strings And Numbers-Footnote-1397192
+Node: Locale influences conversions397301
+Ref: table-locale-affects400139
+Node: All Operators400781
+Node: Arithmetic Ops401422
+Node: Concatenation404245
+Ref: Concatenation-Footnote-1407181
+Node: Assignment Ops407300
+Ref: table-assign-ops412427
+Node: Increment Ops413808
+Node: Truth Values and Conditions417399
+Node: Truth Values418493
+Node: Typing and Comparison419573
+Node: Variable Typing420405
+Ref: Variable Typing-Footnote-1427049
+Ref: Variable Typing-Footnote-2427129
+Node: Comparison Operators427210
+Ref: table-relational-ops427637
+Node: POSIX String Comparison431313
+Ref: POSIX String Comparison-Footnote-1433070
+Ref: POSIX String Comparison-Footnote-2433213
+Node: Boolean Ops433297
+Ref: Boolean Ops-Footnote-1437971
+Node: Conditional Exp438067
+Node: Function Calls439847
+Node: Precedence443794
+Node: Locales447657
+Node: Expressions Summary449333
+Node: Patterns and Actions451988
+Node: Pattern Overview453124
+Node: Regexp Patterns454849
+Node: Expression Patterns455395
+Node: Ranges459300
+Node: BEGIN/END462474
+Node: Using BEGIN/END463283
+Ref: Using BEGIN/END-Footnote-1466191
+Node: I/O And BEGIN/END466301
+Node: BEGINFILE/ENDFILE468783
+Node: Empty472213
+Node: Using Shell Variables472530
+Node: Action Overview474866
+Node: Statements477302
+Node: If Statement479198
+Node: While Statement480761
+Node: Do Statement482849
+Node: For Statement484033
+Node: Switch Statement487388
+Node: Break Statement489937
+Node: Continue Statement492129
+Node: Next Statement494060
+Node: Nextfile Statement496539
+Node: Exit Statement499392
+Node: Built-in Variables501919
+Node: User-modified503096
+Node: Auto-set511303
+Ref: Auto-set-Footnote-1529387
+Ref: Auto-set-Footnote-2529605
+Node: ARGC and ARGV529661
+Node: Pattern Action Summary534090
+Node: Arrays536696
+Node: Array Basics538069
+Node: Array Intro538917
+Ref: figure-array-elements540928
+Ref: Array Intro-Footnote-1543781
+Node: Reference to Elements543913
+Node: Assigning Elements546433
+Node: Array Example546928
+Node: Scanning an Array548890
+Node: Controlling Scanning551985
+Ref: Controlling Scanning-Footnote-1558620
+Node: Numeric Array Subscripts558944
+Node: Uninitialized Subscripts561212
+Node: Delete562885
+Ref: Delete-Footnote-1565697
+Node: Multidimensional565754
+Node: Multiscanning568957
+Node: Arrays of Arrays570624
+Node: Arrays Summary574928
+Node: Functions577115
+Node: Built-in578247
+Node: Calling Built-in579436
+Node: Boolean Functions581476
+Node: Numeric Functions582038
+Ref: Numeric Functions-Footnote-1586223
+Ref: Numeric Functions-Footnote-2586906
+Ref: Numeric Functions-Footnote-3586958
+Node: String Functions587234
+Ref: String Functions-Footnote-1613685
+Ref: String Functions-Footnote-2613817
+Ref: String Functions-Footnote-3614073
+Node: Gory Details614160
+Ref: table-sub-escapes616169
+Ref: table-sub-proposed617800
+Ref: table-posix-sub619295
+Ref: table-gensub-escapes620968
+Ref: Gory Details-Footnote-1621887
+Node: I/O Functions622041
+Ref: table-system-return-values628717
+Ref: I/O Functions-Footnote-1630879
+Ref: I/O Functions-Footnote-2631027
+Node: Time Functions631147
+Ref: Time Functions-Footnote-1642859
+Ref: Time Functions-Footnote-2642927
+Ref: Time Functions-Footnote-3643089
+Ref: Time Functions-Footnote-4643200
+Ref: Time Functions-Footnote-5643316
+Ref: Time Functions-Footnote-6643543
+Node: Bitwise Functions643821
+Ref: table-bitwise-ops644419
+Ref: Bitwise Functions-Footnote-1650661
+Ref: Bitwise Functions-Footnote-2650838
+Node: Type Functions651033
+Node: I18N Functions653204
+Node: User-defined654939
+Node: Definition Syntax655685
+Ref: Definition Syntax-Footnote-1661503
+Node: Function Example661578
+Ref: Function Example-Footnote-1664557
+Node: Function Calling664579
+Node: Calling A Function665171
+Node: Variable Scope666141
+Node: Pass By Value/Reference669195
+Node: Function Caveats671923
+Ref: Function Caveats-Footnote-1674014
+Node: Return Statement674134
+Node: Dynamic Typing677166
+Node: Dynamic Typing Awk677744
+Node: Dynamic Typing Gawk679882
+Node: Indirect Calls683252
+Node: Functions Summary694389
+Node: Library Functions697355
+Ref: Library Functions-Footnote-1700903
+Ref: Library Functions-Footnote-2701048
+Node: Library Names701223
+Ref: Library Names-Footnote-1704994
+Ref: Library Names-Footnote-2705221
+Node: General Functions705315
+Node: Strtonum Function706585
+Node: Assert Function709667
+Node: Round Function713117
+Node: Cliff Random Function714689
+Node: Ordinal Functions715713
+Ref: Ordinal Functions-Footnote-1718816
+Ref: Ordinal Functions-Footnote-2719068
+Node: Join Function719282
+Ref: Join Function-Footnote-1721080
+Node: Getlocaltime Function721284
+Node: Readfile Function725058
+Node: Shell Quoting727087
+Node: Isnumeric Function728543
+Node: To CSV Function729979
+Node: Data File Management732071
+Node: Filetrans Function732703
+Node: Rewind Function736979
+Node: File Checking738950
+Ref: File Checking-Footnote-1740316
+Node: Empty Files740521
+Node: Ignoring Assigns742584
+Node: Getopt Function744158
+Ref: Getopt Function-Footnote-1759976
+Node: Passwd Functions760188
+Ref: Passwd Functions-Footnote-1769323
+Node: Group Functions769411
+Ref: Group Functions-Footnote-1777535
+Node: Walking Arrays777746
+Node: Library Functions Summary780792
+Node: Library Exercises782212
+Node: Sample Programs782697
+Node: Running Examples783479
+Node: Clones784231
+Node: Cut Program785499
+Node: Egrep Program795923
+Node: Id Program805222
+Node: Split Program815314
+Ref: Split Program-Footnote-1825527
+Node: Tee Program825712
+Node: Uniq Program828618
+Node: Wc Program836478
+Node: Bytes vs. Characters836873
+Node: Using extensions838473
+Node: wc program839251
+Node: Miscellaneous Programs844244
+Node: Dupword Program845469
+Node: Alarm Program847518
+Node: Translate Program852421
+Ref: Translate Program-Footnote-1857130
+Node: Labels Program857408
+Ref: Labels Program-Footnote-1860843
+Node: Word Sorting860927
+Node: History Sorting865101
+Node: Extract Program867374
+Node: Simple Sed875627
+Node: Igawk Program878837
+Ref: Igawk Program-Footnote-1894047
+Ref: Igawk Program-Footnote-2894253
+Ref: Igawk Program-Footnote-3894383
+Node: Anagram Program894510
+Node: Signature Program897596
+Node: Programs Summary898846
+Node: Programs Exercises900100
+Ref: Programs Exercises-Footnote-1904929
+Node: Advanced Features905015
+Node: Nondecimal Data907496
+Node: Boolean Typed Values909126
+Node: Array Sorting911083
+Node: Controlling Array Traversal911812
+Ref: Controlling Array Traversal-Footnote-1920315
+Node: Array Sorting Functions920437
+Ref: Array Sorting Functions-Footnote-1926534
+Node: Two-way I/O926742
+Ref: Two-way I/O-Footnote-1934713
+Ref: Two-way I/O-Footnote-2934904
+Node: TCP/IP Networking934986
+Node: Profiling938154
+Node: Persistent Memory947824
+Ref: Persistent Memory-Footnote-1957396
+Node: Extension Philosophy957527
+Node: Advanced Features Summary959054
+Node: Internationalization961320
+Node: I18N and L10N963022
+Node: Explaining gettext963717
+Ref: Explaining gettext-Footnote-1969853
+Ref: Explaining gettext-Footnote-2970046
+Node: Programmer i18n970211
+Ref: Programmer i18n-Footnote-1975323
+Node: Translator i18n975372
+Node: String Extraction976202
+Ref: String Extraction-Footnote-1977378
+Node: Printf Ordering977476
+Ref: Printf Ordering-Footnote-1980334
+Node: I18N Portability980402
+Ref: I18N Portability-Footnote-1982962
+Node: I18N Example983029
+Ref: I18N Example-Footnote-1986423
+Ref: I18N Example-Footnote-2986496
+Node: Gawk I18N986613
+Node: I18N Summary987267
+Node: Debugger988664
+Node: Debugging989684
+Node: Debugging Concepts990133
+Node: Debugging Terms991950
+Node: Awk Debugging994553
+Ref: Awk Debugging-Footnote-1995526
+Node: Sample Debugging Session995662
+Node: Debugger Invocation996212
+Node: Finding The Bug997837
+Node: List of Debugger Commands1004469
+Node: Breakpoint Control1005846
+Node: Debugger Execution Control1009668
+Node: Viewing And Changing Data1013142
+Node: Execution Stack1016876
+Node: Debugger Info1018557
+Node: Miscellaneous Debugger Commands1022852
+Node: Readline Support1028093
+Node: Limitations1029037
+Node: Debugging Summary1031661
+Node: Namespaces1032960
+Node: Global Namespace1034087
+Node: Qualified Names1035521
+Node: Default Namespace1036556
+Node: Changing The Namespace1037329
+Node: Naming Rules1039011
+Node: Internal Name Management1040966
+Node: Namespace Example1042036
+Node: Namespace And Features1044613
+Node: Namespace Summary1046068
+Node: Arbitrary Precision Arithmetic1047579
+Node: Computer Arithmetic1049098
+Ref: table-numeric-ranges1053023
+Ref: table-floating-point-ranges1053520
+Ref: Computer Arithmetic-Footnote-11054178
+Node: Math Definitions1054235
+Ref: table-ieee-formats1057267
+Node: MPFR features1057840
+Node: MPFR On Parole1058293
+Ref: MPFR On Parole-Footnote-11059134
+Node: MPFR Intro1059293
+Node: FP Math Caution1060977
+Ref: FP Math Caution-Footnote-11062049
+Node: Inexactness of computations1062422
+Node: Inexact representation1063453
+Node: Comparing FP Values1064834
+Node: Errors accumulate1066092
+Node: Strange values1067557
+Ref: Strange values-Footnote-11070211
+Node: Getting Accuracy1070316
+Node: Try To Round1073053
+Node: Setting precision1073960
+Ref: table-predefined-precision-strings1074665
+Node: Setting the rounding mode1076549
+Ref: table-gawk-rounding-modes1076931
+Ref: Setting the rounding mode-Footnote-11080983
+Node: Arbitrary Precision Integers1081168
+Ref: Arbitrary Precision Integers-Footnote-11084378
+Node: Checking for MPFR1084531
+Node: POSIX Floating Point Problems1086021
+Ref: POSIX Floating Point Problems-Footnote-11090841
+Node: Floating point summary1090879
+Node: Dynamic Extensions1093135
+Node: Extension Intro1094732
+Node: Plugin License1096034
+Node: Extension Mechanism Outline1096847
+Ref: figure-load-extension1097298
+Ref: figure-register-new-function1098876
+Ref: figure-call-new-function1099985
+Node: Extension API Description1102100
+Node: Extension API Functions Introduction1103829
+Ref: table-api-std-headers1105723
+Node: General Data Types1110164
+Ref: General Data Types-Footnote-11119310
+Node: Memory Allocation Functions1119613
+Ref: Memory Allocation Functions-Footnote-11124330
+Node: Constructor Functions1124429
+Node: API Ownership of MPFR and GMP Values1128330
+Node: Registration Functions1129883
+Node: Extension Functions1130587
+Node: Exit Callback Functions1136161
+Node: Extension Version String1137475
+Node: Input Parsers1138170
+Node: Output Wrappers1152789
+Node: Two-way processors1157631
+Node: Printing Messages1159984
+Ref: Printing Messages-Footnote-11161195
+Node: Updating ERRNO1161348
+Node: Requesting Values1162147
+Ref: table-value-types-returned1162900
+Node: Accessing Parameters1164959
+Node: Symbol Table Access1166240
+Node: Symbol table by name1166752
+Ref: Symbol table by name-Footnote-11169953
+Node: Symbol table by cookie1170085
+Ref: Symbol table by cookie-Footnote-11174354
+Node: Cached values1174418
+Ref: Cached values-Footnote-11178050
+Node: Array Manipulation1178207
+Ref: Array Manipulation-Footnote-11179306
+Node: Array Data Types1179343
+Ref: Array Data Types-Footnote-11182161
+Node: Array Functions1182257
+Node: Flattening Arrays1187286
+Node: Creating Arrays1194334
+Node: Redirection API1199176
+Node: Extension API Variables1202193
+Node: Extension Versioning1202916
+Ref: gawk-api-version1203345
+Node: Extension GMP/MPFR Versioning1205132
+Node: Extension API Informational Variables1206836
+Node: Extension API Boilerplate1208089
+Node: Changes from API V11212219
+Node: Finding Extensions1213851
+Node: Extension Example1214426
+Node: Internal File Description1215248
+Node: Internal File Ops1219540
+Ref: Internal File Ops-Footnote-11231090
+Node: Using Internal File Ops1231238
+Ref: Using Internal File Ops-Footnote-11233671
+Node: Extension Samples1233949
+Node: Extension Sample File Functions1235518
+Node: Extension Sample Fnmatch1243643
+Node: Extension Sample Fork1245238
+Node: Extension Sample Inplace1246514
+Node: Extension Sample Ord1250616
+Node: Extension Sample Readdir1251492
+Ref: table-readdir-file-types1252281
+Node: Extension Sample Revout1253637
+Node: Extension Sample Rev2way1254234
+Node: Extension Sample Read write array1254986
+Node: Extension Sample Readfile1258260
+Node: Extension Sample Time1259391
+Node: Extension Sample API Tests1261391
+Node: gawkextlib1261899
+Node: Extension summary1264931
+Node: Extension Exercises1268779
+Node: Language History1270049
+Node: V7/SVR3.11271761
+Node: SVR41274111
+Node: POSIX1275643
+Node: BTL1277068
+Node: POSIX/GNU1277835
+Ref: Gawk Extension Functions1281225
+Node: Feature History1284649
+Node: Common Extensions1304490
+Node: Ranges and Locales1305965
+Ref: Ranges and Locales-Footnote-11310750
+Ref: Ranges and Locales-Footnote-21310777
+Ref: Ranges and Locales-Footnote-31311012
+Node: Contributors1311235
+Node: History summary1317426
+Node: Installation1318868
+Node: Gawk Distribution1319832
+Node: Getting1320324
+Node: Extracting1321323
+Node: Distribution contents1323029
+Node: Unix Installation1330919
+Node: Quick Installation1331739
+Node: Compiling with MPFR1334279
+Node: Shell Startup Files1334985
+Node: Additional Configuration Options1336142
+Node: Configuration Philosophy1338525
+Node: Compiling from Git1341025
+Node: Building the Documentation1341584
+Node: Non-Unix Installation1342996
+Node: PC Installation1343472
+Node: PC Binary Installation1344341
+Node: PC Compiling1345234
+Node: PC Using1346412
+Node: Cygwin1350128
+Node: MSYS1351380
+Node: OpenVMS Installation1352006
+Node: OpenVMS Compilation1352687
+Ref: OpenVMS Compilation-Footnote-11354170
+Node: OpenVMS Dynamic Extensions1354228
+Node: OpenVMS Installation Details1355864
+Node: OpenVMS Running1358295
+Node: OpenVMS GNV1362432
+Node: Bugs1363187
+Node: Bug definition1364107
+Node: Bug address1367708
+Node: Usenet1371277
+Node: Performance bugs1372490
+Node: Asking for help1375494
+Node: Maintainers1377481
+Node: Other Versions1378508
+Node: Installation summary1388497
+Node: Notes1389879
+Node: Compatibility Mode1390689
+Node: Additions1391511
+Node: Accessing The Source1392456
+Node: Adding Code1393987
+Node: New Ports1401098
+Node: Derived Files1405601
+Ref: Derived Files-Footnote-11411412
+Ref: Derived Files-Footnote-21411447
+Ref: Derived Files-Footnote-31412058
+Node: Future Extensions1412172
+Node: Implementation Limitations1412842
+Node: Extension Design1414084
+Node: Old Extension Problems1415244
+Ref: Old Extension Problems-Footnote-11416816
+Node: Extension New Mechanism Goals1416877
+Ref: Extension New Mechanism Goals-Footnote-11420347
+Node: Extension Other Design Decisions1420548
+Node: Extension Future Growth1422745
+Node: Notes summary1423365
+Node: Basic Concepts1424575
+Node: Basic High Level1425260
+Ref: figure-general-flow1425542
+Ref: figure-process-flow1426244
+Ref: Basic High Level-Footnote-11429614
+Node: Basic Data Typing1429803
+Node: Glossary1433211
+Node: Copying1466089
+Node: GNU Free Documentation License1503647
+Node: Index1528770
End Tag Table
diff --git a/doc/gawk.texi b/doc/gawk.texi
index 1fbc9b2c..7b653bd7 100644
--- a/doc/gawk.texi
+++ b/doc/gawk.texi
@@ -596,7 +596,6 @@ particular records in a file and perform operations upon
them.
* Allowing trailing data:: Capturing optional trailing data.
* Fields with fixed data:: Field values with fixed-width data.
* Splitting By Content:: Defining Fields By Content
-* More CSV:: More on CSV files.
* FS versus FPAT:: A subtle difference.
* Testing field creation:: Checking how @command{gawk} is
splitting records.
@@ -8271,24 +8270,24 @@ four, and @code{$4} has the value @code{"ddd"}.
@node Splitting By Content
@section Defining Fields by Content
-@c August 2024. This section and the first subsection rewritten
+@c September 2024. This section rewritten, and a sub-section removed,
@c by Stuart Ferguson <stuart.fergs@gmail.com>.
@menu
-* More CSV:: More on CSV files.
* FS versus FPAT:: A subtle difference.
@end menu
@c O'Reilly doesn't like it as a note the first thing in the section.
-This @value{SECTION} discusses an advanced feature of @command{gawk}. If you
are a novice
-@command{awk} user, you might want to skip it on the first reading.
+This @value{SECTION} discusses an advanced
+feature of @command{gawk}. If you are a novice @command{awk} user,
+you might want to skip it on the first reading.
@cindex advanced features @subentry specifying field content
-Normally, when using @code{FS}, @command{gawk} defines the fields as the parts
of
-the record that occur in between each field separator. In other words,
-@code{FS} defines what a field @emph{is not}, instead of what a field
@emph{is}. However,
-there are times when we really want to define the fields by what they are,
-and not by what they are not.
+Normally, when using @code{FS}, @command{gawk} defines the fields as the parts
+of the record that occur in between each field separator. In other words,
+@code{FS} defines what a field @emph{is not}, instead of what a field
+@emph{is}. However, there are times when we really want to define the fields
+by what they are, and not by what they are not.
@cindex @command{gawk} @subentry @code{FPAT} variable in
@cindex @code{FPAT} variable
@@ -8300,9 +8299,9 @@ regular expression describes the contents of each field.
@cindex Comma separated values (CSV) data @subentry parsing with @code{FPAT}
We can explore the strengths, and some limitations, of
@code{FPAT} using the case of comma-separated values (CSV)
-data. This case is rather academic as @command{gawk} now has
+data. This case is somewhat obsolete as @command{gawk} now has
built-in CSV parsing
-(@pxref{Comma Separated Fields}),
+(@pxref{Comma Separated Fields}).
Nonetheless, it remains useful as an example of what @code{FPAT}-based field
parsing can do. It is also useful for versions of
@command{gawk} prior to version 5.3.
@@ -8320,21 +8319,19 @@ So, we might have data like this:
@example
@c file eg/misc/addresses.csv
-Robbins,Arnold,"1234 A Pretty Street, NE",MyTown,MyState,12345-6789,USA
+Robbins,Arnold,,"1234 A Pretty Street, NE",MyTown,MyState,12345-6789,USA
@c endfile
@end example
-In the case of CSV data as presented here, each field is
-either ``anything that is not a comma,'' or ``a double quote,
-anything that is not a double quote, and a closing double
-quote.'' (There are more complicated definitions of CSV data, treated
-shortly.) If written as a regular expression constant
-(@pxref{Regexp}),
-we would have @code{/([^,]+)|("[^"]+")/}. Writing this as a string requires
-us to escape the double quotes, leading to:
+In the case of CSV data as presented here, each field is either ``anything that
+is not a comma,'' or ``a double quote, anything that is not a double quote, and
+a closing double quote.'' We also need to bear in mind that some fields may be
+empty. If written as a regular expression constant (@pxref{Regexp}),
+we would have @code{/([^,]*)|("[^"]+")/}.
+Writing this as a string requires us to escape the double quotes, leading to:
@example
-FPAT = "([^,]+)|(\"[^\"]+\")"
+FPAT = "([^,]*)|(\"[^\"]+\")"
@end example
Putting this to use, here is a simple program to parse the data:
@@ -8349,7 +8346,7 @@ BEGIN @{
@group
@{
- print "NF = ", NF
+ print "NF =", NF
for (i = 1; i <= NF; i++) @{
printf("$%d = <%s>\n", i, $i)
@}
@@ -8362,35 +8359,20 @@ When run, we get the following:
@example
$ @kbd{gawk -f simple-csv.awk addresses.csv}
-@print{} NF = 7
+@print{} NF = 8
@print{} $1 = <Robbins>
@print{} $2 = <Arnold>
-@print{} $3 = <"1234 A Pretty Street, NE">
-@print{} $4 = <MyTown>
-@print{} $5 = <MyState>
-@print{} $6 = <12345-6789>
-@print{} $7 = <USA>
+@print{} $3 = <>
+@print{} $4 = <"1234 A Pretty Street, NE">
+@print{} $5 = <MyTown>
+@print{} $6 = <MyState>
+@print{} $7 = <12345-6789>
+@print{} $8 = <USA>
@end example
-Note the embedded comma in the value of @code{$3}.
-
-A straightforward improvement when processing CSV data of this sort
-would be to remove the quotes when they occur, with something like this:
-
-@example
-if (substr($i, 1, 1) == "\"") @{
- len = length($i)
- $i = substr($i, 2, len - 2) # Get text within the two quotes
-@}
-@end example
-
-As written, the regexp used for @code{FPAT} requires that each field contain
-at least one character. A straightforward modification (changing the first
-@samp{+} to @samp{*}) allows fields to be empty:
-
-@example
-FPAT = "([^,]*)|(\"[^\"]+\")"
-@end example
+Note the empty data field in the value of @code{$3} and the embedded comma in
+the value of @code{$4}, in which the data remains wrapped in its enclosing
+double quotes.
@c 4/2015:
@c Consider use of FPAT = "([^,]*)|(\"[^\"]*\")"
@@ -8401,29 +8383,14 @@ FPAT = "([^,]*)|(\"[^\"]+\")"
@c This is too much work. FPAT and CSV files are very flaky and
@c fragile. Doing something like this is merely inviting trouble.
-As with @code{FS}, the @code{IGNORECASE}
-variable (@pxref{User-modified})
-affects field splitting with @code{FPAT}.
-
-Assigning a value to @code{FPAT} overrides field splitting with @code{FS} and
with
-@code{FIELDWIDTHS}.
-
-Finally, the @code{patsplit()} function makes the same functionality
-available for splitting regular strings (@pxref{String Functions}).
-
-@node More CSV
-@subsection More on Using @code{FPAT} with CSV Files
-
-@cindex Collado, Manuel
-Manuel Collado notes that in addition to commas, a CSV field can also
-contains quotes, that have to be escaped by doubling them. The previously
-described regexps fail to accept quoted fields with both commas and
-quotes inside. He suggests that the simplest @code{FPAT} expression that
-recognizes this kind of fields is @code{/([^,]*)|("([^"]|"")+")/}. He
-provides the following input data to test these variants:
+The use of enclosing double quotes has a consequence for fields that contain
+double quotes as part of the data itself. For those fields, a double quote
+appearing inside a field must be escaped by preceding it with another double
+quote, as shown in the third and fourth lines of the following example:
@example
@c file eg/misc/sample.csv
+1,2,3
p,"q,r",s
p,"q""r",s
p,"q,""r",s
@@ -8432,56 +8399,54 @@ p,,s
@c endfile
@end example
-And here is his test program:
+@cindex Collado, Manuel
+Manuel Collado suggests that the simplest @code{FPAT} expression that
+recognizes this kind of CSV field is @code{/([^,]*)|("([^"]|"")+")/}.
+
+The following program uses this improved @code{FPAT} expression to split the
+example CSV fields above, extracts the underlying data from any double-quoted
+fields, and finally prints the data as tab-separated values.
@example
-@c file eg/misc/test-csv.awk
+@c file eg/misc/quoted-csv.awk
@group
BEGIN @{
- fp[0] = "([^,]+)|(\"[^\"]+\")"
- fp[1] = "([^,]*)|(\"[^\"]+\")"
- fp[2] = "([^,]*)|(\"([^\"]|\"\")+\")"
- FPAT = fp[fpat+0]
+ FPAT = "([^,]*)|(\"([^\"]|\"\")+\")"
@}
@end group
@group
@{
- print "<" $0 ">"
- printf("NF = %s ", NF)
- for (i = 1; i <= NF; i++) @{
- printf("<%s>", $i)
- @}
- print ""
+ for (i = 1; i <= NF; i++) @{
+ # Extract data from double-quoted fields
+ if (substr($i, 1, 1) == "\"") @{
+ gsub(/^"|"$/, "", $i) # Remove enclosing quotes
+ gsub(/""/, "\"", $i) # Convert "" to "
+ @}
+ # Print tab-separated values
+ printf (i < NF) ? "%s\t" : "%s\n", $i
+ @}
@}
@end group
@c endfile
@end example
-When run on the third variant, it produces:
+When run, it produces:
@example
-$ @kbd{gawk -v fpat=2 -f test-csv.awk sample.csv}
-@print{} <p,"q,r",s>
-@print{} NF = 3 <p><"q,r"><s>
-@print{} <p,"q""r",s>
-@print{} NF = 3 <p><"q""r"><s>
-@print{} <p,"q,""r",s>
-@print{} NF = 3 <p><"q,""r"><s>
-@print{} <p,"",s>
-@print{} NF = 3 <p><""><s>
-@print{} <p,,s>
-@print{} NF = 3 <p><><s>
+$ @kbd{gawk -f quoted-csv.awk sample.csv}
+@print{} 1 2 3
+@print{} p q,r s
+@print{} p q"r s
+@print{} p q,"r s
+@print{} p s
+@print{} p s
@end example
-Some programs export CSV data that contains @emph{embedded newlines} between
+Some programs export CSV data that contain @emph{embedded newlines} between
the double quotes, and here we run into a limitation of @code{FPAT}: it
-provides no way to deal with this.
-
-Using @code{FPAT} to do your own CSV parsing is an elegant approach for the
-majority of cases, but not all. It is rather like having a bed with a
-blanket thatâs not quite big enough: thereâs always a corner that
-isnât covered.
+provides no way to deal with this. Hence, using @code{FPAT} to do your own CSV
+parsing is an elegant approach for the majority of cases, but not all.
@cindex Collado, Manuel
@cindex @code{CSVMODE} library for @command{gawk}
@@ -8493,6 +8458,15 @@ is prior to version 5.3, we recommend that you use
Manuel Collado's
@uref{http://mcollado.z15.es/xgawk/, @code{CSVMODE} library for
@command{gawk}}.
+As with @code{FS}, the @code{IGNORECASE} variable (@pxref{User-modified})
+affects field splitting with @code{FPAT}.
+
+Assigning a value to @code{FPAT} overrides field splitting
+with @code{FS} and with @code{FIELDWIDTHS}.
+
+Finally, the @code{patsplit()} function makes the same functionality
+available for splitting regular strings (@pxref{String Functions}).
+
@node FS versus FPAT
@subsection @code{FS} Versus @code{FPAT}: A Subtle Difference
http://git.sv.gnu.org/cgit/gawk.git/commit/?id=90e95db13e4dee2c7236bb387701b2dac6e94245
commit 90e95db13e4dee2c7236bb387701b2dac6e94245
Merge: f6766756 a3ab843b
Author: Arnold D. Robbins <arnold@skeeve.com>
Date: Thu Sep 19 18:16:08 2024 +0300
Merge branch 'gawk-5.3-stable' into stable/fpat-doc
http://git.sv.gnu.org/cgit/gawk.git/commit/?id=f6766756d749dc6e5219101140430cc86b8917a1
commit f6766756d749dc6e5219101140430cc86b8917a1
Author: Arnold D. Robbins <arnold@skeeve.com>
Date: Thu Sep 19 18:15:54 2024 +0300
Update .info files.
diff --git a/doc/gawkworkflow.info b/doc/gawkworkflow.info
index 591ca0d6..aeba0028 100644
--- a/doc/gawkworkflow.info
+++ b/doc/gawkworkflow.info
@@ -1,4 +1,4 @@
-This is gawkworkflow.info, produced by makeinfo version 7.0.1 from
+This is gawkworkflow.info, produced by makeinfo version 7.1 from
gawkworkflow.texi.
Copyright © 2017, 2018, 2019, 2020, 2022, 2023 Free Software Foundation,
@@ -10,13 +10,13 @@ Inc.
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; with the
-Invariant Sections being âGNU General Public Licenseâ, with the
-Front-Cover Texts being âA GNU Manualâ, and with the Back-Cover Texts as
+Invariant Sections being "GNU General Public License", with the
+Front-Cover Texts being "A GNU Manual", and with the Back-Cover Texts as
in (a) below. A copy of the license is included in the section entitled
-âGNU Free Documentation Licenseâ.
+"GNU Free Documentation License".
- a. The FSFâs Back-Cover Text is: âYou have the freedom to copy and
- modify this GNU manual.â
+ a. The FSF's Back-Cover Text is: "You have the freedom to copy and
+ modify this GNU manual."
INFO-DIR-SECTION Text creation and manipulation
START-INFO-DIR-ENTRY
* Gawk Work Flow: (gawkworkflow). Participating in âgawkâ
development.
@@ -45,13 +45,13 @@ Foundation, Inc.
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; with the
-Invariant Sections being âGNU General Public Licenseâ, with the
-Front-Cover Texts being âA GNU Manualâ, and with the Back-Cover Texts as
+Invariant Sections being "GNU General Public License", with the
+Front-Cover Texts being "A GNU Manual", and with the Back-Cover Texts as
in (a) below. A copy of the license is included in the section entitled
-âGNU Free Documentation Licenseâ.
+"GNU Free Documentation License".
- a. The FSFâs Back-Cover Text is: âYou have the freedom to copy and
- modify this GNU manual.â
+ a. The FSF's Back-Cover Text is: "You have the freedom to copy and
+ modify this GNU manual."
* Menu:
@@ -81,7 +81,7 @@ in (a) below. A copy of the license is included in the
section entitled
* Branches are state:: Branches represent development state.
* Repo State:: The different branch types in the repo.
* Local State:: Managing local branches.
-* Remotes:: What a âremoteâ is.
+* Remotes:: What a "remote" is.
* Cloning:: Cloning the repo the first time.
* Switching Branches:: Moving from one branch to another.
* Starting A New Branch:: Starting a new branch for development.
@@ -114,7 +114,7 @@ Preface
This Info file describes how to participate in development of GNU Awk
(âgawkâ). GNU Awk is a Free Software project belonging to the Free
-Software Foundationâs GNU project.
+Software Foundation's GNU project.
* Menu:
@@ -165,11 +165,11 @@ This Info file has the following chapters and appendices:
do before using Git seriously.
⢠*note Development without commit access:: gets into the meat of the
- development workflow, describing how to work if you donât have
+ development workflow, describing how to work if you don't have
commit access to the Savannah repository.
⢠*note Development with commit access:: continues the discussion,
- covering whatâs different when you can commit directly to the
+ covering what's different when you can commit directly to the
Savannah repository.
⢠*note General practices:: describes general development practices
@@ -182,7 +182,7 @@ This Info file has the following chapters and appendices:
should be familiar with in order to participate in âgawkâ
development and presents some tools that may make your work easier.
- ⢠*note Cheat Sheet:: provides a short âcheat sheetâ summarizing all
+ ⢠*note Cheat Sheet:: provides a short "cheat sheet" summarizing all
the Git commands referenced in this Info file.
⢠*note Resources:: provides a few pointers to Internet resources for
@@ -203,9 +203,9 @@ briefly documents the typographical conventions used in
Texinfo.
Examples you would type at the command line are preceded by the
common shell primary and secondary prompts, â$â and â>â. Input that
you
type is shown âlike thisâ. Output from the command is preceded by the
-glyph ââ£â. This typically represents the commandâs standard output.
-Error messages and other output on the commandâs standard error are
-preceded by the glyph âerrorââ. For example:
+glyph "â£". This typically represents the command's standard output.
+Error messages and other output on the command's standard error are
+preceded by the glyph "errorâ". For example:
$ echo hi on stdout
⣠hi on stdout
@@ -213,7 +213,7 @@ preceded by the glyph âerrorââ. For example:
errorâ hello on stderr
Characters that you type at the keyboard look âlike thisâ. In
-particular, there are special characters called âcontrol characters.â
+particular, there are special characters called "control characters."
These are characters that you type by holding down both the âCONTROLâ
key and another key, at the same time. For example, a âCtrl-dâ is typed
by first pressing and holding the âCONTROLâ key, next pressing the âdâ
@@ -255,12 +255,12 @@ File: gawkworkflow.info, Node: Contributing, Next:
Using Git, Prev: Preface,
1 How to Start Contributing
***************************
-âgawkâ development is distributed. Itâs done using electronic mail
+âgawkâ development is distributed. It's done using electronic mail
(âemailâ) and via branches in the Git repository (or ârepoâ) on
Savannah
-(http://savannah.gnu.org), the GNU projectâs source code management
+(http://savannah.gnu.org), the GNU project's source code management
site.
- In this major node we use some Git terminology. If youâre not at all
+ In this major node we use some Git terminology. If you're not at all
familiar with Git, then skim this major node and come back after reading
the rest of the Info file.
@@ -269,16 +269,16 @@ contributing, simply start! Take a look at the
âTODOâ file in the
distribution, see if there is something of interest to you, and ask on
the <bug-gawk@gnu.org> mailing list if anyone else is working on it. If
not, then go for it! (*Note Development Stuff:: for a discussion of
-some of the technical things youâll need to do. Here we describe the
+some of the technical things you'll need to do. Here we describe the
process in general.)
Your contribution can be almost anything that is relevant for âgawkâ,
such as code fixes, documentation fixes, and/or new features.
- NOTE: If possible, new features should be done using âgawkââs
+ NOTE: If possible, new features should be done using âgawkâ's
extension mechanism. If you want to add a user-visible language
- change to the âgawkâ core, youâre going to have to convince the
- maintainer and the other developers that itâs really worthwhile to
+ change to the âgawkâ core, you're going to have to convince the
+ maintainer and the other developers that it's really worthwhile to
do so.
Changes that improve performance or portability, or that fix bugs,
@@ -286,17 +286,17 @@ such as code fixes, documentation fixes, and/or new
features.
convincing, of course.
As you complete a task, submit patches for review to the
-<bug-gawk@gnu.org> mailing list, where youâll be given feedback about
+<bug-gawk@gnu.org> mailing list, where you'll be given feedback about
your work. Once your changes are acceptable, the maintainer will commit
them to the Git repository.
Over time, as the maintainer and development team gain confidence in
your ability to contribute, you may be asked to join the private âgawkâ
-developersâ mailing list, and/or be granted commit access to the Git
+developers' mailing list, and/or be granted commit access to the Git
repository on Savannah. This has happened to more than one person who
-just âcame out of the woodwork.â
+just "came out of the woodwork."
- Until that happens, or if you donât want to join the list, you should
+ Until that happens, or if you don't want to join the list, you should
continue to work with private branches and submission of patches to the
mailing list.
@@ -304,9 +304,9 @@ mailing list.
add a major feature, where the patch(es) would be very large, it has
become the practice to create a separate branch, based off of âmasterâ,
to host the feature. This way the maintainer can review it, and you can
-continue to improve it, until itâs ready for integration into âmasterâ.
+continue to improve it, until it's ready for integration into âmasterâ.
- NOTE: Because of the GNU projectâs requirements for signed
+ NOTE: Because of the GNU project's requirements for signed
paperwork for contributions, the âgawkâ project will *not* work
with pull requests from GitHub (http://github.com) or any other
Git-based software hosting service. You must submit patches to the
@@ -315,7 +315,7 @@ continue to improve it, until itâs ready for integration
into âmasterâ.
The <bug-gawk@gnu.org> mailing list is not private. Anyone may send
mail to it, and anyone may subscribe to it. To subscribe, go to the
-listâs web page (https://lists.gnu.org/mailman/listinfo/bug-gawk) and
+list's web page (https://lists.gnu.org/mailman/listinfo/bug-gawk) and
follow the instructions there. If you plan to be involved long-term
with âgawkâ development, then you probably should subscribe to the list.
@@ -329,7 +329,7 @@ This chapter provides an introduction to using Git. Our
point is _not_
to rave about how wonderful Git is, nor to go into painful detail about
how it works. Rather we want to give you enough background to
understand how to use Git effectively for bug fix and feature
-development and to interact (âplay nicelyâ) with the development team.
+development and to interact ("play nicely") with the development team.
* Menu:
@@ -341,11 +341,11 @@ development and to interact (âplay nicelyâ) with the
development team.
File: gawkworkflow.info, Node: Push Pull, Next: Repo Copies, Up: Using Git
-2.1 The âPush/Pullâ Model of Software Development
+2.1 The "Push/Pull" Model of Software Development
=================================================
Git is a powerful, distributed source code management system. However,
-the way itâs used for âgawkâ development purposely does not take
+the way it's used for âgawkâ development purposely does not take
advantage of all its features.
Instead, the model is rather simple, and in many ways much like more
@@ -353,7 +353,7 @@ traditional distributed systems such as the Concurrent
Versions System
(http://www.nongnu.org/cvs) (CVS) or Subversion
(http://subversion.apache.org) (SVN).
- The central idea can be termed âpush/pull.â You _pull_ updates down
+ The central idea can be termed "push/pull." You _pull_ updates down
from the central repository to your local copy, and if you have commit
rights, you _push_ your changes or updates up to the central repository.
@@ -385,15 +385,14 @@ represents the history of a collection of files and
directories (a file
directories added or deleted, and/or file contents changed) is termed a
âcommitâ.
- When you first create a local copy of a remote repository (âclone the
-repoâ), Git copies all of the original repositoryâs branches to your
+ When you first create a local copy of a remote repository ("clone the
+repo"), Git copies all of the original repository's branches to your
local system. The original remote repository is referred to as being
âupstreamâ, and your local repo is âdownstreamâ from it. Git
distinguishes branches from the upstream repo by prefixing their names
-with âorigin/â. Letâs draw some pictures. *note Figure 2.1:
+with âorigin/â. Let's draw some pictures. *note Figure 2.1:
savannah-repo. represents the state of the repo on Savannah:
-
+======================+
| Branches |
+======================+
@@ -411,7 +410,7 @@ savannah-repo. represents the state of the repo on Savannah:
Figure 2.1: The Savannah âgawkâ Repository
After you clone the repo, on your local system you will have a single
-branch named âmasterâ thatâs visible when you use âgit branchâ to see
+branch named âmasterâ that's visible when you use âgit branchâ to see
your branches.
$ git clone http://git.savannah.gnu.org/r/gawk.git Clone the repo
@@ -424,7 +423,6 @@ The current branch is always indicated with a leading
asterisk (â*â).
Pictorially, the local repo looks like *note Figure 2.2: your-repo.
(you can ignore the âTâ column for the moment):
-
+===+======================++=============================+
| T | Local Branches || Remote Branches |
+===+======================++=============================+
@@ -444,12 +442,12 @@ Figure 2.2: Your Local âgawkâ Repository
Note that what is simply âgawk-4.1-stableâ in the upstream repo is now
referred to as âorigin/gawk-4.1-stableâ. The âorigin/â branches are a
snapshot of the state of the upstream repo. This is how Git allows you
-to see what changes youâve made with respect to the upstream repo,
+to see what changes you've made with respect to the upstream repo,
without having to actually communicate with the upstream repo over the
Internet. (When files are identical, Git is smart enough to not have
two separate physical copies on your local disk.)
- If youâre working on a simple bug fix or change, you can do so
+ If you're working on a simple bug fix or change, you can do so
directly in your local âmasterâ branch. You can then commit your
changes, and if you have access rights, push them upstream to the
Savannah repo. (However, there is a process to follow. Please read the
@@ -465,7 +463,7 @@ File: gawkworkflow.info, Node: Local Branches, Next:
Branches are state, Prev
2.3 Local Branches
==================
-Letâs talk about local branches in more detail. (The terminology used
+Let's talk about local branches in more detail. (The terminology used
here is my own, not official Git jargon.) There are two kinds of local
branches:
@@ -496,12 +494,11 @@ branches:
and branches in *note Development without commit access::, later in this
Info file.
- Letâs say you have checked out a copy of âgawk-4.1-stableâ and have
+ Let's say you have checked out a copy of âgawk-4.1-stableâ and have
created a purely local branch named âbetter-randomâ. Then our picture
now looks like *note Figure 2.3: your-repo-2, where the âTâ column
indicates a tracking branch.
-
+===+======================++=============================+
| T | Local Branches || Remote Branches |
+===+======================++=============================+
@@ -542,7 +539,7 @@ branches.
* Repo State:: The different branch types in the repo.
* Local State:: Managing local branches.
-* Remotes:: What a âremoteâ is.
+* Remotes:: What a "remote" is.
File: gawkworkflow.info, Node: Repo State, Next: Local State, Up: Branches
are state
@@ -601,9 +598,9 @@ File: gawkworkflow.info, Node: Local State, Next:
Remotes, Prev: Repo State,
---------------------------------------
Purely local branches are where you do your own development. You may
-use purely local branches because you donât have commit rights to the
+use purely local branches because you don't have commit rights to the
Savannah repo. You may also use them if you are doing some work that
-isnât ready for sharing with the rest of the team, or cannot be
+isn't ready for sharing with the rest of the team, or cannot be
committed for some other reason.
For example, for around a nine-month period, the maintainer kept a
@@ -631,9 +628,9 @@ these branches with âgit branch -aâ:
⣠remotes/origin/feature/fix-comments
⣠...
- Youâll note that what weâve referred to as âorigin/â branches appear
+ You'll note that what we've referred to as âorigin/â branches appear
in the output with an additional prefix: âremotes/â. Up to this point,
-weâve treated Git as if it allowed only a single upstream repository.
+we've treated Git as if it allowed only a single upstream repository.
But in fact, you can configure it to use more than one. All the known
upstream repositories are grouped under the âremotes/â prefix, with
âremotes/originâ being the one from which you initially cloned your
@@ -650,7 +647,7 @@ File: gawkworkflow.info, Node: Configuring git, Next:
Development without comm
*************************************
Before starting to use Git, you should configure it with some important
-settings that wonât change as you use Git. You may configure options
+settings that won't change as you use Git. You may configure options
both globally, and on a per-repository basis. Here, we discuss only
global configuration settings.
@@ -663,7 +660,7 @@ relevant files with your favorite text editor.(1)
$ git config --global user.email jpdev@example.com Set email address
Setting these two items are an absolute requirement. *Note*: No
-aliases are allowed. If you canât supply your real name, you cannot
+aliases are allowed. If you can't supply your real name, you cannot
contribute to the project. Other options that the âgawkâ maintainer
recommends that you use are:
@@ -693,7 +690,7 @@ safest way to operate, and is the default in current Git
versions.
⣠user.email=jpdev@example.com
⣠push.default=simple
- Here are the âgawkâ maintainerâs settings:
+ Here are the âgawkâ maintainer's settings:
$ git config --global --list
⣠user.name=Arnold D. Robbins
@@ -705,13 +702,13 @@ safest way to operate, and is the default in current Git
versions.
⣠pager.status=true
⣠log.decorate=auto
- Additional, per-project (âlocalâ) settings are stored in each repoâs
+ Additional, per-project ("local") settings are stored in each repo's
â.git/configâ file.
---------- Footnotes ----------
(1) You are required to use either Vim or Emacs, other text editors
-are not allowed. Of course, reasonable developers wouldnât want to use
+are not allowed. Of course, reasonable developers wouldn't want to use
any other editor anyway.
@@ -772,7 +769,7 @@ your vacation in the Bahamas:
repo, do a âgit pullâ or checkout a different branch. (In the
latter case, do âmake distcleanâ first.) Otherwise things will get
messy very quickly. The âbootstrap.shâ script ensures that all of
- the file time stamps are up to date so that itâs not necessary to
+ the file time stamps are up to date so that it's not necessary to
run the various configuration tools.
---------- Footnotes ----------
@@ -785,8 +782,8 @@ File: gawkworkflow.info, Node: Switching Branches, Next:
Starting A New Branch
4.2 Switching Branches
======================
-So far, weâve been working in the default âmasterâ branch. Letâs check
-whatâs happening in the âgawk-4.1-stableâ branch:
+So far, we've been working in the default âmasterâ branch. Let's check
+what's happening in the âgawk-4.1-stableâ branch:
$ make distclean Clean up
$ git checkout gawk-4.1-stable Checkout a different branch
@@ -802,7 +799,7 @@ File: gawkworkflow.info, Node: Starting A New Branch,
Next: Undoing a change,
4.3 Starting A New Branch
=========================
-Letâs say you want to work on a new feature. For example, you might
+Let's say you want to work on a new feature. For example, you might
decide to add Python syntax support.(1) You should create a new branch
on which to work. First, switch back to âmasterâ:
@@ -819,8 +816,8 @@ on which to work. First, switch back to âmasterâ:
support. As you do each defined chunk of work, you update the
âChangeLogâ file with your changes before âcommittingâ them to the
repo.
- Letâs say youâve added a new file âpython.câ and updated several
-others. Use âgit statusâ to see whatâs changed:
+ Let's say you've added a new file âpython.câ and updated several
+others. Use âgit statusâ to see what's changed:
$ git status
⣠...
@@ -832,7 +829,7 @@ external âdiffâ command, such as âmeldâ on
GNU/Linux:
$ git diff Regular built-in tool for standard
diffs
$ git difftool --tool=meld GUI diff tool
- When youâre happy with the changes, use âgit addâ to tell Git which
+ When you're happy with the changes, use âgit addâ to tell Git which
of the changed and/or new files you wish to have ready to be committed:
$ git add ...
@@ -854,9 +851,9 @@ message will be visible via âgit logâ.
---------- Footnotes ----------
- (1) Just joking. Please donât attempt this for real.
+ (1) Just joking. Please don't attempt this for real.
- (2) Donât run âgit difftoolâ in the background; it works
+ (2) Don't run âgit difftoolâ in the background; it works
interactively.
@@ -882,10 +879,10 @@ File: gawkworkflow.info, Node: Saving Without
Committing, Next: Updating, Pre
========================
Sometimes, you may be in the middle of a set of changes that are not yet
-completed, when you need to stop what youâre doing and work on something
+completed, when you need to stop what you're doing and work on something
else. For example, you might be updating the documentation when a bug
-report comes in and you want to work on the bug. But you canât just
-switch branches, since you havenât finished your current changes.
+report comes in and you want to work on the bug. But you can't just
+switch branches, since you haven't finished your current changes.
The way to work around this problem is with âgit stashâ. This
command saves your changes in a special place within Git from which they
@@ -979,7 +976,7 @@ addâ and âgit commitâ:
$ git rebase --continue Continue the rebase
The âgit rebase --continueâ then continues the process of rebasing
-the current branch that we started in *note Rebasing::. Itâs not
+the current branch that we started in *note Rebasing::. It's not
necessary if you are using âgit mergeâ (*note Points to remember::).
@@ -988,10 +985,10 @@ File: gawkworkflow.info, Node: Submitting Changes,
Next: Removing Branches, P
4.7 Submitting Your Changes
===========================
-So now your feature is complete. Youâve added test cases for it to the
+So now your feature is complete. You've added test cases for it to the
test suite(1), you have âChangeLogâ entries that describe all the
changes(2), you have documented the new feature(3), and everything works
-great. Youâre ready to submit the changes for review, and with any
+great. You're ready to submit the changes for review, and with any
luck, inclusion into âgawkâ.
There are two ways to submit your changes for review.
@@ -1004,7 +1001,7 @@ _Generate a single large patch_
$ git diff master > /tmp/python.diff
Mail the âpython.diffâ file to the appropriate mailing list along
- with a description of what youâve changed and why.
+ with a description of what you've changed and why.
The patch file will likely contain changes to generated files, such
as âawkgram.câ or âMakefile.inâ. If you are comfortable manually
@@ -1017,10 +1014,10 @@ _Generate a set of patches that in toto comprise your
changes_
$ git checkout feature/python
$ git format-patch
- This creates a set of patch files, one per commit that isnât on the
+ This creates a set of patch files, one per commit that isn't on the
original branch. Mail these patches, either separately, or as a
set of attachments, to the appropriate mailing list along with a
- description of what youâve changed and why.
+ description of what you've changed and why.
Either way you choose to submit your changes, the âgawkâ maintainer
and development team will review your changes and provide feedback. If
@@ -1030,7 +1027,7 @@ changes.
Which list should you send mail to? If you are just starting to
contribute, use <bug-gawk@gnu.org>. After making enough contributions,
-you may be invited to join the private âgawkâ developersâ mailing list.
+you may be invited to join the private âgawkâ developers' mailing list.
If you do so, then submit your changes to that list.
If you make any substantial changes, you will need to assign
@@ -1040,11 +1037,11 @@ information.
---------- Footnotes ----------
- (1) You did do this, didnât you?
+ (1) You did do this, didn't you?
(2) You remembered this, right?
- (3) You wouldnât neglect this, would you?
+ (3) You wouldn't neglect this, would you?
File: gawkworkflow.info, Node: Removing Branches, Next: Points to remember,
Prev: Submitting Changes, Up: Development without commit access
@@ -1069,11 +1066,11 @@ File: gawkworkflow.info, Node: Points to remember,
Prev: Removing Branches, U
There are some important points to remember:
⢠Always do a âmake distcleanâ before switching between branches.
- Things will get really confused if you donât.
+ Things will get really confused if you don't.
⢠For upstream branches, _always_ work with tracking branches.
_Never_ use âgit checkout origin/WHATEVERâ. Git will happily let
- you do something like that, but itâs just plain asking for trouble.
+ you do something like that, but it's just plain asking for trouble.
⢠Make sure your tracking branches are up-to-date before doing
anything with them, particularly using them as the basis for a
@@ -1125,16 +1122,16 @@ File: gawkworkflow.info, Node: Initial setup, Next:
ssh clone, Up: Developmen
=================
Congratulations! After becoming a quality contributor to âgawkâ
-development, youâve been invited to join the private development list
+development, you've been invited to join the private development list
and to accept having commit access to the repo.
The first thing to do is to create an account on Savannah, choosing a
unique user name. To do so, go to the Savannah home page
-(http://savannah.gnu.org) and click on the âNew Userâ link. The setup
+(http://savannah.gnu.org) and click on the "New User" link. The setup
will include uploading of your âsshâ key, as per the instructions on the
Savannah web page.
- After youâve done all this, send email to the maintainer with your
+ After you've done all this, send email to the maintainer with your
Savannah user name, and he will add you to the list of users who have
commit access to the repo.
@@ -1178,8 +1175,8 @@ without commit access:
6. Iterate until the patch is ready to be committed.
However, now that you have commit access, you can commit the fix and
-push it up to the repo yourself! Letâs assume youâve made a bug fix
-directly on âmasterâ. Hereâs how to commit your changes:
+push it up to the repo yourself! Let's assume you've made a bug fix
+directly on âmasterâ. Here's how to commit your changes:
$ git diff Review the patch one more time
$ git add ... Add any files for committing
@@ -1187,7 +1184,7 @@ directly on âmasterâ. Hereâs how to commit your
changes:
$ git push Push the files up to the repo. Ta da!
The first three steps are the same described earlier (*note Starting
-A New Branch::). The âgit pushâ is whatâs new, and it updates the repo
+A New Branch::). The âgit pushâ is what's new, and it updates the repo
on Savannah. Congratulations!
As a courtesy, you should send a note to the mailing list indicating
@@ -1242,7 +1239,7 @@ File: gawkworkflow.info, Node: Developing fixes, Prev:
Developing new features
If you want to make a fix on âmasterâ or on the current stable branch,
you work the same way, by producing and discussing a diff on the mailing
-list. Once itâs approved, you can commit it yourself:
+list. Once it's approved, you can commit it yourself:
$ git checkout master Move to master
$ git pull Make sure we're up to date with the maintainer
@@ -1251,7 +1248,7 @@ list. Once itâs approved, you can commit it yourself:
$ git add ... Add any files for committing
$ git commit Commit the files with a commit message.
- When youâre ready to push your changes:
+ When you're ready to push your changes:
$ git pull Download latest version; Git will merge
$ gvim ... Resolve any merge conflicts with git add and
git commit
@@ -1271,14 +1268,14 @@ discussion here is mainly for developers with commit
access to the
Savannah repo.
âPropagating Fixesâ
- Usually, bug fixes should be made on the current âstableâ branch.
+ Usually, bug fixes should be made on the current "stable" branch.
Once a fix has been reviewed and approved, you can commit it and
push it yourself. Typically, the maintainer then takes care to
merge the fix to âmasterâ and from there to any other branches.
However, you are welcome to save him the time and do this yourself.
âDirectory ownershipâ
- Some developers âownâ certain parts of the tree, such as the âpcâ
+ Some developers "own" certain parts of the tree, such as the âpcâ
and âvmsâ directories. They are allowed to commit changes to those
directories without review by the mailing list, but changes that
also touch the mainline code should be submitted for review.
@@ -1286,12 +1283,12 @@ Savannah repo.
âNew feature developmentâ
Unless you can convince the maintainer (and the other developers!)
otherwise, you should _always_ start branches for new features from
- âmasterâ, and not from the current âstableâ branch.
+ âmasterâ, and not from the current "stable" branch.
Use âgit checkout -b feature/FEATURE_NAMEâ to create the initial
branch. You may then elect to keep it purely local, or to push it
up to Savannah for review, even if the feature is not yet totally
- âready for prime time.â
+ "ready for prime time."
During development of a new feature, you will most likely wish to
keep your feature branch up to date with respect to ongoing improvements
@@ -1326,11 +1323,11 @@ feature branch.
$ git merge master Merge from master
Here too, you may have to resolve any merge conflicts (*note Merge
- Conflicts::). Once thatâs done, you can push the changes up to
+ Conflicts::). Once that's done, you can push the changes up to
Savannah.
When the changes on your branch are complete, usually the maintainer
-merges the branch to âmasterâ. But thereâs really no magic involved,
+merges the branch to âmasterâ. But there's really no magic involved,
the merge is simply done in the other direction:
$ git checkout feature/python Checkout feature branch
@@ -1339,7 +1336,7 @@ the merge is simply done in the other direction:
$ git pull Bring it up to date
$ git merge feature/python Merge from feature/python into master
- If youâve been keeping âfeature/pythonâ in sync with âmasterâ,
then
+ If you've been keeping âfeature/pythonâ in sync with âmasterâ, then
there should be no merge conflicts to resolve, and you can push the
result to Savannah:
@@ -1356,8 +1353,8 @@ result to Savannah:
The âgit pushâ command deletes the âfeature/pythonâ branch from the
Savannah repo.
-Finally, you should send an email to developerâs list describing what
-youâve done so that everyone else can delete their copies of the branch
+Finally, you should send an email to developer's list describing what
+you've done so that everyone else can delete their copies of the branch
and do a âgit fetch --pruneâ (*note Repo Maintenance::).
To update the other remaining development branches with the latest
@@ -1379,7 +1376,7 @@ _Removing old branches_
on Savannah are deleted (as shown in *note General practices::).
However, your local copies of those branches (labelled with the
- âorigin/â prefix) remain in your local repo. If you donât need
+ âorigin/â prefix) remain in your local repo. If you don't need
them, then you can clean up your repo as follows.
First, remove any related tracking branch you may have:
@@ -1392,10 +1389,10 @@ _Removing old branches_
$ git fetch --prune Remove unneeded branches
_Removing cruft_
- As Git works, occasional âcruftâ collects in the repository. Git
- does occasionally clean this out on its own, but if youâre
+ As Git works, occasional "cruft" collects in the repository. Git
+ does occasionally clean this out on its own, but if you're
concerned about disk usage, you can do so yourself using âgit gcâ
- (short for âgarbage collectâ). For example:
+ (short for "garbage collect"). For example:
$ du -s . Check disk usage
⣠99188 . Almost 10 megabytes
@@ -1425,7 +1422,7 @@ _Renaming branches_
$ git push origin :feature/OLD-NAME feature/NEW-NAME
NOTE: It is the leading â:â in the first branch name that
- causes Git to delete the old name in the upstream repo. Donât
+ causes Git to delete the old name in the upstream repo. Don't
omit it!
Finally, reset the upstream branch for the local branch with the
@@ -1434,7 +1431,7 @@ _Renaming branches_
$ git push -u origin feature/NEW-NAME
You should also update the mailing list to let the other developers
- know whatâs happening.
+ know what's happening.
---------- Footnotes ----------
@@ -1448,7 +1445,7 @@ File: gawkworkflow.info, Node: Development Stuff, Next:
Cheat Sheet, Prev: Re
*******************
This major node discusses other things you need to know and/or do if
-youâre going to participate seriously in âgawkâ development.
+you're going to participate seriously in âgawkâ development.
* Menu:
@@ -1475,7 +1472,7 @@ respectively.
---------- Footnotes ----------
- (1) Changes that donât follow the coding style guidelines wonât be
+ (1) Changes that don't follow the coding style guidelines won't be
accepted. Period.
@@ -1571,9 +1568,9 @@ File: gawkworkflow.info, Node: Compilers, Prev: GNU
Tools, Up: Tools
The default compiler for âgawkâ development is GCC, the GNU Compiler
Collection (https://gcc.gnu.org). The default version of GCC is
-whatever is on the maintainerâs personal GNU/Linux system, although he
+whatever is on the maintainer's personal GNU/Linux system, although he
does try to build the latest released version if that is newer than
-whatâs on his system, and then occasionally test âgawkâ with it.
+what's on his system, and then occasionally test âgawkâ with it.
He also attempts to test occasionally with âclangâ
(https://clang.llvm.org/). However, he uses whatever is the default for
@@ -1596,8 +1593,8 @@ _The Tiny C Compiler, âtccâ_
GCC before doing any commits, in case âtccâ has missed
something.(1)
- See the projectâs home page (http://www.tinycc.org) for some
- information. More information can be found in the projectâs Git
+ See the project's home page (http://www.tinycc.org) for some
+ information. More information can be found in the project's Git
repository (http://repo.or.cz/tinycc.git). The maintainer builds
from the âmobâ branch for his work, but after updating it you
should check that this branch still works to compile âgawkâ before
@@ -1609,13 +1606,13 @@ _The (Revived) Portable C Compiler_
modern architectures. It produces better code than âtccâ but is
slower, although still much faster than GCC and âclangâ.
- See the projectâs home page (http://pcc.ludd.ltu.se) for more
+ See the project's home page (http://pcc.ludd.ltu.se) for more
information. See <http://pcc.ludd.ltu.se/supported-platforms> for
instructions about obtaining the code using CVS and building it.
- An alternative location for the source is the âgawkâ maintainerâs
+ An alternative location for the source is the âgawkâ maintainer's
Git mirror (https://github.com/arnoldrobbins/pcc-revived) of the
- code. If youâre using Ubuntu GNU/Linux 18.04 or later, you need to
+ code. If you're using Ubuntu GNU/Linux 18.04 or later, you need to
use the âubuntu-18â branch from this Git mirror.
---------- Footnotes ----------
@@ -1679,17 +1676,17 @@ given Git command.
Display and/or change global and/or local configuration settings.
âgit diffâ
- Show a unified-format diff of whatâs changed in the current
+ Show a unified-format diff of what's changed in the current
directory as of the last commit. It helps to have Git configured
to use its builtin pager for reviewing diffs (*note Configuring
git::).
âgit difftoolâ
- Use a âtoolâ (usually a GUI-based program) to view differences,
- instead of the standard textual diff as youâd get from âgit diffâ.
+ Use a "tool" (usually a GUI-based program) to view differences,
+ instead of the standard textual diff as you'd get from âgit diffâ.
âgit fetchâ
- Update your local copy of the upstreamâs branches. That is, update
+ Update your local copy of the upstream's branches. That is, update
the various âorigin/â branches. This leaves your local tracking
branches unchanged. With the â--pruneâ option, this removes any
copies of stale âorigin/â branches.
@@ -1699,15 +1696,15 @@ given Git command.
branch from which you started.
âgit gcâ
- Run a âgarbage collectionâ pass in the current repository. This
+ Run a "garbage collection" pass in the current repository. This
can often reduce the space used in a large repo. For âgawkâ it
does not make that much difference.
âgit helpâ
- Print a man-pageâstyle usage summary for a command.
+ Print a man-page-style usage summary for a command.
âgit logâ
- Show the current branchâs commit log. This includes who made the
+ Show the current branch's commit log. This includes who made the
commit, the date, and the commit message. Commits are shown from
newest to oldest.
@@ -1791,16 +1788,16 @@ Index
* bootstrap.sh script: Cloning. (line 30)
* branch, main: Repo State. (line 27)
* branch, master: Repo State. (line 27)
-* branches, origin/: Repo Copies. (line 70)
-* branches, local: Local Branches. (line 6)
-* branches, tracking: Local Branches. (line 11)
* branches, dead: Repo State. (line 8)
-* branches, stable: Repo State. (line 15)
* branches, feature: Repo State. (line 35)
+* branches, local: Local Branches. (line 6)
+* branches, origin/: Repo Copies. (line 68)
* branches, purely local: Local State. (line 6)
* branches, removing: Removing Branches. (line 6)
* branches, removing <1>: Repo Maintenance. (line 9)
* branches, renaming: Repo Maintenance. (line 44)
+* branches, stable: Repo State. (line 15)
+* branches, tracking: Local Branches. (line 11)
* ChangeLog file: Starting A New Branch.
(line 19)
* ChangeLog file <1>: Developing patches. (line 11)
@@ -1811,10 +1808,10 @@ Index
(line 19)
* compilers: Compilers. (line 6)
* compiling for debugging: Debugging. (line 6)
-* configuration setting, user.name: Configuring git. (line 16)
-* configuration setting, user.email: Configuring git. (line 16)
-* configuration setting, push.default: Configuring git. (line 24)
* configuration setting, pager.status: Configuring git. (line 24)
+* configuration setting, push.default: Configuring git. (line 24)
+* configuration setting, user.email: Configuring git. (line 16)
+* configuration setting, user.name: Configuring git. (line 16)
* configuration settings: Configuring git. (line 6)
* configuration settings, global: Configuring git. (line 6)
* configure.ac file: GNU Tools. (line 15)
@@ -1837,111 +1834,111 @@ Index
* generating multiple patches: Submitting Changes. (line 29)
* gettext: GNU Tools. (line 27)
* git branch command, -a option: Remotes. (line 6)
-* git command, git branch: Repo Copies. (line 39)
-* git command, git clone: Repo Copies. (line 43)
+* git command, --help option: Cheat Sheet. (line 10)
+* git command, git add: Starting A New Branch.
+ (line 36)
+* git command, git add <1>: Developing patches. (line 27)
+* git command, git add <2>: Developing new features.
+ (line 24)
+* git command, git add <3>: Developing new features.
+ (line 36)
+* git command, git add <4>: Developing fixes. (line 10)
+* git command, git branch: Repo Copies. (line 38)
+* git command, git branch <1>: Removing Branches. (line 9)
+* git command, git branch <2>: General practices. (line 87)
+* git command, git branch <3>: Repo Maintenance. (line 20)
* git command, git checkout: Local Branches. (line 11)
-* git command, git push: Local Branches. (line 16)
-* git command, git config: Configuring git. (line 11)
-* git command, git clone <1>: Cloning. (line 6)
-* git command, git pull: Cloning. (line 21)
* git command, git checkout <1>: Switching Branches. (line 9)
-* git command, git pull <1>: Switching Branches. (line 9)
* git command, git checkout <2>: Starting A New Branch.
(line 10)
-* git command, git status: Starting A New Branch.
- (line 23)
-* git command, git diff: Starting A New Branch.
- (line 29)
-* git command, git difftool: Starting A New Branch.
- (line 29)
-* git command, git add: Starting A New Branch.
- (line 36)
-* git command, git status <1>: Starting A New Branch.
- (line 41)
-* git command, git commit: Starting A New Branch.
- (line 49)
-* git command, git log: Starting A New Branch.
- (line 51)
* git command, git checkout <3>: Undoing a change. (line 10)
-* git command, git reset: Undoing a change. (line 12)
-* git command, git stash: Saving Without Committing.
- (line 12)
-* git command, git stash pop: Saving Without Committing.
- (line 12)
-* git command, git stash list: Saving Without Committing.
- (line 12)
-* git command, git rebase: Rebasing. (line 10)
* git command, git checkout <4>: Rebasing. (line 10)
-* git command, git pull <2>: Rebasing. (line 10)
* git command, git checkout <5>: Submitting Changes. (line 18)
-* git command, git diff <1>: Submitting Changes. (line 18)
-* git command, git format-patch: Submitting Changes. (line 29)
* git command, git checkout <6>: Submitting Changes. (line 32)
* git command, git checkout <7>: Removing Branches. (line 9)
-* git command, git pull <3>: Removing Branches. (line 9)
-* git command, git branch <1>: Removing Branches. (line 9)
* git command, git checkout <8>: Points to remember. (line 19)
-* git command, git pull <4>: Points to remember. (line 19)
-* git command, git rebase <1>: Points to remember. (line 25)
* git command, git checkout <9>: Points to remember. (line 32)
-* git command, git diff <2>: Points to remember. (line 32)
* git command, git checkout <10>: Points to remember. (line 37)
-* git command, git pull <5>: Points to remember. (line 37)
-* git command, git merge: Points to remember. (line 37)
-* git command, git clone <2>: ssh clone. (line 10)
-* git command, git diff <3>: Developing patches. (line 16)
-* git command, git diff <4>: Developing patches. (line 27)
-* git command, git add <1>: Developing patches. (line 27)
-* git command, git commit <1>: Developing patches. (line 27)
-* git command, git push <1>: Developing patches. (line 27)
* git command, git checkout <11>: Developing new features.
(line 9)
-* git command, git pull <6>: Developing new features.
- (line 9)
-* git command, git diff <5>: Developing new features.
- (line 24)
-* git command, git add <2>: Developing new features.
- (line 24)
+* git command, git checkout <12>: Developing fixes. (line 10)
+* git command, git checkout <13>: General practices. (line 43)
+* git command, git checkout <14>: General practices. (line 60)
+* git command, git checkout <15>: General practices. (line 73)
+* git command, git clone: Repo Copies. (line 42)
+* git command, git clone <1>: Cloning. (line 6)
+* git command, git clone <2>: ssh clone. (line 10)
+* git command, git commit: Starting A New Branch.
+ (line 49)
+* git command, git commit <1>: Developing patches. (line 27)
* git command, git commit <2>: Developing new features.
(line 24)
-* git command, git push <2>: Developing new features.
- (line 24)
-* git command, git diff <6>: Developing new features.
- (line 36)
-* git command, git add <3>: Developing new features.
- (line 36)
* git command, git commit <3>: Developing new features.
(line 36)
-* git command, git push <3>: Developing new features.
- (line 36)
-* git command, git checkout <12>: Developing fixes. (line 10)
-* git command, git pull <7>: Developing fixes. (line 10)
-* git command, git add <4>: Developing fixes. (line 10)
* git command, git commit <4>: Developing fixes. (line 10)
+* git command, git config: Configuring git. (line 11)
+* git command, git diff: Starting A New Branch.
+ (line 29)
+* git command, git diff <1>: Submitting Changes. (line 18)
+* git command, git diff <2>: Points to remember. (line 32)
+* git command, git diff <3>: Developing patches. (line 16)
+* git command, git diff <4>: Developing patches. (line 27)
+* git command, git diff <5>: Developing new features.
+ (line 24)
+* git command, git diff <6>: Developing new features.
+ (line 36)
* git command, git diff <7>: Developing fixes. (line 10)
+* git command, git difftool: Starting A New Branch.
+ (line 29)
+* git command, git fetch: General practices. (line 96)
+* git command, git fetch <1>: Repo Maintenance. (line 25)
+* git command, git format-patch: Submitting Changes. (line 29)
+* git command, git gc: Repo Maintenance. (line 33)
+* git command, git help: Cheat Sheet. (line 10)
+* git command, git log: Starting A New Branch.
+ (line 51)
+* git command, git merge: Points to remember. (line 37)
+* git command, git merge <1>: General practices. (line 60)
+* git command, git merge <2>: General practices. (line 73)
+* git command, git pull: Cloning. (line 21)
+* git command, git pull <1>: Switching Branches. (line 9)
+* git command, git pull <2>: Rebasing. (line 10)
+* git command, git pull <3>: Removing Branches. (line 9)
+* git command, git pull <4>: Points to remember. (line 19)
+* git command, git pull <5>: Points to remember. (line 37)
+* git command, git pull <6>: Developing new features.
+ (line 9)
+* git command, git pull <7>: Developing fixes. (line 10)
* git command, git pull <8>: Developing fixes. (line 19)
-* git command, git push <4>: Developing fixes. (line 19)
-* git command, git checkout <13>: General practices. (line 43)
* git command, git pull <9>: General practices. (line 43)
-* git command, git rebase <2>: General practices. (line 43)
-* git command, git checkout <14>: General practices. (line 60)
* git command, git pull <10>: General practices. (line 60)
-* git command, git merge <1>: General practices. (line 60)
-* git command, git checkout <15>: General practices. (line 73)
* git command, git pull <11>: General practices. (line 73)
-* git command, git merge <2>: General practices. (line 73)
+* git command, git pull <12>: Repo Maintenance. (line 20)
+* git command, git push: Local Branches. (line 16)
+* git command, git push <1>: Developing patches. (line 27)
+* git command, git push <2>: Developing new features.
+ (line 24)
+* git command, git push <3>: Developing new features.
+ (line 36)
+* git command, git push <4>: Developing fixes. (line 19)
* git command, git push <5>: General practices. (line 83)
-* git command, git branch <2>: General practices. (line 87)
* git command, git push <6>: General practices. (line 87)
-* git command, git fetch: General practices. (line 96)
-* git command, git pull <12>: Repo Maintenance. (line 20)
-* git command, git branch <3>: Repo Maintenance. (line 20)
-* git command, git fetch <1>: Repo Maintenance. (line 25)
-* git command, git gc: Repo Maintenance. (line 33)
-* git command, git help: Cheat Sheet. (line 10)
-* git command, --help option: Cheat Sheet. (line 10)
+* git command, git rebase: Rebasing. (line 10)
+* git command, git rebase <1>: Points to remember. (line 25)
+* git command, git rebase <2>: General practices. (line 43)
+* git command, git reset: Undoing a change. (line 12)
* git command, git reset, --hard option: Cheat Sheet. (line 93)
+* git command, git stash: Saving Without Committing.
+ (line 12)
* git command, git stash <1>: Cheat Sheet. (line 97)
+* git command, git stash list: Saving Without Committing.
+ (line 12)
+* git command, git stash pop: Saving Without Committing.
+ (line 12)
+* git command, git status: Starting A New Branch.
+ (line 23)
+* git command, git status <1>: Starting A New Branch.
+ (line 41)
* Git Project: Intended Audience. (line 18)
* GitHub: Contributing. (line 57)
* global configuration settings: Configuring git. (line 6)
@@ -1963,7 +1960,7 @@ Index
(line 29)
* merge conflicts: Merge Conflicts. (line 6)
* old branches, removing: Repo Maintenance. (line 9)
-* origin/ branches: Repo Copies. (line 70)
+* origin/ branches: Repo Copies. (line 68)
* ownership of directories: General practices. (line 17)
* pager.status configuration setting: Configuring git. (line 24)
* patch, single, generation of: Submitting Changes. (line 14)
@@ -1977,8 +1974,8 @@ Index
* push.default configuration setting: Configuring git. (line 24)
* rebasing: Rebasing. (line 6)
* removing, branches: Removing Branches. (line 6)
-* removing, old branches: Repo Maintenance. (line 9)
* removing, cruft: Repo Maintenance. (line 27)
+* removing, old branches: Repo Maintenance. (line 9)
* renaming branches: Repo Maintenance. (line 44)
* Repository, gawk, URL for: ssh clone. (line 10)
* review, changes you made: Submitting Changes. (line 12)
@@ -2001,69 +1998,69 @@ Index
Tag Table:
-Node: Top1168
-Node: Preface5315
-Node: Intended Audience5886
-Node: This Manual6768
-Node: Conventions8329
-Node: Acknowledgments9850
-Node: Reviewers10287
-Node: Contributing10608
-Node: Using Git14062
-Node: Push Pull14822
-Node: Repo Copies16388
-Ref: savannah-repo17403
-Ref: your-repo18460
-Ref: Repo Copies-Footnote-120179
-Node: Local Branches20236
-Ref: your-repo-222057
-Ref: Local Branches-Footnote-123143
-Node: Branches are state23201
-Node: Repo State23936
-Node: Local State26120
-Node: Remotes26788
-Node: Configuring git28145
-Ref: Configuring git-Footnote-130555
-Node: Development without commit access30726
-Node: Cloning31786
-Ref: Cloning-Footnote-133351
-Node: Switching Branches33418
-Node: Starting A New Branch34052
-Ref: Starting A New Branch-Footnote-136036
-Ref: Starting A New Branch-Footnote-236096
-Node: Undoing a change36178
-Node: Saving Without Committing36802
-Node: Updating38386
-Node: Rebasing38901
-Node: Merge Conflicts39523
-Node: Submitting Changes41800
-Ref: Submitting Changes-Footnote-144271
-Ref: Submitting Changes-Footnote-244310
-Ref: Submitting Changes-Footnote-344346
-Node: Removing Branches44394
-Node: Points to remember44930
-Node: Development with commit access46639
-Node: Initial setup47292
-Node: ssh clone48096
-Node: Developing patches48686
-Node: Developing new features50110
-Node: Developing fixes52022
-Node: General practices53113
-Node: Repo Maintenance57946
-Ref: Repo Maintenance-Footnote-160857
-Node: Development Stuff60993
-Node: Coding style61562
-Ref: Coding style-Footnote-162224
-Node: Doing paperwork62318
-Node: Tools63117
-Node: GNU Tools63707
-Node: Compilers65940
-Ref: Compilers-Footnote-168620
-Node: Debugging68658
-Node: Cheat Sheet69469
-Node: Resources73576
-Node: TODO74161
-Node: Index74383
+Node: Top1148
+Node: Preface5273
+Node: Intended Audience5842
+Node: This Manual6724
+Node: Conventions8277
+Node: Acknowledgments9782
+Node: Reviewers10219
+Node: Contributing10540
+Node: Using Git13964
+Node: Push Pull14720
+Node: Repo Copies16277
+Ref: savannah-repo17284
+Ref: your-repo18338
+Ref: Repo Copies-Footnote-120052
+Node: Local Branches20109
+Ref: your-repo-221926
+Ref: Local Branches-Footnote-123011
+Node: Branches are state23069
+Node: Repo State23800
+Node: Local State25984
+Node: Remotes26648
+Node: Configuring git27999
+Ref: Configuring git-Footnote-130397
+Node: Development without commit access30566
+Node: Cloning31626
+Ref: Cloning-Footnote-133189
+Node: Switching Branches33256
+Node: Starting A New Branch33884
+Ref: Starting A New Branch-Footnote-135858
+Ref: Starting A New Branch-Footnote-235916
+Node: Undoing a change35996
+Node: Saving Without Committing36620
+Node: Updating38198
+Node: Rebasing38713
+Node: Merge Conflicts39335
+Node: Submitting Changes41610
+Ref: Submitting Changes-Footnote-144069
+Ref: Submitting Changes-Footnote-244106
+Ref: Submitting Changes-Footnote-344142
+Node: Removing Branches44188
+Node: Points to remember44724
+Node: Development with commit access46429
+Node: Initial setup47082
+Node: ssh clone47878
+Node: Developing patches48468
+Node: Developing new features49884
+Node: Developing fixes51796
+Node: General practices52883
+Node: Repo Maintenance57690
+Ref: Repo Maintenance-Footnote-160585
+Node: Development Stuff60721
+Node: Coding style61288
+Ref: Coding style-Footnote-161950
+Node: Doing paperwork62040
+Node: Tools62839
+Node: GNU Tools63429
+Node: Compilers65662
+Ref: Compilers-Footnote-168328
+Node: Debugging68366
+Node: Cheat Sheet69177
+Node: Resources73266
+Node: TODO73851
+Node: Index74073
End Tag Table
diff --git a/doc/pm-gawk.info b/doc/pm-gawk.info
index fa186620..c08c5b46 100644
--- a/doc/pm-gawk.info
+++ b/doc/pm-gawk.info
@@ -1,4 +1,4 @@
-This is pm-gawk.info, produced by makeinfo version 7.0.1 from
+This is pm-gawk.info, produced by makeinfo version 7.1 from
pm-gawk.texi.
Copyright © 2022 Terence Kelly
@@ -11,7 +11,7 @@ Copyright © 2022 Terence Kelly
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; with the
-Invariant Sections being âIntroductionâ and âHistoryâ, no Front-Cover
+Invariant Sections being "Introduction" and "History", no Front-Cover
Texts, and no Back-Cover Texts. A copy of the license is available at
<https://www.gnu.org/licenses/fdl-1.3.html>
INFO-DIR-SECTION Text creation and manipulation
@@ -25,7 +25,7 @@ File: pm-gawk.info, Node: Top, Next: Introduction, Up:
(dir)
General Introduction
********************
-âgawkâ 5.2 introduces a _persistent memory_ feature that can ârememberâ
+âgawkâ 5.2 introduces a _persistent memory_ feature that can "remember"
script-defined variables and functions across executions; pass variables
between unrelated scripts without serializing/parsing text files; and
handle data sets larger than available memory plus swap. This
@@ -42,7 +42,7 @@ Copyright © 2022 Terence Kelly
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; with the
-Invariant Sections being âIntroductionâ and âHistoryâ, no Front-Cover
+Invariant Sections being "Introduction" and "History", no Front-Cover
Texts, and no Back-Cover Texts. A copy of the license is available at
<https://www.gnu.org/licenses/fdl-1.3.html>
@@ -67,10 +67,10 @@ File: pm-gawk.info, Node: Introduction, Next: Quick
Start, Prev: Top, Up: To
GNU AWK (âgawkâ) 5.2, expected in September 2022, introduces a new
_persistent memory_ feature that makes AWK scripting easier and
-sometimes improves performance. The new feature, called âpm-âgawkâ,â
-can ârememberâ script-defined variables and functions across executions
+sometimes improves performance. The new feature, called "pm-âgawkâ,"
+can "remember" script-defined variables and functions across executions
and can pass variables and functions between unrelated scripts without
-serializing/parsing text filesâall with near-zero fuss. pm-âgawkâ does
+serializing/parsing text files--all with near-zero fuss. pm-âgawkâ does
_not_ require non-volatile memory hardware nor any other exotic
infrastructure; it runs on the ordinary conventional computers and
operating systems that most of us have been using for decades.
@@ -79,7 +79,7 @@ operating systems that most of us have been using for decades.
The main âgawkâ documentation(1) covers the basics of the new
persistence feature. This supplementary manual provides additional
detail, tutorial examples, and a peek under the hood of pm-âgawkâ. If
-youâre familiar with âgawkâ and Unix-like environments, dive straight
+you're familiar with âgawkâ and Unix-like environments, dive straight
in:
⢠*note Quick Start:: hits the ground running with a few keystrokes.
@@ -91,11 +91,11 @@ in:
⢠*note Acknowledgments:: thanks those who made pm-âgawkâ happen.
⢠*note Installation:: shows where obtain pm-âgawkâ.
⢠*note Debugging:: explains how to handle suspected bugs.
- ⢠*note History:: traces pm-âgawkââs persistence technology.
+ ⢠*note History:: traces pm-âgawkâ's persistence technology.
-You can find the latest version of this manual, and also the âdirectorâs
-cut,â at the web site for the persistent memory allocator used in
+You can find the latest version of this manual, and also the "director's
+cut," at the web site for the persistent memory allocator used in
pm-âgawkâ:
<http://web.eecs.umich.edu/~tpkelly/pma/>
@@ -125,7 +125,7 @@ File: pm-gawk.info, Node: Quick Start, Next: Examples,
Prev: Introduction, U
2 Quick Start
*************
-Hereâs pm-âgawkâ in action at the âbashâ shell prompt (â$â):
+Here's pm-âgawkâ in action at the âbashâ shell prompt (â$â):
$ truncate -s 4096000 heap.pma
$ export GAWK_PERSIST_FILE=heap.pma
$ gawk 'BEGIN{myvar = 47}'
@@ -140,17 +140,17 @@ one-line AWK script that initializes variable
âmyvarâ, which will reside
in the heap file and thereby outlive the interpreter process that
initialized it. Finally, the fourth command invokes pm-âgawkâ on a
_different_ one-line script that increments and prints âmyvarâ. The
-output shows that pm-âgawkâ has indeed ârememberedâ âmyvarâ across
+output shows that pm-âgawkâ has indeed "remembered" âmyvarâ across
executions of unrelated scripts. (If the âgawkâ executable in your
search â$PATHâ lacks the persistence feature, the output in the above
example will be â7â instead of â54â. *Note Installation::.) To
disable
persistence until you want it again, prevent âgawkâ from finding the
-heap file via âunset GAWK_PERSIST_FILEâ. To permanently âforgetâ
script
+heap file via âunset GAWK_PERSIST_FILEâ. To permanently "forget" script
variables, delete the heap file.
- Toggling persistence by âexportâ-ing and âunsetâ-ing âambientâ
envars
+ Toggling persistence by âexportâ-ing and âunsetâ-ing "ambient"
envars
requires care: Forgetting to âunsetâ when you no longer want persistence
can cause confusing bugs. Fortunately, âbashâ allows you to pass envars
more deliberately, on a per-command basis:
@@ -186,7 +186,7 @@ File: pm-gawk.info, Node: Examples, Next: Performance,
Prev: Quick Start, Up
**********
Our first example uses pm-âgawkâ to streamline analysis of a prose
-corpus, Mark Twainâs âTom Sawyerâ and âHuckleberry Finnâ from
+corpus, Mark Twain's âTom Sawyerâ and âHuckleberry Finnâ from
<https://gutenberg.org/files/74/74-0.txt> and
<https://gutenberg.org/files/76/76-0.txt>. We first convert
non-alphabetic characters to newlines (so each line has at most one
@@ -194,10 +194,10 @@ word) and convert to lowercase:
$ tr -c a-zA-Z '\n' < 74-0.txt | tr A-Z a-z > sawyer.txt
$ tr -c a-zA-Z '\n' < 76-0.txt | tr A-Z a-z > finn.txt
- Itâs easy to count word frequencies with AWKâs associative arrays.
+ It's easy to count word frequencies with AWK's associative arrays.
pm-âgawkâ makes these arrays persistent, so we need not re-ingest the
-entire corpus every time we ask a new question (âread once, analyze
-happily ever afterâ):
+entire corpus every time we ask a new question ("read once, analyze
+happily ever after"):
$ truncate -s 100M twain.pma
$ export GAWK_PERSIST_FILE=twain.pma
$ gawk '{ts[$1]++}' sawyer.txt # ingest
@@ -207,46 +207,46 @@ happily ever afterâ):
2 27
The âtruncateâ command above creates a heap file large enough to store
all of the data it must eventually contain, with plenty of room to
-spare. (As weâll see in *note Sparse Heap Files::, this isnât
+spare. (As we'll see in *note Sparse Heap Files::, this isn't
wasteful.) The âexportâ command ensures that subsequent âgawkâ
invocations activate pm-âgawkâ. The first pm-âgawkâ command stores
âTom
-Sawyerââs word frequencies in associative array âts[]â. Because this
+Sawyerâ's word frequencies in associative array âts[]â. Because this
array is persistent, subsequent pm-âgawkâ commands can access it without
having to parse the input file again.
- Expanding our analysis to encompass a second book is easy. Letâs
+ Expanding our analysis to encompass a second book is easy. Let's
populate a new associative array âhf[]â with the word frequencies in
âHuckleberry Finnâ:
$ gawk '{hf[$1]++}' finn.txt
-Now we can freely intermix accesses to both booksâ data conveniently and
+Now we can freely intermix accesses to both books' data conveniently and
efficiently, without the overhead and coding fuss of repeated input
parsing:
$ gawk 'BEGIN{print ts["river"], hf["river"]}'
26 142
By making AWK more interactive, pm-âgawkâ invites casual
-conversations with data. If weâre curious what words in âFinnâ are
-absent from âSawyerâ, answers (including âflapdoodle,â
âyellocution,â
-and âsockdolagerâ) are easy to find:
+conversations with data. If we're curious what words in âFinnâ are
+absent from âSawyerâ, answers (including "flapdoodle," "yellocution,"
+and "sockdolager") are easy to find:
$ gawk 'BEGIN{for(w in hf) if (!(w in ts)) print w}'
- Rumors of Twainâs death may be exaggerated. If he publishes new
+ Rumors of Twain's death may be exaggerated. If he publishes new
books in the future, it will be easy to incorporate them into our
analysis incrementally. The performance benefits of incremental
processing for common AWK chores such as log file analysis are discussed
in <https://queue.acm.org/detail.cfm?id=3534855> and the companion paper
cited therein, and below in *note Performance::.
- Exercise: The âMarkovâ AWK script on page 79 of Kernighan & Pikeâs
+ Exercise: The "Markov" AWK script on page 79 of Kernighan & Pike's
âThe Practice of Programmingâ generates random text reminiscent of a
given corpus using a simple statistical modeling technique. This script
-consists of a âlearningâ or âtrainingâ phase followed by an
+consists of a "learning" or "training" phase followed by an
output-generation phase. Use pm-âgawkâ to de-couple the two phases and
to allow the statistical model to incrementally ingest additions to the
input corpus.
- Our second example considers another domain that plays to AWKâs
-strengths, data analysis. For simplicity weâll create two small input
+ Our second example considers another domain that plays to AWK's
+strengths, data analysis. For simplicity we'll create two small input
files of numeric data.
$ printf '1\n2\n3\n4\n5\n' > A.dat
$ printf '5\n6\n7\n8\n9\n' > B.dat
@@ -272,8 +272,8 @@ pm-âgawkâ requires changing the above script to ensure
that âminâ and
and _not_ every time the script runs. Furthermore, whereas
script-defined variables such as âminâ retain their values across
pm-âgawkâ executions, built-in AWK variables such as âNRâ are reset to
-zero every time pm-âgawkâ runs, so we canât use them in the same way.
-Hereâs a modified script for pm-âgawkâ:
+zero every time pm-âgawkâ runs, so we can't use them in the same way.
+Here's a modified script for pm-âgawkâ:
$ cat summary_persistent.awk
! init { min = max = $1; init = 1 }
min > $1 { min = $1 }
@@ -371,8 +371,9 @@ This chapter explains several performance advantages that
result from
the implementation of persistent memory in pm-âgawkâ, shows how tuning
the underlying operating system sometimes improves performance, and
presents experimental performance measurements. To make the discussion
-concrete, we use examples from a GNU/Linux systemâGNU utilities atop the
-Linux OSâbut the principles apply to other modern operating systems.
+concrete, we use examples from a GNU/Linux system--GNU utilities atop
+the Linux OS--but the principles apply to other modern operating
+systems.
* Menu:
@@ -392,11 +393,11 @@ File: pm-gawk.info, Node: Constant-Time Array Access,
Next: Virtual Memory and
pm-âgawkâ preserves the efficiency of data access when data structures
are created by one process and later re-used by a different process.
- Consider the associative arrays used to analyze Mark Twainâs books in
+ Consider the associative arrays used to analyze Mark Twain's books in
*note Examples::. We created arrays âts[]â and âhf[]â by reading files
âsawyer.txtâ and âfinn.txtâ. If N denotes the total volume of data in
these files, building the associative arrays typically requires time
-proportional to N, or âO(N) expected timeâ in the lingo of asymptotic
+proportional to N, or "O(N) expected time" in the lingo of asymptotic
analysis. If W is the number of unique words in the input files, the
size of the associative arrays will be proportional to W, or O(W).
Accessing individual array elements requires only _constant_ or O(1)
@@ -410,11 +411,11 @@ earlier in BEGIN{print ts["river"], hf["river"]}, still
requires only
O(1) time, which is asymptotically far superior to the alternatives.
Naïvely reconstructing arrays by re-ingesting all raw inputs in every
âgawkâ process that accesses the arrays would of course require O(N)
-timeâa profligate cost if the text corpus is large. Dumping arrays to
+time--a profligate cost if the text corpus is large. Dumping arrays to
files and re-loading them as needed would reduce the preparation time
for access to O(W). That can be a substantial improvement in practice; N
is roughly 19 times larger than W in our Twain corpus. Nonetheless O(W)
-remains far slower than pm-âgawkââs O(1). As weâll see in *note
+remains far slower than pm-âgawkâ's O(1). As we'll see in *note
Results::, the difference is not merely theoretical.
The persistent memory implementation beneath pm-âgawkâ enables it to
@@ -427,8 +428,8 @@ lookup on the corresponding hash table, which in turn
accesses memory on
the persistent heap. Modern operating systems implement memory-mapped
files in such a way that these memory accesses trigger the bare minimum
of data movement required: Only those parts of the heap file containing
-needed data are âpaged inâ to the memory of the pm-âgawkâ process. In
-the worst case, the heap file is not in the file systemâs in-memory
+needed data are "paged in" to the memory of the pm-âgawkâ process. In
+the worst case, the heap file is not in the file system's in-memory
cache, so the required pages must be faulted into memory from storage.
Our asymptotic analysis of efficiency applies regardless of whether the
heap file is cached or not. The entire heap file is _not_ accessed
@@ -448,7 +449,7 @@ File: pm-gawk.info, Node: Virtual Memory and Big Data,
Next: Sparse Heap Files
Small data sets seldom spoil the delights of AWK by causing performance
troubles, with or without persistence. As the size of the âgawkâ
-interpreterâs internal data structures approaches the capacity of
+interpreter's internal data structures approaches the capacity of
physical memory, however, acceptable performance requires understanding
modern operating systems and sometimes tuning them. Fortunately
pm-âgawkâ offers new degrees of control for performance-conscious users
@@ -458,18 +459,18 @@ perplexity.
Modern operating systems feature âvirtual memoryâ that strives to
appear both larger than installed DRAM (which is small) and faster than
-installed storage devices (which are slow). As a programâs memory
+installed storage devices (which are slow). As a program's memory
footprint approaches the capacity of DRAM, the virtual memory system
-transparently âpagesâ (moves) the programâs data between DRAM and a
+transparently âpagesâ (moves) the program's data between DRAM and a
âswap areaâ on a storage device. Paging can degrade performance mildly
-or severely, depending on the programâs memory access patterns. Random
+or severely, depending on the program's memory access patterns. Random
accesses to large data structures can trigger excessive paging and
-dramatic slowdown. Unfortunately, the hash tables beneath AWKâs
+dramatic slowdown. Unfortunately, the hash tables beneath AWK's
signature associative arrays inherently require random memory accesses,
so large associative arrays can be problematic.
Persistence changes the rules in our favor: The OS pages data to
-pm-âgawkââs _heap file_ instead of the swap area. This wonât help
+pm-âgawkâ's _heap file_ instead of the swap area. This won't help
performance much if the heap file resides in a conventional
storage-backed file system. On Unix-like systems, however, we may place
the heap file in a DRAM-backed file system such as â/dev/shm/â, which
@@ -478,18 +479,18 @@ the heap file in such a file system is a reasonable
expedient, with two
caveats: First, keep in mind that DRAM-backed file systems perish when
the machine reboots or crashes, so you must copy the heap file to a
conventional storage-backed file system when your computation is done.
-Second, pm-âgawkââs memory footprint canât exceed available DRAM if you
+Second, pm-âgawkâ's memory footprint can't exceed available DRAM if you
place the heap file in a DRAM-backed file system.
Tuning OS paging parameters may improve performance if you decide to
run pm-âgawkâ with a heap file in a conventional storage-backed file
system. Some OSes have unhelpful default habits regarding modified
-(âdirtyâ) memory backed by files. For example, the OS may write dirty
+("dirty") memory backed by files. For example, the OS may write dirty
memory pages to the heap file periodically and/or when the OS believes
-that âtoo muchâ memory is dirty. Such âeagerâ writeback can degrade
+that "too much" memory is dirty. Such "eager" writeback can degrade
performance noticeably and brings no benefit to pm-âgawkâ. Fortunately
some OSes allow paging defaults to be over-ridden so that writeback is
-âlazyâ rather than eager. For Linux see the discussion of the
âdirty_*â
+"lazy" rather than eager. For Linux see the discussion of the âdirty_*â
parameters at
<https://www.kernel.org/doc/html/latest/admin-guide/sysctl/vm.html>.
Changing these parameters can prevent wasteful eager paging:(1)
@@ -512,22 +513,22 @@ File: pm-gawk.info, Node: Sparse Heap Files, Next:
Persistence versus Durabili
4.3 Sparse Heap Files
=====================
-To be frugal with storage resources, pm-âgawkââs heap file should be
+To be frugal with storage resources, pm-âgawkâ's heap file should be
created as a âsparse fileâ: a file whose logical size is larger than its
storage resource footprint. Modern file systems support sparse files,
which are easy to create using the âtruncateâ tool shown in our
examples.
- Letâs first create a conventional _non_-sparse file using âechoâ:
+ Let's first create a conventional _non_-sparse file using âechoâ:
$ echo hi > dense
$ ls -l dense
-rw-rw-r--. 1 me me 3 Aug 5 23:08 dense
$ du -h dense
4.0K dense
The âlsâ utility reports that file âdenseâ is three bytes long (two for
-the letters in âhiâ plus one for the newline). The âduâ utility
reports
-that this file consumes 4 KiB of storageâone block of disk, as small as
-a non-sparse fileâs storage footprint can be. Now letâs use âtruncateâ
+the letters in "hi" plus one for the newline). The âduâ utility reports
+that this file consumes 4 KiB of storage--one block of disk, as small as
+a non-sparse file's storage footprint can be. Now let's use âtruncateâ
to create a logically enormous sparse file and check its physical size:
$ truncate -s 1T sparse
$ ls -l sparse
@@ -540,26 +541,26 @@ storage whatsoever. The file system will allocate
physical storage
resources beneath this file as data is written to it; reading unwritten
regions of the file yields zeros.
- The âpay as you goâ storage cost of sparse files offers both
+ The "pay as you go" storage cost of sparse files offers both
convenience and control for pm-âgawkâ users. If your file system
supports sparse files, go ahead and create lavishly capacious heap files
for pm-âgawkâ. Their logical size costs nothing and persistent memory
-allocation within pm-âgawkâ wonât fail until physical storage resources
+allocation within pm-âgawkâ won't fail until physical storage resources
beneath the file system are exhausted. But if instead you want to
_prevent_ a heap file from consuming too much storage, simply set its
-initial size to whatever bound you wish to enforce; it wonât eat more
+initial size to whatever bound you wish to enforce; it won't eat more
disk than that. Copying sparse files with GNU âcpâ creates sparse
copies by default.
File-system encryption can preclude sparse files: If the cleartext of
a byte offset range within a file is all zero bytes, the corresponding
-ciphertext probably shouldnât be all zeros! Encrypting at the storage
+ciphertext probably shouldn't be all zeros! Encrypting at the storage
layer instead of the file system layer may offer acceptable security
while still permitting file systems to implement sparse files.
Sometimes you might prefer a dense heap file backed by pre-allocated
storage resources, for example to increase the likelihood that
-pm-âgawkââs internal memory allocation will succeed until the persistent
+pm-âgawkâ's internal memory allocation will succeed until the persistent
heap occupies the entire heap file. The âfallocateâ utility will do the
trick:
$ fallocate -l 1M mibi
@@ -576,12 +577,12 @@ File: pm-gawk.info, Node: Persistence versus Durability,
Next: Experiments, P
=================================
Arguably the most important general guideline for good performance in
-computer systems is, âpay only for what you need.â(1) To apply this
+computer systems is, "pay only for what you need."(1) To apply this
maxim to pm-âgawkâ we must distinguish two concepts that are frequently
conflated: persistence and durability.(2) (A third logically distinct
concept is the subject of *note Data Integrity::.)
- âPersistentâ data outlive the processes that access them, but donât
+ âPersistentâ data outlive the processes that access them, but don't
necessarily last forever. For example, as explained in âman
mq_overviewâ, message queues are persistent because they exist until the
system shuts down. âDurableâ data reside on a physical medium that
@@ -599,7 +600,7 @@ systems such as â/dev/shm/â are persistent but not
durable.
performance-conscious pm-âgawkâ users pay the added premium for
durability only when persistence alone is not sufficient. Two ways to
avoid unwanted durability overheads were discussed in *note Virtual
-Memory and Big Data::: Place pm-âgawkââs heap file in a DRAM-backed file
+Memory and Big Data::: Place pm-âgawkâ's heap file in a DRAM-backed file
system, or disable eager writeback to the heap file. Expedients such as
these enable you to remove durability overheads from the critical path
of multi-stage data analyses even when you want heap files to eventually
@@ -614,14 +615,14 @@ AWK or C program to generate a stream of random text, or
just cobble
together a quick and dirty generator on the command line:
$ openssl rand --base64 1000000 | tr -c a-zA-Z '\n' > random.dat
Varying the size of random inputs can, for example, find where
-performance âfalls off the cliffâ as pm-âgawkââs memory footprint
+performance "falls off the cliff" as pm-âgawkâ's memory footprint
exceeds the capacity of DRAM and paging begins.
Experiments require careful methodology, especially when the heap
-file is in a storage-backed file system. Overlooking the file systemâs
+file is in a storage-backed file system. Overlooking the file system's
DRAM cache can easily misguide interpretation of results and foil
repeatability. Fortunately Linux allows us to invalidate the file
-system cache and thus mimic a âcold startâ condition resembling the
+system cache and thus mimic a "cold start" condition resembling the
immediate aftermath of a machine reboot. Accesses to ordinary files on
durable storage will then be served from the storage devices, not from
cache. Read about âsyncâ and â/proc/sys/vm/drop_cachesâ at
@@ -634,11 +635,11 @@ Certain well-known textbook algorithms continue to grind
away
fruitlessly long after having computed all of their output.
See <https://queue.acm.org/detail.cfm?id=3424304>.
- (2) In recent years the term âpersistent memoryâ has sometimes been
-used to denote novel byte-addressable non-volatile memory hardwareâan
+ (2) In recent years the term "persistent memory" has sometimes been
+used to denote novel byte-addressable non-volatile memory hardware--an
unfortunate practice that contradicts sensible long-standing convention
and causes needless confusion. NVM provides durability. Persistent
-memory is a software abstraction that doesnât require NVM. See
+memory is a software abstraction that doesn't require NVM. See
<https://queue.acm.org/detail.cfm?id=3358957>.
@@ -657,31 +658,31 @@ from <http://web.eecs.umich.edu/~tpkelly/pma/>.
word frequency queries over a text corpus: The naïve approach of reading
the corpus into an associative array for every query; manually dumping a
text representation of the word-frequency table and manually loading it
-prior to a query; using âgawkââs ârwarrayâ extension to dump and
load an
+prior to a query; using âgawkâ's ârwarrayâ extension to dump and load
an
associative array; and using pm-âgawkâ to maintain a persistent
associative array.
- Comments at the top explain prerequisites. Lines 8â10 set input
+ Comments at the top explain prerequisites. Lines 8-10 set input
parameters: the directory where tests are run and where files including
the heap file are held, the off-the-shelf timer used to measure run
times and other performance characteristics such as peak memory usage,
and the size of the input. The default input size results in pm-âgawkâ
memory footprints under 3 GiB, which is large enough for interesting
-results and small enough to fit in DRAM and avoid paging on todayâs
-computers. Lines 13â14 define a homebrew timer.
+results and small enough to fit in DRAM and avoid paging on today's
+computers. Lines 13-14 define a homebrew timer.
Two sections of the script are relevant if the default run directory
is changed from â/dev/shm/â to a directory in a conventional
-storage-backed file system: Lines 15â17 define the mechanism for
-clearing file data cached in DRAM; lines 23â30 set Linux kernel
+storage-backed file system: Lines 15-17 define the mechanism for
+clearing file data cached in DRAM; lines 23-30 set Linux kernel
parameters to discourage eager paging.
- Lines 37â70 spit out, compile, and run a little C program to generate
+ Lines 37-70 spit out, compile, and run a little C program to generate
a random text corpus. This program is fast, flexible, and
deterministic, generating the same random output given the same
parameters.
- Lines 71â100 run the four different AWK approaches on the same random
+ Lines 71-100 run the four different AWK approaches on the same random
input, reporting separately the time to build and to query the
associative array containing word frequencies.
@@ -807,7 +808,7 @@ results. Keep in mind that performance measurements are
often sensitive
to seemingly irrelevant factors. For example, the program that runs
first may have the advantage of a cooler CPU; later contestants may
start with a hot CPU and consequent clock throttling by a modern
-processorâs thermal regulation apparatus. Very generally, performance
+processor's thermal regulation apparatus. Very generally, performance
measurement is a notoriously tricky business. For scripting, whose main
motive is convenience rather than speed, the proper role for performance
measurements is to qualitatively test hypotheses such as those that
@@ -836,28 +837,28 @@ The âfreqtblâ and ârwarrayâ approaches build an
associative array of
word frequencies, serialize it to an intermediate file, and then read
the entire intermediate file prior to serving queries; the former does
this manually and the latter uses a âgawkâ extension. Both can serve
-queries in roughly ten seconds, not four minutes. As weâd expect from
+queries in roughly ten seconds, not four minutes. As we'd expect from
the asymptotic analysis, performing work proportional to the number of
words is preferable to work proportional to the size of the raw input
-corpus: O(W) time is faster than O(N). And as weâd expect, pm-âgawkââs
+corpus: O(W) time is faster than O(N). And as we'd expect, pm-âgawkâ's
constant-time queries are faster still, by roughly two orders of
magnitude. For the computations considered here, pm-âgawkâ makes the
difference between blink-of-an-eye interactive queries and response
-times long enough for the userâs mind to wander.
+times long enough for the user's mind to wander.
Whereas âfreqtblâ and ârwarrayâ reconstruct an associative array
prior to accessing an individual element, pm-âgawkâ stores a ready-made
-associative array in persistent memory. Thatâs why its intermediate
+associative array in persistent memory. That's why its intermediate
file (the heap file) is much larger than the other two intermediate
-files, why the heap file is nearly as large as pm-âgawkââs peak memory
+files, why the heap file is nearly as large as pm-âgawkâ's peak memory
footprint while building the persistent array, and why its memory
footprint is very small while serving a query that accesses a single
array element. The upside of the large heap file is O(1) access instead
-of O(W)âa classic time-space tradeoff. If storage is a scarce resource,
-all three intermediate files can be compressed, âfreqtblâ by a factor of
-roughly 2.7, ârwarrayâ by roughly 5.6x, and pm-âgawkâ by roughly 11x
-using âxzâ. Compression is CPU-intensive and slow, another time-space
-tradeoff.
+of O(W)--a classic time-space tradeoff. If storage is a scarce
+resource, all three intermediate files can be compressed, âfreqtblâ by a
+factor of roughly 2.7, ârwarrayâ by roughly 5.6x, and pm-âgawkâ by
+roughly 11x using âxzâ. Compression is CPU-intensive and slow, another
+time-space tradeoff.
File: pm-gawk.info, Node: Data Integrity, Next: Acknowledgments, Prev:
Performance, Up: Top
@@ -870,7 +871,7 @@ command-line typos can harm your data, but precautions can
mitigate
these risks. In scripting scenarios it usually suffices to create safe
backups of important files at appropriate times. As simple as this
sounds, care is needed to achieve genuine protection and to reduce the
-costs of backups. Hereâs a prudent yet frugal way to back up a heap
+costs of backups. Here's a prudent yet frugal way to back up a heap
file between uses:
$ backup_base=heap_bk_`date +%s`
$ cp --reflink=always heap.pma $backup_base.pma
@@ -887,30 +888,30 @@ Timestamps in backup filenames make it easy to find the
most recent copy
if the heap file is damaged, even if last-mod metadata are inadvertently
altered.
- The âcpâ commandâs â--reflinkâ option reduces both the storage
+ The âcpâ command's â--reflinkâ option reduces both the storage
footprint of the copy and the time required to make it. Just as sparse
-files provide âpay as you goâ storage footprints, reflink copying offers
-âpay as you _change_â storage costs.(1) A reflink copy shares storage
+files provide "pay as you go" storage footprints, reflink copying offers
+"pay as you _change_" storage costs.(1) A reflink copy shares storage
with the original file. The file system ensures that subsequent changes
-to either file donât affect the other. Reflink copying is not available
+to either file don't affect the other. Reflink copying is not available
on all file systems; XFS, BtrFS, and OCFS2 currently support it.(2)
Fortunately you can install, say, an XFS file system _inside an ordinary
file_ on some other file system, such as âext4â.(3)
After creating a backup copy of the heap file we use âsyncâ to force
it down to durable media. Otherwise the copy may reside only in
-volatile DRAM memoryâthe file systemâs cacheâwhere an OS crash or power
-failure could corrupt it.(4) After âsyncâ-ing the backup we create and
-âsyncâ a âsuccess indicatorâ file with extension â.doneâ to
address a
-nasty corner case: Power may fail _while_ a backup is being copied from
-the primary heap file, leaving either file, or both, corrupt on
-storageâa particularly worrisome possibility for jobs that run
+volatile DRAM memory--the file system's cache--where an OS crash or
+power failure could corrupt it.(4) After âsyncâ-ing the backup we
+create and âsyncâ a "success indicator" file with extension â.doneâ to
+address a nasty corner case: Power may fail _while_ a backup is being
+copied from the primary heap file, leaving either file, or both, corrupt
+on storage--a particularly worrisome possibility for jobs that run
unattended. Upon reboot, each â.doneâ file attests that the
corresponding backup succeeded, making it easy to identify the most
recent successful backup.
- Finally, if youâre serious about tolerating failures you must âtrain
-as you would fightâ by testing your hardware/software stack against
+ Finally, if you're serious about tolerating failures you must "train
+as you would fight" by testing your hardware/software stack against
realistic failures. For realistic power-failure testing, see
<https://queue.acm.org/detail.cfm?id=3400902>.
@@ -929,7 +930,7 @@ If reflink copying is not available, â--sparse=alwaysâ
should be used.
âsyncâ returns only after all file system data are flushed down to
durable storage. If your âsyncâ is unreliable, write a little C program
that calls âfsync()â to flush a file. To be safe, also call âfsync()â
-on every enclosing directory on the fileâs ârealpath()â up to the root.
+on every enclosing directory on the file's ârealpath()â up to the root.
File: pm-gawk.info, Node: Acknowledgments, Next: Installation, Prev: Data
Integrity, Up: Top
@@ -948,7 +949,7 @@ Cygwin. Nelson H. F. Beebe provided access to Solaris
machines for
testing. Robbins, Volos, Li, Tan, Jon Bentley, and Hans Boehm reviewed
drafts of this user manual and provided useful feedback. Bentley
suggested the min/max/mean example in *note Examples::, and also the
-exercise of making Kernighan & Pikeâs âMarkovâ script persistent. Volos
+exercise of making Kernighan & Pike's "Markov" script persistent. Volos
provided and tested the advice on tuning OS parameters in *note Virtual
Memory and Big Data::. Stan Park provided insights about virtual
memory, file systems, and utilities.
@@ -980,11 +981,11 @@ For bugs unrelated to persistence, see the âgawkâ
documentation, e.g.,
âGAWK: Effective AWK Programmingâ, available at
<https://www.gnu.org/software/gawk/manual/>.
- If pm-âgawkâ doesnât behave as you expect, first consider whether
-youâre using the heap file that you intend; using the wrong heap file is
+ If pm-âgawkâ doesn't behave as you expect, first consider whether
+you're using the heap file that you intend; using the wrong heap file is
a common mistake. Other fertile sources of bugs for newcomers are the
fact that a âBEGINâ block is executed every time pm-âgawkâ runs, which
-isnât always what you really want, and the fact that built-in AWK
+isn't always what you really want, and the fact that built-in AWK
variables such as âNRâ are always reset to zero every time the
interpreter runs. See the discussion of initialization surrounding the
min/max/mean script in *note Examples::.
@@ -1001,7 +1002,7 @@ will trigger extensive integrity checks within âpmaâ.
Ensure that
integrity checks can be very slow. If assertions fail, that likely
indicates bugs somewhere in pm-âgawkâ. Report such bugs to me (Terence
Kelly) and also following the procedures in the main âgawkâ
-documentation. Specify what version of âgawkâ youâre using, and try to
+documentation. Specify what version of âgawkâ you're using, and try to
provide a small and simple script that reliably reproduces the bug.
@@ -1026,24 +1027,24 @@ began to connect the dots that make persistent
scripting possible, and a
further decade would pass before pm-âgawkâ came together.
Circa 2011 while working at HP Labs I developed a fault-tolerant
-distributed computing platform called âKen,â which contained a
+distributed computing platform called "Ken," which contained a
persistent memory allocator that resembles a simplified âpmaâ: It
presented a âmalloc()â-like C interface and it allocated memory from a
file-backed memory mapping. Experience with Ken convinced me that the
software abstraction of persistent memory offers important attractions
compared with the alternatives for managing persistent data (e.g.,
-relational databases and key-value stores). Unfortunately, Kenâs
-allocator is so deeply intertwined with the rest of Ken that itâs
-essentially inseparable; to enjoy the benefits of Kenâs persistent
-memory, one must âbuy inâ to a larger and more complicated value
-proposition. Whatever its other virtues might be, Ken isnât ideal for
+relational databases and key-value stores). Unfortunately, Ken's
+allocator is so deeply intertwined with the rest of Ken that it's
+essentially inseparable; to enjoy the benefits of Ken's persistent
+memory, one must "buy in" to a larger and more complicated value
+proposition. Whatever its other virtues might be, Ken isn't ideal for
showcasing the benefits of persistent memory in isolation.
Another entangled aspect of Ken was a crash-tolerance mechanism that,
in retrospect, can be viewed as a user-space implementation of
failure-atomic âmsync()â. The first post-Ken disentanglement effort
isolated the crash-tolerance mechanism and implemented it in the Linux
-kernel, calling the result âfailure-atomic âmsync()ââ (FAMS). FAMS
+kernel, calling the result "failure-atomic âmsync()â" (FAMS). FAMS
strengthens the semantics of ordinary standard âmsync()â by guaranteeing
that the durable state of a memory-mapped file always reflects the most
recent successful âmsync()â call, even in the presence of failures such
@@ -1060,17 +1061,17 @@ ubiquitous GNU âdbmâ (âgdbmâ) database
In recent years my attention has returned to the advantages of
persistent memory programming, lately a hot topic thanks to the
commercial availability of byte-addressable non-volatile memory hardware
-(which, confusingly, is nowadays marketed as âpersistent memoryâ). The
+(which, confusingly, is nowadays marketed as "persistent memory"). The
software abstraction of persistent memory and the corresponding
programming style, however, are perfectly compatible with _conventional_
-computersâmachines with neither non-volatile memory nor any other
+computers--machines with neither non-volatile memory nor any other
special hardware or software. I wrote a few papers making this point,
for example <https://queue.acm.org/detail.cfm?id=3358957>.
In early 2022 I wrote a new stand-alone persistent memory allocator,
âpmaâ, to make persistent memory programming easy on conventional
hardware. The âpmaâ interface is compatible with âmalloc()â and,
unlike
-Kenâs allocator, âpmaâ is not coupled to a particular crash-tolerance
+Ken's allocator, âpmaâ is not coupled to a particular crash-tolerance
mechanism. Using âpmaâ is easy and, at least to some, enjoyable.
Ken had been integrated into prototype forks of both the V8
@@ -1095,43 +1096,43 @@ of the prototype, including performance measurements,
is available at
- I enjoy several aspects of pm-âgawkâ. Itâs unobtrusive; as you gain
+ I enjoy several aspects of pm-âgawkâ. It's unobtrusive; as you gain
familiarity and experience, it fades into the background of your
-scripting. Itâs simple in both concept and implementation, and more
+scripting. It's simple in both concept and implementation, and more
importantly it simplifies your scripts; much of its value is measured
not in the code it enables you to write but rather in the code it lets
-you discard. Itâs all that I needed for my dissertation research twenty
+you discard. It's all that I needed for my dissertation research twenty
years ago, and more. Anecdotally, it appears to inspire creativity in
-early adopters, who have devised uses that pm-âgawkââs designers never
-anticipated. Iâm curious to see what new purposes you find for it.
+early adopters, who have devised uses that pm-âgawkâ's designers never
+anticipated. I'm curious to see what new purposes you find for it.
Tag Table:
-Node: Top815
-Node: Introduction2036
-Ref: Introduction-Footnote-14464
-Node: Quick Start4568
-Node: Examples7485
-Node: Performance16627
-Node: Constant-Time Array Access17337
-Node: Virtual Memory and Big Data20704
-Ref: Virtual Memory and Big Data-Footnote-124341
-Node: Sparse Heap Files24481
-Node: Persistence versus Durability27580
-Ref: Persistence versus Durability-Footnote-131060
-Ref: Persistence versus Durability-Footnote-231306
-Node: Experiments31707
-Node: Results43458
-Node: Data Integrity47097
-Ref: Data Integrity-Footnote-149964
-Ref: Data Integrity-Footnote-250061
-Ref: Data Integrity-Footnote-350213
-Ref: Data Integrity-Footnote-450307
-Node: Acknowledgments50688
-Node: Installation51888
-Node: Debugging52718
-Node: History54467
+Node: Top805
+Node: Introduction2014
+Ref: Introduction-Footnote-14423
+Node: Quick Start4527
+Node: Examples7430
+Node: Performance16514
+Node: Constant-Time Array Access17222
+Node: Virtual Memory and Big Data20572
+Ref: Virtual Memory and Big Data-Footnote-124175
+Node: Sparse Heap Files24315
+Node: Persistence versus Durability27389
+Ref: Persistence versus Durability-Footnote-130850
+Ref: Persistence versus Durability-Footnote-231096
+Node: Experiments31490
+Node: Results43225
+Node: Data Integrity46849
+Ref: Data Integrity-Footnote-149687
+Ref: Data Integrity-Footnote-249784
+Ref: Data Integrity-Footnote-349936
+Ref: Data Integrity-Footnote-450030
+Node: Acknowledgments50409
+Node: Installation51603
+Node: Debugging52433
+Node: History54174
End Tag Table
http://git.sv.gnu.org/cgit/gawk.git/commit/?id=70744b282d321e833683fcd09a4c80b69bd3997b
commit 70744b282d321e833683fcd09a4c80b69bd3997b
Merge: 09c983cd ac764e2c
Author: Arnold D. Robbins <arnold@skeeve.com>
Date: Thu Sep 19 18:10:01 2024 +0300
Merge branch 'gawk-5.3-stable' into stable/fpat-doc
http://git.sv.gnu.org/cgit/gawk.git/commit/?id=09c983cdb4192875bf8ddd8d7c63bf6bdc8d406d
commit 09c983cdb4192875bf8ddd8d7c63bf6bdc8d406d
Merge: 7406a978 e278715c
Author: Arnold D. Robbins <arnold@skeeve.com>
Date: Tue Sep 17 09:08:09 2024 +0300
Merge branch 'gawk-5.3-stable' into stable/fpat-doc
http://git.sv.gnu.org/cgit/gawk.git/commit/?id=7406a97847edad2f1761419844e4f834fe1eb98a
commit 7406a97847edad2f1761419844e4f834fe1eb98a
Merge: 8a68083e 544423d4
Author: Arnold D. Robbins <arnold@skeeve.com>
Date: Mon Sep 16 08:52:03 2024 +0300
Merge branch 'gawk-5.3-stable' into stable/fpat-doc
diff --cc doc/gawk.info
index 753cb5fe,0082feb4..50331a8a
--- a/doc/gawk.info
+++ b/doc/gawk.info
@@@ -40051,526 -40053,526 +40051,526 @@@ Node: Skipping intervening26589
Node: Allowing trailing data266700
Node: Fields with fixed data267761
Node: Splitting By Content269383
-Ref: Splitting By Content-Footnote-1273833
-Node: More CSV273996
-Node: FS versus FPAT275654
-Node: Testing field creation276854
-Node: Multiple Line278628
-Node: Getline285097
-Node: Plain Getline287685
-Node: Getline/Variable290333
-Node: Getline/File291529
-Node: Getline/Variable/File292977
-Ref: Getline/Variable/File-Footnote-1294622
-Node: Getline/Pipe294718
-Node: Getline/Variable/Pipe297526
-Node: Getline/Coprocess298709
-Node: Getline/Variable/Coprocess300032
-Node: Getline Notes300798
-Node: Getline Summary304775
-Ref: table-getline-variants305219
-Node: Read Timeout306123
-Ref: Read Timeout-Footnote-1310085
-Node: Retrying Input310143
-Node: Command-line directories311410
-Node: Input Summary312348
-Node: Input Exercises315728
-Node: Printing316166
-Node: Print318109
-Node: Print Examples319610
-Node: Output Separators322455
-Node: OFMT324562
-Node: Printf326275
-Node: Basic Printf327080
-Node: Control Letters328715
-Node: Format Modifiers334161
-Node: Printf Examples340433
-Node: Redirection342974
-Node: Special FD350746
-Ref: Special FD-Footnote-1354044
-Node: Special Files354122
-Node: Other Inherited Files354751
-Node: Special Network355816
-Node: Special Caveats356704
-Node: Close Files And Pipes357687
-Ref: Close Files And Pipes-Footnote-1363811
-Node: Close Return Value363959
-Ref: table-close-pipe-return-values365230
-Ref: Close Return Value-Footnote-1366061
-Node: Noflush366217
-Node: Nonfatal367725
-Node: Output Summary370140
-Node: Output Exercises371426
-Node: Expressions372117
-Node: Values373317
-Node: Constants373995
-Node: Scalar Constants374690
-Ref: Scalar Constants-Footnote-1377266
-Ref: Scalar Constants-Footnote-2377516
-Node: Nondecimal-numbers377596
-Node: Regexp Constants380709
-Node: Using Constant Regexps381255
-Node: Standard Regexp Constants381901
-Node: Strong Regexp Constants385197
-Node: Variables389040
-Node: Using Variables389705
-Node: Assignment Options391679
-Node: Conversion394230
-Node: Strings And Numbers394762
-Ref: Strings And Numbers-Footnote-1397972
-Node: Locale influences conversions398081
-Ref: table-locale-affects400919
-Node: All Operators401561
-Node: Arithmetic Ops402202
-Node: Concatenation405025
-Ref: Concatenation-Footnote-1407961
-Node: Assignment Ops408080
-Ref: table-assign-ops413207
-Node: Increment Ops414588
-Node: Truth Values and Conditions418179
-Node: Truth Values419273
-Node: Typing and Comparison420353
-Node: Variable Typing421185
-Ref: Variable Typing-Footnote-1427829
-Ref: Variable Typing-Footnote-2427909
-Node: Comparison Operators427990
-Ref: table-relational-ops428417
-Node: POSIX String Comparison432093
-Ref: POSIX String Comparison-Footnote-1433850
-Ref: POSIX String Comparison-Footnote-2433993
-Node: Boolean Ops434077
-Ref: Boolean Ops-Footnote-1438751
-Node: Conditional Exp438847
-Node: Function Calls440627
-Node: Precedence444574
-Node: Locales448437
-Node: Expressions Summary450113
-Node: Patterns and Actions452768
-Node: Pattern Overview453904
-Node: Regexp Patterns455629
-Node: Expression Patterns456175
-Node: Ranges460080
-Node: BEGIN/END463254
-Node: Using BEGIN/END464063
-Ref: Using BEGIN/END-Footnote-1466971
-Node: I/O And BEGIN/END467081
-Node: BEGINFILE/ENDFILE469563
-Node: Empty472993
-Node: Using Shell Variables473310
-Node: Action Overview475646
-Node: Statements478082
-Node: If Statement479978
-Node: While Statement481541
-Node: Do Statement483629
-Node: For Statement484813
-Node: Switch Statement488168
-Node: Break Statement490717
-Node: Continue Statement492909
-Node: Next Statement494840
-Node: Nextfile Statement497319
-Node: Exit Statement500172
-Node: Built-in Variables502699
-Node: User-modified503876
-Node: Auto-set512083
-Ref: Auto-set-Footnote-1530167
-Ref: Auto-set-Footnote-2530385
-Node: ARGC and ARGV530441
-Node: Pattern Action Summary534870
-Node: Arrays537476
-Node: Array Basics538849
-Node: Array Intro539697
-Ref: figure-array-elements541708
-Ref: Array Intro-Footnote-1544561
-Node: Reference to Elements544693
-Node: Assigning Elements547213
-Node: Array Example547708
-Node: Scanning an Array549670
-Node: Controlling Scanning552765
-Ref: Controlling Scanning-Footnote-1559400
-Node: Numeric Array Subscripts559724
-Node: Uninitialized Subscripts561992
-Node: Delete563665
-Ref: Delete-Footnote-1566477
-Node: Multidimensional566534
-Node: Multiscanning569737
-Node: Arrays of Arrays571404
-Node: Arrays Summary575708
-Node: Functions577895
-Node: Built-in579027
-Node: Calling Built-in580216
-Node: Boolean Functions582256
-Node: Numeric Functions582818
-Ref: Numeric Functions-Footnote-1587003
-Ref: Numeric Functions-Footnote-2587686
-Ref: Numeric Functions-Footnote-3587738
-Node: String Functions588014
-Ref: String Functions-Footnote-1614465
-Ref: String Functions-Footnote-2614597
-Ref: String Functions-Footnote-3614853
-Node: Gory Details614940
-Ref: table-sub-escapes616949
-Ref: table-sub-proposed618580
-Ref: table-posix-sub620075
-Ref: table-gensub-escapes621748
-Ref: Gory Details-Footnote-1622667
-Node: I/O Functions622821
-Ref: table-system-return-values629497
-Ref: I/O Functions-Footnote-1631659
-Ref: I/O Functions-Footnote-2631807
-Node: Time Functions631927
-Ref: Time Functions-Footnote-1643639
-Ref: Time Functions-Footnote-2643707
-Ref: Time Functions-Footnote-3643869
-Ref: Time Functions-Footnote-4643980
-Ref: Time Functions-Footnote-5644096
-Ref: Time Functions-Footnote-6644323
-Node: Bitwise Functions644601
-Ref: table-bitwise-ops645199
-Ref: Bitwise Functions-Footnote-1651441
-Ref: Bitwise Functions-Footnote-2651618
-Node: Type Functions651813
-Node: I18N Functions653984
-Node: User-defined655719
-Node: Definition Syntax656465
-Ref: Definition Syntax-Footnote-1662283
-Node: Function Example662358
-Ref: Function Example-Footnote-1665337
-Node: Function Calling665359
-Node: Calling A Function665951
-Node: Variable Scope666921
-Node: Pass By Value/Reference669975
-Node: Function Caveats672703
-Ref: Function Caveats-Footnote-1674794
-Node: Return Statement674914
-Node: Dynamic Typing677946
-Node: Dynamic Typing Awk678524
-Node: Dynamic Typing Gawk680662
-Node: Indirect Calls684032
-Node: Functions Summary695169
-Node: Library Functions698135
-Ref: Library Functions-Footnote-1701683
-Ref: Library Functions-Footnote-2701828
-Node: Library Names702003
-Ref: Library Names-Footnote-1705774
-Ref: Library Names-Footnote-2706001
-Node: General Functions706095
-Node: Strtonum Function707365
-Node: Assert Function710447
-Node: Round Function713897
-Node: Cliff Random Function715469
-Node: Ordinal Functions716493
-Ref: Ordinal Functions-Footnote-1719596
-Ref: Ordinal Functions-Footnote-2719848
-Node: Join Function720062
-Ref: Join Function-Footnote-1721860
-Node: Getlocaltime Function722064
-Node: Readfile Function725838
-Node: Shell Quoting727867
-Node: Isnumeric Function729323
-Node: To CSV Function730759
-Node: Data File Management732851
-Node: Filetrans Function733483
-Node: Rewind Function737759
-Node: File Checking739730
-Ref: File Checking-Footnote-1741096
-Node: Empty Files741301
-Node: Ignoring Assigns743364
-Node: Getopt Function744938
-Ref: Getopt Function-Footnote-1760756
-Node: Passwd Functions760968
-Ref: Passwd Functions-Footnote-1770103
-Node: Group Functions770191
-Ref: Group Functions-Footnote-1778315
-Node: Walking Arrays778526
-Node: Library Functions Summary781572
-Node: Library Exercises782992
-Node: Sample Programs783477
-Node: Running Examples784259
-Node: Clones785011
-Node: Cut Program786279
-Node: Egrep Program796703
-Node: Id Program806002
-Node: Split Program816094
-Ref: Split Program-Footnote-1826307
-Node: Tee Program826492
-Node: Uniq Program829398
-Node: Wc Program837258
-Node: Bytes vs. Characters837653
-Node: Using extensions839253
-Node: wc program840031
-Node: Miscellaneous Programs845024
-Node: Dupword Program846249
-Node: Alarm Program848298
-Node: Translate Program853201
-Ref: Translate Program-Footnote-1857910
-Node: Labels Program858188
-Ref: Labels Program-Footnote-1861623
-Node: Word Sorting861707
-Node: History Sorting865881
-Node: Extract Program868154
-Node: Simple Sed876407
-Node: Igawk Program879617
-Ref: Igawk Program-Footnote-1894827
-Ref: Igawk Program-Footnote-2895033
-Ref: Igawk Program-Footnote-3895163
-Node: Anagram Program895290
-Node: Signature Program898376
-Node: Programs Summary899626
-Node: Programs Exercises900880
-Ref: Programs Exercises-Footnote-1905709
-Node: Advanced Features905795
-Node: Nondecimal Data908276
-Node: Boolean Typed Values909906
-Node: Array Sorting911863
-Node: Controlling Array Traversal912592
-Ref: Controlling Array Traversal-Footnote-1921095
-Node: Array Sorting Functions921217
-Ref: Array Sorting Functions-Footnote-1927314
-Node: Two-way I/O927522
-Ref: Two-way I/O-Footnote-1935493
-Ref: Two-way I/O-Footnote-2935684
-Node: TCP/IP Networking935766
-Node: Profiling938934
-Node: Persistent Memory948604
-Ref: Persistent Memory-Footnote-1958176
-Node: Extension Philosophy958307
-Node: Advanced Features Summary959834
-Node: Internationalization962100
-Node: I18N and L10N963802
-Node: Explaining gettext964497
-Ref: Explaining gettext-Footnote-1970633
-Ref: Explaining gettext-Footnote-2970826
-Node: Programmer i18n970991
-Ref: Programmer i18n-Footnote-1976103
-Node: Translator i18n976152
-Node: String Extraction976982
-Ref: String Extraction-Footnote-1978158
-Node: Printf Ordering978256
-Ref: Printf Ordering-Footnote-1981114
-Node: I18N Portability981182
-Ref: I18N Portability-Footnote-1983742
-Node: I18N Example983809
-Ref: I18N Example-Footnote-1987203
-Ref: I18N Example-Footnote-2987276
-Node: Gawk I18N987393
-Node: I18N Summary988047
-Node: Debugger989444
-Node: Debugging990464
-Node: Debugging Concepts990913
-Node: Debugging Terms992730
-Node: Awk Debugging995333
-Ref: Awk Debugging-Footnote-1996306
-Node: Sample Debugging Session996442
-Node: Debugger Invocation996992
-Node: Finding The Bug998617
-Node: List of Debugger Commands1005249
-Node: Breakpoint Control1006626
-Node: Debugger Execution Control1010448
-Node: Viewing And Changing Data1013922
-Node: Execution Stack1017656
-Node: Debugger Info1019337
-Node: Miscellaneous Debugger Commands1023632
-Node: Readline Support1028873
-Node: Limitations1029817
-Node: Debugging Summary1032441
-Node: Namespaces1033740
-Node: Global Namespace1034867
-Node: Qualified Names1036301
-Node: Default Namespace1037336
-Node: Changing The Namespace1038109
-Node: Naming Rules1039791
-Node: Internal Name Management1041746
-Node: Namespace Example1042816
-Node: Namespace And Features1045393
-Node: Namespace Summary1046848
-Node: Arbitrary Precision Arithmetic1048359
-Node: Computer Arithmetic1049878
-Ref: table-numeric-ranges1053803
-Ref: table-floating-point-ranges1054300
-Ref: Computer Arithmetic-Footnote-11054958
-Node: Math Definitions1055015
-Ref: table-ieee-formats1058047
-Node: MPFR features1058620
-Node: MPFR On Parole1059073
-Ref: MPFR On Parole-Footnote-11059914
-Node: MPFR Intro1060073
-Node: FP Math Caution1061757
-Ref: FP Math Caution-Footnote-11062829
-Node: Inexactness of computations1063202
-Node: Inexact representation1064233
-Node: Comparing FP Values1065614
-Node: Errors accumulate1066872
-Node: Strange values1068337
-Ref: Strange values-Footnote-11070991
-Node: Getting Accuracy1071096
-Node: Try To Round1073833
-Node: Setting precision1074740
-Ref: table-predefined-precision-strings1075445
-Node: Setting the rounding mode1077329
-Ref: table-gawk-rounding-modes1077711
-Ref: Setting the rounding mode-Footnote-11081763
-Node: Arbitrary Precision Integers1081948
-Ref: Arbitrary Precision Integers-Footnote-11085158
-Node: Checking for MPFR1085311
-Node: POSIX Floating Point Problems1086801
-Ref: POSIX Floating Point Problems-Footnote-11091621
-Node: Floating point summary1091659
-Node: Dynamic Extensions1093915
-Node: Extension Intro1095512
-Node: Plugin License1096814
-Node: Extension Mechanism Outline1097627
-Ref: figure-load-extension1098078
-Ref: figure-register-new-function1099656
-Ref: figure-call-new-function1100765
-Node: Extension API Description1102880
-Node: Extension API Functions Introduction1104609
-Ref: table-api-std-headers1106503
-Node: General Data Types1110944
-Ref: General Data Types-Footnote-11120090
-Node: Memory Allocation Functions1120393
-Ref: Memory Allocation Functions-Footnote-11125110
-Node: Constructor Functions1125209
-Node: API Ownership of MPFR and GMP Values1129110
-Node: Registration Functions1130663
-Node: Extension Functions1131367
-Node: Exit Callback Functions1136941
-Node: Extension Version String1138255
-Node: Input Parsers1138950
-Node: Output Wrappers1153569
-Node: Two-way processors1158411
-Node: Printing Messages1160764
-Ref: Printing Messages-Footnote-11161975
-Node: Updating ERRNO1162128
-Node: Requesting Values1162927
-Ref: table-value-types-returned1163680
-Node: Accessing Parameters1165739
-Node: Symbol Table Access1167020
-Node: Symbol table by name1167532
-Ref: Symbol table by name-Footnote-11170733
-Node: Symbol table by cookie1170865
-Ref: Symbol table by cookie-Footnote-11175134
-Node: Cached values1175198
-Ref: Cached values-Footnote-11178830
-Node: Array Manipulation1178987
-Ref: Array Manipulation-Footnote-11180086
-Node: Array Data Types1180123
-Ref: Array Data Types-Footnote-11182941
-Node: Array Functions1183037
-Node: Flattening Arrays1188066
-Node: Creating Arrays1195114
-Node: Redirection API1199956
-Node: Extension API Variables1202973
-Node: Extension Versioning1203696
-Ref: gawk-api-version1204125
-Node: Extension GMP/MPFR Versioning1205912
-Node: Extension API Informational Variables1207616
-Node: Extension API Boilerplate1208869
-Node: Changes from API V11212999
-Node: Finding Extensions1214631
-Node: Extension Example1215206
-Node: Internal File Description1216028
-Node: Internal File Ops1220320
-Ref: Internal File Ops-Footnote-11231870
-Node: Using Internal File Ops1232018
-Ref: Using Internal File Ops-Footnote-11234451
-Node: Extension Samples1234729
-Node: Extension Sample File Functions1236298
-Node: Extension Sample Fnmatch1244423
-Node: Extension Sample Fork1246018
-Node: Extension Sample Inplace1247294
-Node: Extension Sample Ord1251396
-Node: Extension Sample Readdir1252272
-Ref: table-readdir-file-types1253061
-Node: Extension Sample Revout1254417
-Node: Extension Sample Rev2way1255014
-Node: Extension Sample Read write array1255766
-Node: Extension Sample Readfile1259040
-Node: Extension Sample Time1260171
-Node: Extension Sample API Tests1262171
-Node: gawkextlib1262679
-Node: Extension summary1265711
-Node: Extension Exercises1269559
-Node: Language History1270829
-Node: V7/SVR3.11272541
-Node: SVR41274891
-Node: POSIX1276423
-Node: BTL1277848
-Node: POSIX/GNU1278615
-Ref: Gawk Extension Functions1282005
-Node: Feature History1285429
-Node: Common Extensions1305270
-Node: Ranges and Locales1306745
-Ref: Ranges and Locales-Footnote-11311530
-Ref: Ranges and Locales-Footnote-21311557
-Ref: Ranges and Locales-Footnote-31311792
-Node: Contributors1312015
-Node: History summary1318206
-Node: Installation1319648
-Node: Gawk Distribution1320612
-Node: Getting1321104
-Node: Extracting1322103
-Node: Distribution contents1323809
-Node: Unix Installation1331699
-Node: Quick Installation1332519
-Node: Compiling with MPFR1335059
-Node: Shell Startup Files1335765
-Node: Additional Configuration Options1336922
-Node: Configuration Philosophy1339305
-Node: Compiling from Git1341805
-Node: Building the Documentation1342364
-Node: Non-Unix Installation1343776
-Node: PC Installation1344252
-Node: PC Binary Installation1345121
-Node: PC Compiling1346014
-Node: PC Using1347192
-Node: Cygwin1350908
-Node: MSYS1352160
-Node: OpenVMS Installation1352786
-Node: OpenVMS Compilation1353467
-Ref: OpenVMS Compilation-Footnote-11354950
-Node: OpenVMS Dynamic Extensions1355008
-Node: OpenVMS Installation Details1356644
-Node: OpenVMS Running1359075
-Node: OpenVMS GNV1363212
-Node: Bugs1363967
-Node: Bug definition1364887
-Node: Bug address1368488
-Node: Usenet1372057
-Node: Performance bugs1373270
-Node: Asking for help1376274
-Node: Maintainers1378261
-Node: Other Versions1379288
-Node: Installation summary1389277
-Node: Notes1390659
-Node: Compatibility Mode1391469
-Node: Additions1392291
-Node: Accessing The Source1393236
-Node: Adding Code1394767
-Node: New Ports1401878
-Node: Derived Files1406381
-Ref: Derived Files-Footnote-11412192
-Ref: Derived Files-Footnote-21412227
-Ref: Derived Files-Footnote-31412838
-Node: Future Extensions1412952
-Node: Implementation Limitations1413622
-Node: Extension Design1414864
-Node: Old Extension Problems1416024
-Ref: Old Extension Problems-Footnote-11417596
-Node: Extension New Mechanism Goals1417657
-Ref: Extension New Mechanism Goals-Footnote-11421127
-Node: Extension Other Design Decisions1421328
-Node: Extension Future Growth1423525
-Node: Notes summary1424145
-Node: Basic Concepts1425355
-Node: Basic High Level1426040
-Ref: figure-general-flow1426322
-Ref: figure-process-flow1427024
-Ref: Basic High Level-Footnote-11430394
-Node: Basic Data Typing1430583
-Node: Glossary1433991
-Node: Copying1466869
-Node: GNU Free Documentation License1504427
-Node: Index1529550
+Ref: Splitting By Content-Footnote-1273306
+Node: More CSV273469
+Node: FS versus FPAT275545
+Node: Testing field creation276745
+Node: Multiple Line278519
+Node: Getline284988
+Node: Plain Getline287576
+Node: Getline/Variable290224
+Node: Getline/File291420
+Node: Getline/Variable/File292868
+Ref: Getline/Variable/File-Footnote-1294513
+Node: Getline/Pipe294609
+Node: Getline/Variable/Pipe297417
+Node: Getline/Coprocess298600
+Node: Getline/Variable/Coprocess299923
+Node: Getline Notes300689
+Node: Getline Summary304666
+Ref: table-getline-variants305110
+Node: Read Timeout306014
+Ref: Read Timeout-Footnote-1309976
+Node: Retrying Input310034
+Node: Command-line directories311301
+Node: Input Summary312239
+Node: Input Exercises315619
+Node: Printing316057
+Node: Print318000
+Node: Print Examples319501
+Node: Output Separators322346
+Node: OFMT324453
+Node: Printf326166
+Node: Basic Printf326971
+Node: Control Letters328606
+Node: Format Modifiers334052
+Node: Printf Examples340324
+Node: Redirection342865
+Node: Special FD350637
+Ref: Special FD-Footnote-1353935
+Node: Special Files354013
+Node: Other Inherited Files354642
+Node: Special Network355707
+Node: Special Caveats356595
+Node: Close Files And Pipes357578
+Ref: Close Files And Pipes-Footnote-1363702
+Node: Close Return Value363850
+Ref: table-close-pipe-return-values365121
+Ref: Close Return Value-Footnote-1365952
+Node: Noflush366108
+Node: Nonfatal367616
+Node: Output Summary370031
+Node: Output Exercises371317
+Node: Expressions372008
+Node: Values373208
+Node: Constants373886
+Node: Scalar Constants374581
+Ref: Scalar Constants-Footnote-1377157
+Ref: Scalar Constants-Footnote-2377407
+Node: Nondecimal-numbers377487
+Node: Regexp Constants380600
+Node: Using Constant Regexps381146
+Node: Standard Regexp Constants381792
+Node: Strong Regexp Constants385088
+Node: Variables388931
+Node: Using Variables389596
+Node: Assignment Options391570
+Node: Conversion394121
+Node: Strings And Numbers394653
+Ref: Strings And Numbers-Footnote-1397863
+Node: Locale influences conversions397972
+Ref: table-locale-affects400810
+Node: All Operators401452
+Node: Arithmetic Ops402093
+Node: Concatenation404916
+Ref: Concatenation-Footnote-1407852
+Node: Assignment Ops407971
+Ref: table-assign-ops413098
+Node: Increment Ops414479
+Node: Truth Values and Conditions418070
+Node: Truth Values419164
+Node: Typing and Comparison420244
+Node: Variable Typing421076
+Ref: Variable Typing-Footnote-1427720
+Ref: Variable Typing-Footnote-2427800
+Node: Comparison Operators427881
+Ref: table-relational-ops428308
+Node: POSIX String Comparison431984
+Ref: POSIX String Comparison-Footnote-1433741
+Ref: POSIX String Comparison-Footnote-2433884
+Node: Boolean Ops433968
+Ref: Boolean Ops-Footnote-1438642
+Node: Conditional Exp438738
+Node: Function Calls440518
+Node: Precedence444465
+Node: Locales448328
+Node: Expressions Summary450004
+Node: Patterns and Actions452659
+Node: Pattern Overview453795
+Node: Regexp Patterns455520
+Node: Expression Patterns456066
+Node: Ranges459971
+Node: BEGIN/END463145
+Node: Using BEGIN/END463954
+Ref: Using BEGIN/END-Footnote-1466862
+Node: I/O And BEGIN/END466972
+Node: BEGINFILE/ENDFILE469454
+Node: Empty472884
+Node: Using Shell Variables473201
+Node: Action Overview475537
+Node: Statements477973
+Node: If Statement479869
+Node: While Statement481432
+Node: Do Statement483520
+Node: For Statement484704
+Node: Switch Statement488059
+Node: Break Statement490608
+Node: Continue Statement492800
+Node: Next Statement494731
+Node: Nextfile Statement497210
+Node: Exit Statement500063
+Node: Built-in Variables502590
+Node: User-modified503767
+Node: Auto-set511974
+Ref: Auto-set-Footnote-1530058
+Ref: Auto-set-Footnote-2530276
+Node: ARGC and ARGV530332
+Node: Pattern Action Summary534761
+Node: Arrays537367
+Node: Array Basics538740
+Node: Array Intro539588
+Ref: figure-array-elements541599
+Ref: Array Intro-Footnote-1544452
+Node: Reference to Elements544584
+Node: Assigning Elements547104
+Node: Array Example547599
+Node: Scanning an Array549561
+Node: Controlling Scanning552656
+Ref: Controlling Scanning-Footnote-1559291
+Node: Numeric Array Subscripts559615
+Node: Uninitialized Subscripts561883
+Node: Delete563556
+Ref: Delete-Footnote-1566368
+Node: Multidimensional566425
+Node: Multiscanning569628
+Node: Arrays of Arrays571295
+Node: Arrays Summary575599
+Node: Functions577786
+Node: Built-in578918
+Node: Calling Built-in580107
+Node: Boolean Functions582147
+Node: Numeric Functions582709
+Ref: Numeric Functions-Footnote-1586894
+Ref: Numeric Functions-Footnote-2587577
+Ref: Numeric Functions-Footnote-3587629
+Node: String Functions587905
+Ref: String Functions-Footnote-1614356
+Ref: String Functions-Footnote-2614488
+Ref: String Functions-Footnote-3614744
+Node: Gory Details614831
+Ref: table-sub-escapes616840
+Ref: table-sub-proposed618471
+Ref: table-posix-sub619966
+Ref: table-gensub-escapes621639
+Ref: Gory Details-Footnote-1622558
+Node: I/O Functions622712
+Ref: table-system-return-values629388
+Ref: I/O Functions-Footnote-1631550
+Ref: I/O Functions-Footnote-2631698
+Node: Time Functions631818
+Ref: Time Functions-Footnote-1643530
+Ref: Time Functions-Footnote-2643598
+Ref: Time Functions-Footnote-3643760
+Ref: Time Functions-Footnote-4643871
+Ref: Time Functions-Footnote-5643987
+Ref: Time Functions-Footnote-6644214
+Node: Bitwise Functions644492
+Ref: table-bitwise-ops645090
+Ref: Bitwise Functions-Footnote-1651332
+Ref: Bitwise Functions-Footnote-2651509
+Node: Type Functions651704
+Node: I18N Functions653875
+Node: User-defined655610
+Node: Definition Syntax656356
+Ref: Definition Syntax-Footnote-1662174
+Node: Function Example662249
+Ref: Function Example-Footnote-1665228
+Node: Function Calling665250
+Node: Calling A Function665842
+Node: Variable Scope666812
+Node: Pass By Value/Reference669866
+Node: Function Caveats672594
+Ref: Function Caveats-Footnote-1674685
+Node: Return Statement674805
+Node: Dynamic Typing677837
+Node: Dynamic Typing Awk678415
+Node: Dynamic Typing Gawk680553
+Node: Indirect Calls683923
+Node: Functions Summary695060
+Node: Library Functions698026
+Ref: Library Functions-Footnote-1701574
+Ref: Library Functions-Footnote-2701719
+Node: Library Names701894
+Ref: Library Names-Footnote-1705665
+Ref: Library Names-Footnote-2705892
+Node: General Functions705986
+Node: Strtonum Function707256
+Node: Assert Function710338
+Node: Round Function713788
+Node: Cliff Random Function715360
+Node: Ordinal Functions716384
+Ref: Ordinal Functions-Footnote-1719487
+Ref: Ordinal Functions-Footnote-2719739
+Node: Join Function719953
+Ref: Join Function-Footnote-1721751
+Node: Getlocaltime Function721955
+Node: Readfile Function725729
+Node: Shell Quoting727758
+Node: Isnumeric Function729214
+Node: To CSV Function730650
+Node: Data File Management732742
+Node: Filetrans Function733374
+Node: Rewind Function737650
+Node: File Checking739621
+Ref: File Checking-Footnote-1740987
+Node: Empty Files741192
+Node: Ignoring Assigns743255
+Node: Getopt Function744829
+Ref: Getopt Function-Footnote-1760647
+Node: Passwd Functions760859
+Ref: Passwd Functions-Footnote-1769994
+Node: Group Functions770082
+Ref: Group Functions-Footnote-1778206
+Node: Walking Arrays778417
+Node: Library Functions Summary781463
+Node: Library Exercises782883
+Node: Sample Programs783368
+Node: Running Examples784150
+Node: Clones784902
+Node: Cut Program786170
+Node: Egrep Program796594
+Node: Id Program805893
+Node: Split Program815985
+Ref: Split Program-Footnote-1826198
+Node: Tee Program826383
+Node: Uniq Program829289
+Node: Wc Program837149
+Node: Bytes vs. Characters837544
+Node: Using extensions839144
+Node: wc program839922
+Node: Miscellaneous Programs844915
+Node: Dupword Program846140
+Node: Alarm Program848189
+Node: Translate Program853092
+Ref: Translate Program-Footnote-1857801
+Node: Labels Program858079
+Ref: Labels Program-Footnote-1861514
+Node: Word Sorting861598
+Node: History Sorting865772
+Node: Extract Program868045
+Node: Simple Sed876298
+Node: Igawk Program879508
+Ref: Igawk Program-Footnote-1894718
+Ref: Igawk Program-Footnote-2894924
+Ref: Igawk Program-Footnote-3895054
+Node: Anagram Program895181
+Node: Signature Program898267
+Node: Programs Summary899517
+Node: Programs Exercises900771
+Ref: Programs Exercises-Footnote-1905600
+Node: Advanced Features905686
+Node: Nondecimal Data908167
+Node: Boolean Typed Values909797
+Node: Array Sorting911754
+Node: Controlling Array Traversal912483
+Ref: Controlling Array Traversal-Footnote-1920986
+Node: Array Sorting Functions921108
+Ref: Array Sorting Functions-Footnote-1927205
+Node: Two-way I/O927413
+Ref: Two-way I/O-Footnote-1935384
+Ref: Two-way I/O-Footnote-2935575
+Node: TCP/IP Networking935657
+Node: Profiling938825
+Node: Persistent Memory948495
+Ref: Persistent Memory-Footnote-1958067
+Node: Extension Philosophy958198
+Node: Advanced Features Summary959725
+Node: Internationalization961991
+Node: I18N and L10N963693
+Node: Explaining gettext964388
+Ref: Explaining gettext-Footnote-1970524
+Ref: Explaining gettext-Footnote-2970717
+Node: Programmer i18n970882
+Ref: Programmer i18n-Footnote-1975994
+Node: Translator i18n976043
+Node: String Extraction976873
+Ref: String Extraction-Footnote-1978049
+Node: Printf Ordering978147
+Ref: Printf Ordering-Footnote-1981005
+Node: I18N Portability981073
+Ref: I18N Portability-Footnote-1983633
+Node: I18N Example983700
+Ref: I18N Example-Footnote-1987094
+Ref: I18N Example-Footnote-2987167
+Node: Gawk I18N987284
+Node: I18N Summary987938
+Node: Debugger989335
+Node: Debugging990355
+Node: Debugging Concepts990804
+Node: Debugging Terms992621
+Node: Awk Debugging995224
+Ref: Awk Debugging-Footnote-1996197
+Node: Sample Debugging Session996333
+Node: Debugger Invocation996883
+Node: Finding The Bug998508
+Node: List of Debugger Commands1005140
+Node: Breakpoint Control1006517
+Node: Debugger Execution Control1010339
+Node: Viewing And Changing Data1013813
+Node: Execution Stack1017547
+Node: Debugger Info1019228
+Node: Miscellaneous Debugger Commands1023523
+Node: Readline Support1028764
+Node: Limitations1029708
+Node: Debugging Summary1032332
+Node: Namespaces1033631
+Node: Global Namespace1034758
+Node: Qualified Names1036192
+Node: Default Namespace1037227
+Node: Changing The Namespace1038000
+Node: Naming Rules1039682
+Node: Internal Name Management1041637
+Node: Namespace Example1042707
+Node: Namespace And Features1045284
+Node: Namespace Summary1046739
+Node: Arbitrary Precision Arithmetic1048250
+Node: Computer Arithmetic1049769
+Ref: table-numeric-ranges1053694
+Ref: table-floating-point-ranges1054191
+Ref: Computer Arithmetic-Footnote-11054849
+Node: Math Definitions1054906
+Ref: table-ieee-formats1057938
+Node: MPFR features1058511
+Node: MPFR On Parole1058964
+Ref: MPFR On Parole-Footnote-11059805
+Node: MPFR Intro1059964
+Node: FP Math Caution1061648
+Ref: FP Math Caution-Footnote-11062720
+Node: Inexactness of computations1063093
+Node: Inexact representation1064124
+Node: Comparing FP Values1065505
+Node: Errors accumulate1066763
+Node: Strange values1068228
+Ref: Strange values-Footnote-11070882
+Node: Getting Accuracy1070987
+Node: Try To Round1073724
+Node: Setting precision1074631
+Ref: table-predefined-precision-strings1075336
+Node: Setting the rounding mode1077220
+Ref: table-gawk-rounding-modes1077602
+Ref: Setting the rounding mode-Footnote-11081654
- Node: Arbitrary Precision Integers1081837
- Ref: Arbitrary Precision Integers-Footnote-11085047
- Node: Checking for MPFR1085200
- Node: POSIX Floating Point Problems1086690
- Ref: POSIX Floating Point Problems-Footnote-11091510
- Node: Floating point summary1091548
- Node: Dynamic Extensions1093804
- Node: Extension Intro1095401
- Node: Plugin License1096703
- Node: Extension Mechanism Outline1097516
- Ref: figure-load-extension1097967
- Ref: figure-register-new-function1099545
- Ref: figure-call-new-function1100654
- Node: Extension API Description1102769
- Node: Extension API Functions Introduction1104498
- Ref: table-api-std-headers1106392
- Node: General Data Types1110833
- Ref: General Data Types-Footnote-11119979
- Node: Memory Allocation Functions1120282
- Ref: Memory Allocation Functions-Footnote-11124999
- Node: Constructor Functions1125098
- Node: API Ownership of MPFR and GMP Values1128999
- Node: Registration Functions1130552
- Node: Extension Functions1131256
- Node: Exit Callback Functions1136830
- Node: Extension Version String1138144
- Node: Input Parsers1138839
- Node: Output Wrappers1153458
- Node: Two-way processors1158300
- Node: Printing Messages1160653
- Ref: Printing Messages-Footnote-11161864
- Node: Updating ERRNO1162017
- Node: Requesting Values1162816
- Ref: table-value-types-returned1163569
- Node: Accessing Parameters1165628
- Node: Symbol Table Access1166909
- Node: Symbol table by name1167421
- Ref: Symbol table by name-Footnote-11170622
- Node: Symbol table by cookie1170754
- Ref: Symbol table by cookie-Footnote-11175023
- Node: Cached values1175087
- Ref: Cached values-Footnote-11178719
- Node: Array Manipulation1178876
- Ref: Array Manipulation-Footnote-11179975
- Node: Array Data Types1180012
- Ref: Array Data Types-Footnote-11182830
- Node: Array Functions1182926
- Node: Flattening Arrays1187955
- Node: Creating Arrays1195003
- Node: Redirection API1199845
- Node: Extension API Variables1202862
- Node: Extension Versioning1203585
- Ref: gawk-api-version1204014
- Node: Extension GMP/MPFR Versioning1205801
- Node: Extension API Informational Variables1207505
- Node: Extension API Boilerplate1208758
- Node: Changes from API V11212888
- Node: Finding Extensions1214520
- Node: Extension Example1215095
- Node: Internal File Description1215917
- Node: Internal File Ops1220209
- Ref: Internal File Ops-Footnote-11231759
- Node: Using Internal File Ops1231907
- Ref: Using Internal File Ops-Footnote-11234340
- Node: Extension Samples1234618
- Node: Extension Sample File Functions1236187
- Node: Extension Sample Fnmatch1244312
- Node: Extension Sample Fork1245907
- Node: Extension Sample Inplace1247183
- Node: Extension Sample Ord1251285
- Node: Extension Sample Readdir1252161
- Ref: table-readdir-file-types1252950
- Node: Extension Sample Revout1254306
- Node: Extension Sample Rev2way1254903
- Node: Extension Sample Read write array1255655
- Node: Extension Sample Readfile1258929
- Node: Extension Sample Time1260060
- Node: Extension Sample API Tests1262060
- Node: gawkextlib1262568
- Node: Extension summary1265600
- Node: Extension Exercises1269448
- Node: Language History1270718
- Node: V7/SVR3.11272430
- Node: SVR41274780
- Node: POSIX1276312
- Node: BTL1277737
- Node: POSIX/GNU1278504
- Ref: Gawk Extension Functions1281894
- Node: Feature History1285318
- Node: Common Extensions1305159
- Node: Ranges and Locales1306634
- Ref: Ranges and Locales-Footnote-11311419
- Ref: Ranges and Locales-Footnote-21311446
- Ref: Ranges and Locales-Footnote-31311681
- Node: Contributors1311904
- Node: History summary1318095
- Node: Installation1319537
- Node: Gawk Distribution1320501
- Node: Getting1320993
- Node: Extracting1321992
- Node: Distribution contents1323698
- Node: Unix Installation1331588
- Node: Quick Installation1332408
- Node: Compiling with MPFR1334948
- Node: Shell Startup Files1335654
- Node: Additional Configuration Options1336811
- Node: Configuration Philosophy1339194
- Node: Compiling from Git1341694
- Node: Building the Documentation1342253
- Node: Non-Unix Installation1343665
- Node: PC Installation1344141
- Node: PC Binary Installation1345010
- Node: PC Compiling1345903
- Node: PC Using1347081
- Node: Cygwin1350797
- Node: MSYS1352049
- Node: OpenVMS Installation1352675
- Node: OpenVMS Compilation1353356
- Ref: OpenVMS Compilation-Footnote-11354839
- Node: OpenVMS Dynamic Extensions1354897
- Node: OpenVMS Installation Details1356533
- Node: OpenVMS Running1358964
- Node: OpenVMS GNV1363101
- Node: Bugs1363856
- Node: Bug definition1364776
- Node: Bug address1368377
- Node: Usenet1371946
- Node: Performance bugs1373159
- Node: Asking for help1376163
- Node: Maintainers1378150
- Node: Other Versions1379177
- Node: Installation summary1389166
- Node: Notes1390548
- Node: Compatibility Mode1391358
- Node: Additions1392180
- Node: Accessing The Source1393125
- Node: Adding Code1394656
- Node: New Ports1401767
- Node: Derived Files1406270
- Ref: Derived Files-Footnote-11412081
- Ref: Derived Files-Footnote-21412116
- Ref: Derived Files-Footnote-31412727
- Node: Future Extensions1412841
- Node: Implementation Limitations1413511
- Node: Extension Design1414753
- Node: Old Extension Problems1415913
- Ref: Old Extension Problems-Footnote-11417485
- Node: Extension New Mechanism Goals1417546
- Ref: Extension New Mechanism Goals-Footnote-11421016
- Node: Extension Other Design Decisions1421217
- Node: Extension Future Growth1423414
- Node: Notes summary1424034
- Node: Basic Concepts1425244
- Node: Basic High Level1425929
- Ref: figure-general-flow1426211
- Ref: figure-process-flow1426913
- Ref: Basic High Level-Footnote-11430283
- Node: Basic Data Typing1430472
- Node: Glossary1433880
- Node: Copying1466758
- Node: GNU Free Documentation License1504316
- Node: Index1529439
++Node: Arbitrary Precision Integers1081839
++Ref: Arbitrary Precision Integers-Footnote-11085049
++Node: Checking for MPFR1085202
++Node: POSIX Floating Point Problems1086692
++Ref: POSIX Floating Point Problems-Footnote-11091512
++Node: Floating point summary1091550
++Node: Dynamic Extensions1093806
++Node: Extension Intro1095403
++Node: Plugin License1096705
++Node: Extension Mechanism Outline1097518
++Ref: figure-load-extension1097969
++Ref: figure-register-new-function1099547
++Ref: figure-call-new-function1100656
++Node: Extension API Description1102771
++Node: Extension API Functions Introduction1104500
++Ref: table-api-std-headers1106394
++Node: General Data Types1110835
++Ref: General Data Types-Footnote-11119981
++Node: Memory Allocation Functions1120284
++Ref: Memory Allocation Functions-Footnote-11125001
++Node: Constructor Functions1125100
++Node: API Ownership of MPFR and GMP Values1129001
++Node: Registration Functions1130554
++Node: Extension Functions1131258
++Node: Exit Callback Functions1136832
++Node: Extension Version String1138146
++Node: Input Parsers1138841
++Node: Output Wrappers1153460
++Node: Two-way processors1158302
++Node: Printing Messages1160655
++Ref: Printing Messages-Footnote-11161866
++Node: Updating ERRNO1162019
++Node: Requesting Values1162818
++Ref: table-value-types-returned1163571
++Node: Accessing Parameters1165630
++Node: Symbol Table Access1166911
++Node: Symbol table by name1167423
++Ref: Symbol table by name-Footnote-11170624
++Node: Symbol table by cookie1170756
++Ref: Symbol table by cookie-Footnote-11175025
++Node: Cached values1175089
++Ref: Cached values-Footnote-11178721
++Node: Array Manipulation1178878
++Ref: Array Manipulation-Footnote-11179977
++Node: Array Data Types1180014
++Ref: Array Data Types-Footnote-11182832
++Node: Array Functions1182928
++Node: Flattening Arrays1187957
++Node: Creating Arrays1195005
++Node: Redirection API1199847
++Node: Extension API Variables1202864
++Node: Extension Versioning1203587
++Ref: gawk-api-version1204016
++Node: Extension GMP/MPFR Versioning1205803
++Node: Extension API Informational Variables1207507
++Node: Extension API Boilerplate1208760
++Node: Changes from API V11212890
++Node: Finding Extensions1214522
++Node: Extension Example1215097
++Node: Internal File Description1215919
++Node: Internal File Ops1220211
++Ref: Internal File Ops-Footnote-11231761
++Node: Using Internal File Ops1231909
++Ref: Using Internal File Ops-Footnote-11234342
++Node: Extension Samples1234620
++Node: Extension Sample File Functions1236189
++Node: Extension Sample Fnmatch1244314
++Node: Extension Sample Fork1245909
++Node: Extension Sample Inplace1247185
++Node: Extension Sample Ord1251287
++Node: Extension Sample Readdir1252163
++Ref: table-readdir-file-types1252952
++Node: Extension Sample Revout1254308
++Node: Extension Sample Rev2way1254905
++Node: Extension Sample Read write array1255657
++Node: Extension Sample Readfile1258931
++Node: Extension Sample Time1260062
++Node: Extension Sample API Tests1262062
++Node: gawkextlib1262570
++Node: Extension summary1265602
++Node: Extension Exercises1269450
++Node: Language History1270720
++Node: V7/SVR3.11272432
++Node: SVR41274782
++Node: POSIX1276314
++Node: BTL1277739
++Node: POSIX/GNU1278506
++Ref: Gawk Extension Functions1281896
++Node: Feature History1285320
++Node: Common Extensions1305161
++Node: Ranges and Locales1306636
++Ref: Ranges and Locales-Footnote-11311421
++Ref: Ranges and Locales-Footnote-21311448
++Ref: Ranges and Locales-Footnote-31311683
++Node: Contributors1311906
++Node: History summary1318097
++Node: Installation1319539
++Node: Gawk Distribution1320503
++Node: Getting1320995
++Node: Extracting1321994
++Node: Distribution contents1323700
++Node: Unix Installation1331590
++Node: Quick Installation1332410
++Node: Compiling with MPFR1334950
++Node: Shell Startup Files1335656
++Node: Additional Configuration Options1336813
++Node: Configuration Philosophy1339196
++Node: Compiling from Git1341696
++Node: Building the Documentation1342255
++Node: Non-Unix Installation1343667
++Node: PC Installation1344143
++Node: PC Binary Installation1345012
++Node: PC Compiling1345905
++Node: PC Using1347083
++Node: Cygwin1350799
++Node: MSYS1352051
++Node: OpenVMS Installation1352677
++Node: OpenVMS Compilation1353358
++Ref: OpenVMS Compilation-Footnote-11354841
++Node: OpenVMS Dynamic Extensions1354899
++Node: OpenVMS Installation Details1356535
++Node: OpenVMS Running1358966
++Node: OpenVMS GNV1363103
++Node: Bugs1363858
++Node: Bug definition1364778
++Node: Bug address1368379
++Node: Usenet1371948
++Node: Performance bugs1373161
++Node: Asking for help1376165
++Node: Maintainers1378152
++Node: Other Versions1379179
++Node: Installation summary1389168
++Node: Notes1390550
++Node: Compatibility Mode1391360
++Node: Additions1392182
++Node: Accessing The Source1393127
++Node: Adding Code1394658
++Node: New Ports1401769
++Node: Derived Files1406272
++Ref: Derived Files-Footnote-11412083
++Ref: Derived Files-Footnote-21412118
++Ref: Derived Files-Footnote-31412729
++Node: Future Extensions1412843
++Node: Implementation Limitations1413513
++Node: Extension Design1414755
++Node: Old Extension Problems1415915
++Ref: Old Extension Problems-Footnote-11417487
++Node: Extension New Mechanism Goals1417548
++Ref: Extension New Mechanism Goals-Footnote-11421018
++Node: Extension Other Design Decisions1421219
++Node: Extension Future Growth1423416
++Node: Notes summary1424036
++Node: Basic Concepts1425246
++Node: Basic High Level1425931
++Ref: figure-general-flow1426213
++Ref: figure-process-flow1426915
++Ref: Basic High Level-Footnote-11430285
++Node: Basic Data Typing1430474
++Node: Glossary1433882
++Node: Copying1466760
++Node: GNU Free Documentation License1504318
++Node: Index1529441
End Tag Table
http://git.sv.gnu.org/cgit/gawk.git/commit/?id=8a68083e8ae9d652738cd875c192e97aaf8cfde7
commit 8a68083e8ae9d652738cd875c192e97aaf8cfde7
Merge: 1b3cfc9a 5292ce3f
Author: Arnold D. Robbins <arnold@skeeve.com>
Date: Thu Sep 12 13:17:34 2024 +0300
Merge branch 'gawk-5.3-stable' into stable/fpat-doc
diff --cc doc/gawk.info
index 6d157796,2c72be5b..753cb5fe
--- a/doc/gawk.info
+++ b/doc/gawk.info
@@@ -40041,526 -40053,526 +40051,526 @@@ Node: Skipping intervening26589
Node: Allowing trailing data266700
Node: Fields with fixed data267761
Node: Splitting By Content269383
-Ref: Splitting By Content-Footnote-1273833
-Node: More CSV273996
-Node: FS versus FPAT275654
-Node: Testing field creation276854
-Node: Multiple Line278628
-Node: Getline285097
-Node: Plain Getline287685
-Node: Getline/Variable290333
-Node: Getline/File291529
-Node: Getline/Variable/File292977
-Ref: Getline/Variable/File-Footnote-1294622
-Node: Getline/Pipe294718
-Node: Getline/Variable/Pipe297526
-Node: Getline/Coprocess298709
-Node: Getline/Variable/Coprocess300032
-Node: Getline Notes300798
-Node: Getline Summary304775
-Ref: table-getline-variants305219
-Node: Read Timeout306123
-Ref: Read Timeout-Footnote-1310085
-Node: Retrying Input310143
-Node: Command-line directories311410
-Node: Input Summary312348
-Node: Input Exercises315728
-Node: Printing316166
-Node: Print318109
-Node: Print Examples319610
-Node: Output Separators322455
-Node: OFMT324562
-Node: Printf326275
-Node: Basic Printf327080
-Node: Control Letters328715
-Node: Format Modifiers334161
-Node: Printf Examples340433
-Node: Redirection342974
-Node: Special FD350746
-Ref: Special FD-Footnote-1354044
-Node: Special Files354122
-Node: Other Inherited Files354751
-Node: Special Network355816
-Node: Special Caveats356704
-Node: Close Files And Pipes357687
-Ref: Close Files And Pipes-Footnote-1363811
-Node: Close Return Value363959
-Ref: table-close-pipe-return-values365230
-Ref: Close Return Value-Footnote-1366061
-Node: Noflush366217
-Node: Nonfatal367725
-Node: Output Summary370140
-Node: Output Exercises371426
-Node: Expressions372117
-Node: Values373317
-Node: Constants373995
-Node: Scalar Constants374690
-Ref: Scalar Constants-Footnote-1377266
-Ref: Scalar Constants-Footnote-2377516
-Node: Nondecimal-numbers377596
-Node: Regexp Constants380709
-Node: Using Constant Regexps381255
-Node: Standard Regexp Constants381901
-Node: Strong Regexp Constants385197
-Node: Variables389040
-Node: Using Variables389705
-Node: Assignment Options391679
-Node: Conversion394230
-Node: Strings And Numbers394762
-Ref: Strings And Numbers-Footnote-1397972
-Node: Locale influences conversions398081
-Ref: table-locale-affects400919
-Node: All Operators401561
-Node: Arithmetic Ops402202
-Node: Concatenation405025
-Ref: Concatenation-Footnote-1407961
-Node: Assignment Ops408080
-Ref: table-assign-ops413207
-Node: Increment Ops414588
-Node: Truth Values and Conditions418179
-Node: Truth Values419273
-Node: Typing and Comparison420353
-Node: Variable Typing421185
-Ref: Variable Typing-Footnote-1427829
-Ref: Variable Typing-Footnote-2427909
-Node: Comparison Operators427990
-Ref: table-relational-ops428417
-Node: POSIX String Comparison432093
-Ref: POSIX String Comparison-Footnote-1433850
-Ref: POSIX String Comparison-Footnote-2433993
-Node: Boolean Ops434077
-Ref: Boolean Ops-Footnote-1438751
-Node: Conditional Exp438847
-Node: Function Calls440627
-Node: Precedence444574
-Node: Locales448437
-Node: Expressions Summary450113
-Node: Patterns and Actions452768
-Node: Pattern Overview453904
-Node: Regexp Patterns455629
-Node: Expression Patterns456175
-Node: Ranges460080
-Node: BEGIN/END463254
-Node: Using BEGIN/END464063
-Ref: Using BEGIN/END-Footnote-1466971
-Node: I/O And BEGIN/END467081
-Node: BEGINFILE/ENDFILE469563
-Node: Empty472993
-Node: Using Shell Variables473310
-Node: Action Overview475646
-Node: Statements478082
-Node: If Statement479978
-Node: While Statement481541
-Node: Do Statement483629
-Node: For Statement484813
-Node: Switch Statement488168
-Node: Break Statement490717
-Node: Continue Statement492909
-Node: Next Statement494840
-Node: Nextfile Statement497319
-Node: Exit Statement500172
-Node: Built-in Variables502699
-Node: User-modified503876
-Node: Auto-set512083
-Ref: Auto-set-Footnote-1530167
-Ref: Auto-set-Footnote-2530385
-Node: ARGC and ARGV530441
-Node: Pattern Action Summary534870
-Node: Arrays537476
-Node: Array Basics538849
-Node: Array Intro539697
-Ref: figure-array-elements541708
-Ref: Array Intro-Footnote-1544561
-Node: Reference to Elements544693
-Node: Assigning Elements547213
-Node: Array Example547708
-Node: Scanning an Array549670
-Node: Controlling Scanning552765
-Ref: Controlling Scanning-Footnote-1559400
-Node: Numeric Array Subscripts559724
-Node: Uninitialized Subscripts561992
-Node: Delete563665
-Ref: Delete-Footnote-1566477
-Node: Multidimensional566534
-Node: Multiscanning569737
-Node: Arrays of Arrays571404
-Node: Arrays Summary575708
-Node: Functions577895
-Node: Built-in579027
-Node: Calling Built-in580216
-Node: Boolean Functions582256
-Node: Numeric Functions582818
-Ref: Numeric Functions-Footnote-1587003
-Ref: Numeric Functions-Footnote-2587686
-Ref: Numeric Functions-Footnote-3587738
-Node: String Functions588014
-Ref: String Functions-Footnote-1614465
-Ref: String Functions-Footnote-2614597
-Ref: String Functions-Footnote-3614853
-Node: Gory Details614940
-Ref: table-sub-escapes616949
-Ref: table-sub-proposed618580
-Ref: table-posix-sub620075
-Ref: table-gensub-escapes621748
-Ref: Gory Details-Footnote-1622667
-Node: I/O Functions622821
-Ref: table-system-return-values629497
-Ref: I/O Functions-Footnote-1631659
-Ref: I/O Functions-Footnote-2631807
-Node: Time Functions631927
-Ref: Time Functions-Footnote-1643639
-Ref: Time Functions-Footnote-2643707
-Ref: Time Functions-Footnote-3643869
-Ref: Time Functions-Footnote-4643980
-Ref: Time Functions-Footnote-5644096
-Ref: Time Functions-Footnote-6644323
-Node: Bitwise Functions644601
-Ref: table-bitwise-ops645199
-Ref: Bitwise Functions-Footnote-1651441
-Ref: Bitwise Functions-Footnote-2651618
-Node: Type Functions651813
-Node: I18N Functions653984
-Node: User-defined655719
-Node: Definition Syntax656465
-Ref: Definition Syntax-Footnote-1662283
-Node: Function Example662358
-Ref: Function Example-Footnote-1665337
-Node: Function Calling665359
-Node: Calling A Function665951
-Node: Variable Scope666921
-Node: Pass By Value/Reference669975
-Node: Function Caveats672703
-Ref: Function Caveats-Footnote-1674794
-Node: Return Statement674914
-Node: Dynamic Typing677946
-Node: Dynamic Typing Awk678524
-Node: Dynamic Typing Gawk680662
-Node: Indirect Calls684032
-Node: Functions Summary695169
-Node: Library Functions698135
-Ref: Library Functions-Footnote-1701683
-Ref: Library Functions-Footnote-2701828
-Node: Library Names702003
-Ref: Library Names-Footnote-1705774
-Ref: Library Names-Footnote-2706001
-Node: General Functions706095
-Node: Strtonum Function707365
-Node: Assert Function710447
-Node: Round Function713897
-Node: Cliff Random Function715469
-Node: Ordinal Functions716493
-Ref: Ordinal Functions-Footnote-1719596
-Ref: Ordinal Functions-Footnote-2719848
-Node: Join Function720062
-Ref: Join Function-Footnote-1721860
-Node: Getlocaltime Function722064
-Node: Readfile Function725838
-Node: Shell Quoting727867
-Node: Isnumeric Function729323
-Node: To CSV Function730759
-Node: Data File Management732851
-Node: Filetrans Function733483
-Node: Rewind Function737759
-Node: File Checking739730
-Ref: File Checking-Footnote-1741096
-Node: Empty Files741301
-Node: Ignoring Assigns743364
-Node: Getopt Function744938
-Ref: Getopt Function-Footnote-1760756
-Node: Passwd Functions760968
-Ref: Passwd Functions-Footnote-1770103
-Node: Group Functions770191
-Ref: Group Functions-Footnote-1778315
-Node: Walking Arrays778526
-Node: Library Functions Summary781572
-Node: Library Exercises782992
-Node: Sample Programs783477
-Node: Running Examples784259
-Node: Clones785011
-Node: Cut Program786279
-Node: Egrep Program796703
-Node: Id Program806002
-Node: Split Program816094
-Ref: Split Program-Footnote-1826307
-Node: Tee Program826492
-Node: Uniq Program829398
-Node: Wc Program837258
-Node: Bytes vs. Characters837653
-Node: Using extensions839253
-Node: wc program840031
-Node: Miscellaneous Programs845024
-Node: Dupword Program846249
-Node: Alarm Program848298
-Node: Translate Program853201
-Ref: Translate Program-Footnote-1857910
-Node: Labels Program858188
-Ref: Labels Program-Footnote-1861623
-Node: Word Sorting861707
-Node: History Sorting865881
-Node: Extract Program868154
-Node: Simple Sed876407
-Node: Igawk Program879617
-Ref: Igawk Program-Footnote-1894827
-Ref: Igawk Program-Footnote-2895033
-Ref: Igawk Program-Footnote-3895163
-Node: Anagram Program895290
-Node: Signature Program898376
-Node: Programs Summary899626
-Node: Programs Exercises900880
-Ref: Programs Exercises-Footnote-1905709
-Node: Advanced Features905795
-Node: Nondecimal Data908276
-Node: Boolean Typed Values909906
-Node: Array Sorting911863
-Node: Controlling Array Traversal912592
-Ref: Controlling Array Traversal-Footnote-1921095
-Node: Array Sorting Functions921217
-Ref: Array Sorting Functions-Footnote-1927314
-Node: Two-way I/O927522
-Ref: Two-way I/O-Footnote-1935493
-Ref: Two-way I/O-Footnote-2935684
-Node: TCP/IP Networking935766
-Node: Profiling938934
-Node: Persistent Memory948604
-Ref: Persistent Memory-Footnote-1958176
-Node: Extension Philosophy958307
-Node: Advanced Features Summary959834
-Node: Internationalization962100
-Node: I18N and L10N963802
-Node: Explaining gettext964497
-Ref: Explaining gettext-Footnote-1970633
-Ref: Explaining gettext-Footnote-2970826
-Node: Programmer i18n970991
-Ref: Programmer i18n-Footnote-1976103
-Node: Translator i18n976152
-Node: String Extraction976982
-Ref: String Extraction-Footnote-1978158
-Node: Printf Ordering978256
-Ref: Printf Ordering-Footnote-1981114
-Node: I18N Portability981182
-Ref: I18N Portability-Footnote-1983742
-Node: I18N Example983809
-Ref: I18N Example-Footnote-1987203
-Ref: I18N Example-Footnote-2987276
-Node: Gawk I18N987393
-Node: I18N Summary988047
-Node: Debugger989444
-Node: Debugging990464
-Node: Debugging Concepts990913
-Node: Debugging Terms992730
-Node: Awk Debugging995333
-Ref: Awk Debugging-Footnote-1996306
-Node: Sample Debugging Session996442
-Node: Debugger Invocation996992
-Node: Finding The Bug998617
-Node: List of Debugger Commands1005249
-Node: Breakpoint Control1006626
-Node: Debugger Execution Control1010448
-Node: Viewing And Changing Data1013922
-Node: Execution Stack1017656
-Node: Debugger Info1019337
-Node: Miscellaneous Debugger Commands1023632
-Node: Readline Support1028873
-Node: Limitations1029817
-Node: Debugging Summary1032441
-Node: Namespaces1033740
-Node: Global Namespace1034867
-Node: Qualified Names1036301
-Node: Default Namespace1037336
-Node: Changing The Namespace1038109
-Node: Naming Rules1039791
-Node: Internal Name Management1041746
-Node: Namespace Example1042816
-Node: Namespace And Features1045393
-Node: Namespace Summary1046848
-Node: Arbitrary Precision Arithmetic1048359
-Node: Computer Arithmetic1049878
-Ref: table-numeric-ranges1053803
-Ref: table-floating-point-ranges1054300
-Ref: Computer Arithmetic-Footnote-11054958
-Node: Math Definitions1055015
-Ref: table-ieee-formats1058047
-Node: MPFR features1058620
-Node: MPFR On Parole1059073
-Ref: MPFR On Parole-Footnote-11059914
-Node: MPFR Intro1060073
-Node: FP Math Caution1061757
-Ref: FP Math Caution-Footnote-11062829
-Node: Inexactness of computations1063202
-Node: Inexact representation1064233
-Node: Comparing FP Values1065614
-Node: Errors accumulate1066872
-Node: Strange values1068337
-Ref: Strange values-Footnote-11070991
-Node: Getting Accuracy1071096
-Node: Try To Round1073833
-Node: Setting precision1074740
-Ref: table-predefined-precision-strings1075445
-Node: Setting the rounding mode1077329
-Ref: table-gawk-rounding-modes1077711
-Ref: Setting the rounding mode-Footnote-11081763
-Node: Arbitrary Precision Integers1081946
-Ref: Arbitrary Precision Integers-Footnote-11085156
-Node: Checking for MPFR1085309
-Node: POSIX Floating Point Problems1086799
-Ref: POSIX Floating Point Problems-Footnote-11091619
-Node: Floating point summary1091657
-Node: Dynamic Extensions1093913
-Node: Extension Intro1095510
-Node: Plugin License1096812
-Node: Extension Mechanism Outline1097625
-Ref: figure-load-extension1098076
-Ref: figure-register-new-function1099654
-Ref: figure-call-new-function1100763
-Node: Extension API Description1102878
-Node: Extension API Functions Introduction1104607
-Ref: table-api-std-headers1106501
-Node: General Data Types1110942
-Ref: General Data Types-Footnote-11120088
-Node: Memory Allocation Functions1120391
-Ref: Memory Allocation Functions-Footnote-11125108
-Node: Constructor Functions1125207
-Node: API Ownership of MPFR and GMP Values1129108
-Node: Registration Functions1130661
-Node: Extension Functions1131365
-Node: Exit Callback Functions1136939
-Node: Extension Version String1138253
-Node: Input Parsers1138948
-Node: Output Wrappers1153567
-Node: Two-way processors1158409
-Node: Printing Messages1160762
-Ref: Printing Messages-Footnote-11161973
-Node: Updating ERRNO1162126
-Node: Requesting Values1162925
-Ref: table-value-types-returned1163678
-Node: Accessing Parameters1165737
-Node: Symbol Table Access1167018
-Node: Symbol table by name1167530
-Ref: Symbol table by name-Footnote-11170731
-Node: Symbol table by cookie1170863
-Ref: Symbol table by cookie-Footnote-11175132
-Node: Cached values1175196
-Ref: Cached values-Footnote-11178828
-Node: Array Manipulation1178985
-Ref: Array Manipulation-Footnote-11180084
-Node: Array Data Types1180121
-Ref: Array Data Types-Footnote-11182939
-Node: Array Functions1183035
-Node: Flattening Arrays1188064
-Node: Creating Arrays1195112
-Node: Redirection API1199954
-Node: Extension API Variables1202971
-Node: Extension Versioning1203694
-Ref: gawk-api-version1204123
-Node: Extension GMP/MPFR Versioning1205910
-Node: Extension API Informational Variables1207614
-Node: Extension API Boilerplate1208867
-Node: Changes from API V11212997
-Node: Finding Extensions1214629
-Node: Extension Example1215204
-Node: Internal File Description1216026
-Node: Internal File Ops1220318
-Ref: Internal File Ops-Footnote-11231868
-Node: Using Internal File Ops1232016
-Ref: Using Internal File Ops-Footnote-11234449
-Node: Extension Samples1234727
-Node: Extension Sample File Functions1236296
-Node: Extension Sample Fnmatch1244421
-Node: Extension Sample Fork1246016
-Node: Extension Sample Inplace1247292
-Node: Extension Sample Ord1251394
-Node: Extension Sample Readdir1252270
-Ref: table-readdir-file-types1253059
-Node: Extension Sample Revout1254415
-Node: Extension Sample Rev2way1255012
-Node: Extension Sample Read write array1255764
-Node: Extension Sample Readfile1259038
-Node: Extension Sample Time1260169
-Node: Extension Sample API Tests1262169
-Node: gawkextlib1262677
-Node: Extension summary1265709
-Node: Extension Exercises1269557
-Node: Language History1270827
-Node: V7/SVR3.11272539
-Node: SVR41274889
-Node: POSIX1276421
-Node: BTL1277846
-Node: POSIX/GNU1278613
-Ref: Gawk Extension Functions1282003
-Node: Feature History1285427
-Node: Common Extensions1305268
-Node: Ranges and Locales1306743
-Ref: Ranges and Locales-Footnote-11311528
-Ref: Ranges and Locales-Footnote-21311555
-Ref: Ranges and Locales-Footnote-31311790
-Node: Contributors1312013
-Node: History summary1318204
-Node: Installation1319646
-Node: Gawk Distribution1320610
-Node: Getting1321102
-Node: Extracting1322101
-Node: Distribution contents1323807
-Node: Unix Installation1331697
-Node: Quick Installation1332517
-Node: Compiling with MPFR1335057
-Node: Shell Startup Files1335763
-Node: Additional Configuration Options1336920
-Node: Configuration Philosophy1339303
-Node: Compiling from Git1341803
-Node: Building the Documentation1342362
-Node: Non-Unix Installation1343774
-Node: PC Installation1344250
-Node: PC Binary Installation1345119
-Node: PC Compiling1346012
-Node: PC Using1347190
-Node: Cygwin1350906
-Node: MSYS1352158
-Node: OpenVMS Installation1352784
-Node: OpenVMS Compilation1353465
-Ref: OpenVMS Compilation-Footnote-11354948
-Node: OpenVMS Dynamic Extensions1355006
-Node: OpenVMS Installation Details1356642
-Node: OpenVMS Running1359073
-Node: OpenVMS GNV1363210
-Node: Bugs1363965
-Node: Bug definition1364885
-Node: Bug address1368486
-Node: Usenet1372055
-Node: Performance bugs1373268
-Node: Asking for help1376272
-Node: Maintainers1378259
-Node: Other Versions1379286
-Node: Installation summary1389275
-Node: Notes1390657
-Node: Compatibility Mode1391467
-Node: Additions1392289
-Node: Accessing The Source1393234
-Node: Adding Code1394765
-Node: New Ports1401876
-Node: Derived Files1406379
-Ref: Derived Files-Footnote-11412190
-Ref: Derived Files-Footnote-21412225
-Ref: Derived Files-Footnote-31412836
-Node: Future Extensions1412950
-Node: Implementation Limitations1413620
-Node: Extension Design1414862
-Node: Old Extension Problems1416022
-Ref: Old Extension Problems-Footnote-11417594
-Node: Extension New Mechanism Goals1417655
-Ref: Extension New Mechanism Goals-Footnote-11421125
-Node: Extension Other Design Decisions1421326
-Node: Extension Future Growth1423523
-Node: Notes summary1424143
-Node: Basic Concepts1425353
-Node: Basic High Level1426038
-Ref: figure-general-flow1426320
-Ref: figure-process-flow1427022
-Ref: Basic High Level-Footnote-11430392
-Node: Basic Data Typing1430581
-Node: Glossary1433989
-Node: Copying1466867
-Node: GNU Free Documentation License1504425
-Node: Index1529548
+Ref: Splitting By Content-Footnote-1273306
+Node: More CSV273469
+Node: FS versus FPAT275545
+Node: Testing field creation276745
+Node: Multiple Line278519
+Node: Getline284988
+Node: Plain Getline287576
+Node: Getline/Variable290224
+Node: Getline/File291420
+Node: Getline/Variable/File292868
+Ref: Getline/Variable/File-Footnote-1294513
+Node: Getline/Pipe294609
+Node: Getline/Variable/Pipe297417
+Node: Getline/Coprocess298600
+Node: Getline/Variable/Coprocess299923
+Node: Getline Notes300689
+Node: Getline Summary304666
+Ref: table-getline-variants305110
+Node: Read Timeout306014
+Ref: Read Timeout-Footnote-1309976
+Node: Retrying Input310034
+Node: Command-line directories311301
+Node: Input Summary312239
+Node: Input Exercises315619
+Node: Printing316057
+Node: Print318000
+Node: Print Examples319501
+Node: Output Separators322346
+Node: OFMT324453
+Node: Printf326166
+Node: Basic Printf326971
+Node: Control Letters328606
+Node: Format Modifiers334052
+Node: Printf Examples340324
+Node: Redirection342865
+Node: Special FD350637
+Ref: Special FD-Footnote-1353935
+Node: Special Files354013
+Node: Other Inherited Files354642
+Node: Special Network355707
+Node: Special Caveats356595
+Node: Close Files And Pipes357578
+Ref: Close Files And Pipes-Footnote-1363702
+Node: Close Return Value363850
+Ref: table-close-pipe-return-values365121
+Ref: Close Return Value-Footnote-1365952
+Node: Noflush366108
+Node: Nonfatal367616
+Node: Output Summary370031
+Node: Output Exercises371317
+Node: Expressions372008
+Node: Values373208
+Node: Constants373886
+Node: Scalar Constants374581
+Ref: Scalar Constants-Footnote-1377157
+Ref: Scalar Constants-Footnote-2377407
+Node: Nondecimal-numbers377487
+Node: Regexp Constants380600
+Node: Using Constant Regexps381146
+Node: Standard Regexp Constants381792
+Node: Strong Regexp Constants385088
+Node: Variables388931
+Node: Using Variables389596
+Node: Assignment Options391570
+Node: Conversion394121
+Node: Strings And Numbers394653
+Ref: Strings And Numbers-Footnote-1397863
+Node: Locale influences conversions397972
+Ref: table-locale-affects400810
+Node: All Operators401452
+Node: Arithmetic Ops402093
+Node: Concatenation404916
+Ref: Concatenation-Footnote-1407852
+Node: Assignment Ops407971
+Ref: table-assign-ops413098
+Node: Increment Ops414479
+Node: Truth Values and Conditions418070
+Node: Truth Values419164
+Node: Typing and Comparison420244
+Node: Variable Typing421076
+Ref: Variable Typing-Footnote-1427720
+Ref: Variable Typing-Footnote-2427800
+Node: Comparison Operators427881
+Ref: table-relational-ops428308
+Node: POSIX String Comparison431984
+Ref: POSIX String Comparison-Footnote-1433741
+Ref: POSIX String Comparison-Footnote-2433884
+Node: Boolean Ops433968
+Ref: Boolean Ops-Footnote-1438642
+Node: Conditional Exp438738
+Node: Function Calls440518
+Node: Precedence444465
+Node: Locales448328
+Node: Expressions Summary450004
+Node: Patterns and Actions452659
+Node: Pattern Overview453795
+Node: Regexp Patterns455520
+Node: Expression Patterns456066
+Node: Ranges459971
+Node: BEGIN/END463145
+Node: Using BEGIN/END463954
+Ref: Using BEGIN/END-Footnote-1466862
+Node: I/O And BEGIN/END466972
+Node: BEGINFILE/ENDFILE469454
+Node: Empty472884
+Node: Using Shell Variables473201
+Node: Action Overview475537
+Node: Statements477973
+Node: If Statement479869
+Node: While Statement481432
+Node: Do Statement483520
+Node: For Statement484704
+Node: Switch Statement488059
+Node: Break Statement490608
+Node: Continue Statement492800
+Node: Next Statement494731
+Node: Nextfile Statement497210
+Node: Exit Statement500063
+Node: Built-in Variables502590
+Node: User-modified503767
+Node: Auto-set511974
+Ref: Auto-set-Footnote-1530058
+Ref: Auto-set-Footnote-2530276
+Node: ARGC and ARGV530332
+Node: Pattern Action Summary534761
+Node: Arrays537367
+Node: Array Basics538740
+Node: Array Intro539588
+Ref: figure-array-elements541599
+Ref: Array Intro-Footnote-1544452
+Node: Reference to Elements544584
+Node: Assigning Elements547104
+Node: Array Example547599
+Node: Scanning an Array549561
+Node: Controlling Scanning552656
+Ref: Controlling Scanning-Footnote-1559291
+Node: Numeric Array Subscripts559615
+Node: Uninitialized Subscripts561883
+Node: Delete563556
+Ref: Delete-Footnote-1566368
+Node: Multidimensional566425
+Node: Multiscanning569628
+Node: Arrays of Arrays571295
+Node: Arrays Summary575599
+Node: Functions577786
+Node: Built-in578918
+Node: Calling Built-in580107
+Node: Boolean Functions582147
+Node: Numeric Functions582709
+Ref: Numeric Functions-Footnote-1586894
+Ref: Numeric Functions-Footnote-2587577
+Ref: Numeric Functions-Footnote-3587629
+Node: String Functions587905
+Ref: String Functions-Footnote-1614356
+Ref: String Functions-Footnote-2614488
+Ref: String Functions-Footnote-3614744
+Node: Gory Details614831
+Ref: table-sub-escapes616840
+Ref: table-sub-proposed618471
+Ref: table-posix-sub619966
+Ref: table-gensub-escapes621639
+Ref: Gory Details-Footnote-1622558
+Node: I/O Functions622712
+Ref: table-system-return-values629388
+Ref: I/O Functions-Footnote-1631550
+Ref: I/O Functions-Footnote-2631698
+Node: Time Functions631818
+Ref: Time Functions-Footnote-1643530
+Ref: Time Functions-Footnote-2643598
+Ref: Time Functions-Footnote-3643760
+Ref: Time Functions-Footnote-4643871
+Ref: Time Functions-Footnote-5643987
+Ref: Time Functions-Footnote-6644214
+Node: Bitwise Functions644492
+Ref: table-bitwise-ops645090
+Ref: Bitwise Functions-Footnote-1651332
+Ref: Bitwise Functions-Footnote-2651509
+Node: Type Functions651704
+Node: I18N Functions653875
+Node: User-defined655610
+Node: Definition Syntax656356
+Ref: Definition Syntax-Footnote-1662174
+Node: Function Example662249
+Ref: Function Example-Footnote-1665228
+Node: Function Calling665250
+Node: Calling A Function665842
+Node: Variable Scope666812
+Node: Pass By Value/Reference669866
+Node: Function Caveats672594
+Ref: Function Caveats-Footnote-1674685
+Node: Return Statement674805
+Node: Dynamic Typing677837
+Node: Dynamic Typing Awk678415
+Node: Dynamic Typing Gawk680553
+Node: Indirect Calls683923
+Node: Functions Summary695060
+Node: Library Functions698026
+Ref: Library Functions-Footnote-1701574
+Ref: Library Functions-Footnote-2701719
+Node: Library Names701894
+Ref: Library Names-Footnote-1705665
+Ref: Library Names-Footnote-2705892
+Node: General Functions705986
+Node: Strtonum Function707256
+Node: Assert Function710338
+Node: Round Function713788
+Node: Cliff Random Function715360
+Node: Ordinal Functions716384
+Ref: Ordinal Functions-Footnote-1719487
+Ref: Ordinal Functions-Footnote-2719739
+Node: Join Function719953
+Ref: Join Function-Footnote-1721751
+Node: Getlocaltime Function721955
+Node: Readfile Function725729
+Node: Shell Quoting727758
+Node: Isnumeric Function729214
+Node: To CSV Function730650
+Node: Data File Management732742
+Node: Filetrans Function733374
+Node: Rewind Function737650
+Node: File Checking739621
+Ref: File Checking-Footnote-1740987
+Node: Empty Files741192
+Node: Ignoring Assigns743255
+Node: Getopt Function744829
+Ref: Getopt Function-Footnote-1760647
+Node: Passwd Functions760859
+Ref: Passwd Functions-Footnote-1769994
+Node: Group Functions770082
+Ref: Group Functions-Footnote-1778206
+Node: Walking Arrays778417
+Node: Library Functions Summary781463
+Node: Library Exercises782883
+Node: Sample Programs783368
+Node: Running Examples784150
+Node: Clones784902
+Node: Cut Program786170
+Node: Egrep Program796594
+Node: Id Program805893
+Node: Split Program815985
+Ref: Split Program-Footnote-1826198
+Node: Tee Program826383
+Node: Uniq Program829289
+Node: Wc Program837149
+Node: Bytes vs. Characters837544
+Node: Using extensions839144
+Node: wc program839922
+Node: Miscellaneous Programs844915
+Node: Dupword Program846140
+Node: Alarm Program848189
+Node: Translate Program853092
+Ref: Translate Program-Footnote-1857801
+Node: Labels Program858079
+Ref: Labels Program-Footnote-1861514
+Node: Word Sorting861598
+Node: History Sorting865772
+Node: Extract Program868045
+Node: Simple Sed876298
+Node: Igawk Program879508
+Ref: Igawk Program-Footnote-1894718
+Ref: Igawk Program-Footnote-2894924
+Ref: Igawk Program-Footnote-3895054
+Node: Anagram Program895181
+Node: Signature Program898267
+Node: Programs Summary899517
+Node: Programs Exercises900771
- Ref: Programs Exercises-Footnote-1905073
- Node: Advanced Features905159
- Node: Nondecimal Data907640
- Node: Boolean Typed Values909270
- Node: Array Sorting911227
- Node: Controlling Array Traversal911956
- Ref: Controlling Array Traversal-Footnote-1920459
- Node: Array Sorting Functions920581
- Ref: Array Sorting Functions-Footnote-1926678
- Node: Two-way I/O926886
- Ref: Two-way I/O-Footnote-1934857
- Ref: Two-way I/O-Footnote-2935048
- Node: TCP/IP Networking935130
- Node: Profiling938298
- Node: Persistent Memory947968
- Ref: Persistent Memory-Footnote-1957540
- Node: Extension Philosophy957671
- Node: Advanced Features Summary959198
- Node: Internationalization961464
- Node: I18N and L10N963166
- Node: Explaining gettext963861
- Ref: Explaining gettext-Footnote-1969997
- Ref: Explaining gettext-Footnote-2970190
- Node: Programmer i18n970355
- Ref: Programmer i18n-Footnote-1975467
- Node: Translator i18n975516
- Node: String Extraction976346
- Ref: String Extraction-Footnote-1977522
- Node: Printf Ordering977620
- Ref: Printf Ordering-Footnote-1980478
- Node: I18N Portability980546
- Ref: I18N Portability-Footnote-1983106
- Node: I18N Example983173
- Ref: I18N Example-Footnote-1986567
- Ref: I18N Example-Footnote-2986640
- Node: Gawk I18N986757
- Node: I18N Summary987411
- Node: Debugger988808
- Node: Debugging989828
- Node: Debugging Concepts990277
- Node: Debugging Terms992094
- Node: Awk Debugging994697
- Ref: Awk Debugging-Footnote-1995670
- Node: Sample Debugging Session995806
- Node: Debugger Invocation996356
- Node: Finding The Bug997981
- Node: List of Debugger Commands1004613
- Node: Breakpoint Control1005990
- Node: Debugger Execution Control1009812
- Node: Viewing And Changing Data1013286
- Node: Execution Stack1017020
- Node: Debugger Info1018701
- Node: Miscellaneous Debugger Commands1022996
- Node: Readline Support1028237
- Node: Limitations1029181
- Node: Debugging Summary1031805
- Node: Namespaces1033104
- Node: Global Namespace1034231
- Node: Qualified Names1035665
- Node: Default Namespace1036700
- Node: Changing The Namespace1037473
- Node: Naming Rules1039155
- Node: Internal Name Management1041110
- Node: Namespace Example1042180
- Node: Namespace And Features1044757
- Node: Namespace Summary1046212
- Node: Arbitrary Precision Arithmetic1047723
- Node: Computer Arithmetic1049242
- Ref: table-numeric-ranges1053167
- Ref: table-floating-point-ranges1053664
- Ref: Computer Arithmetic-Footnote-11054322
- Node: Math Definitions1054379
- Ref: table-ieee-formats1057411
- Node: MPFR features1057984
- Node: MPFR On Parole1058437
- Ref: MPFR On Parole-Footnote-11059278
- Node: MPFR Intro1059437
- Node: FP Math Caution1061121
- Ref: FP Math Caution-Footnote-11062193
- Node: Inexactness of computations1062566
- Node: Inexact representation1063597
- Node: Comparing FP Values1064978
- Node: Errors accumulate1066236
- Node: Strange values1067701
- Ref: Strange values-Footnote-11070355
- Node: Getting Accuracy1070460
- Node: Try To Round1073197
- Node: Setting precision1074104
- Ref: table-predefined-precision-strings1074809
- Node: Setting the rounding mode1076693
- Ref: table-gawk-rounding-modes1077075
- Ref: Setting the rounding mode-Footnote-11081127
- Node: Arbitrary Precision Integers1081310
- Ref: Arbitrary Precision Integers-Footnote-11084520
- Node: Checking for MPFR1084673
- Node: POSIX Floating Point Problems1086163
- Ref: POSIX Floating Point Problems-Footnote-11090983
- Node: Floating point summary1091021
- Node: Dynamic Extensions1093277
- Node: Extension Intro1094874
- Node: Plugin License1096176
- Node: Extension Mechanism Outline1096989
- Ref: figure-load-extension1097440
- Ref: figure-register-new-function1099018
- Ref: figure-call-new-function1100127
- Node: Extension API Description1102242
- Node: Extension API Functions Introduction1103971
- Ref: table-api-std-headers1105865
- Node: General Data Types1110306
- Ref: General Data Types-Footnote-11119452
- Node: Memory Allocation Functions1119755
- Ref: Memory Allocation Functions-Footnote-11124472
- Node: Constructor Functions1124571
- Node: API Ownership of MPFR and GMP Values1128472
- Node: Registration Functions1130025
- Node: Extension Functions1130729
- Node: Exit Callback Functions1136303
- Node: Extension Version String1137617
- Node: Input Parsers1138312
- Node: Output Wrappers1152931
- Node: Two-way processors1157773
- Node: Printing Messages1160126
- Ref: Printing Messages-Footnote-11161337
- Node: Updating ERRNO1161490
- Node: Requesting Values1162289
- Ref: table-value-types-returned1163042
- Node: Accessing Parameters1165101
- Node: Symbol Table Access1166382
- Node: Symbol table by name1166894
- Ref: Symbol table by name-Footnote-11170095
- Node: Symbol table by cookie1170227
- Ref: Symbol table by cookie-Footnote-11174496
- Node: Cached values1174560
- Ref: Cached values-Footnote-11178192
- Node: Array Manipulation1178349
- Ref: Array Manipulation-Footnote-11179448
- Node: Array Data Types1179485
- Ref: Array Data Types-Footnote-11182303
- Node: Array Functions1182399
- Node: Flattening Arrays1187428
- Node: Creating Arrays1194476
- Node: Redirection API1199318
- Node: Extension API Variables1202335
- Node: Extension Versioning1203058
- Ref: gawk-api-version1203487
- Node: Extension GMP/MPFR Versioning1205274
- Node: Extension API Informational Variables1206978
- Node: Extension API Boilerplate1208231
- Node: Changes from API V11212361
- Node: Finding Extensions1213993
- Node: Extension Example1214568
- Node: Internal File Description1215390
- Node: Internal File Ops1219682
- Ref: Internal File Ops-Footnote-11231232
- Node: Using Internal File Ops1231380
- Ref: Using Internal File Ops-Footnote-11233813
- Node: Extension Samples1234091
- Node: Extension Sample File Functions1235660
- Node: Extension Sample Fnmatch1243785
- Node: Extension Sample Fork1245380
- Node: Extension Sample Inplace1246656
- Node: Extension Sample Ord1250758
- Node: Extension Sample Readdir1251634
- Ref: table-readdir-file-types1252423
- Node: Extension Sample Revout1253779
- Node: Extension Sample Rev2way1254376
- Node: Extension Sample Read write array1255128
- Node: Extension Sample Readfile1258402
- Node: Extension Sample Time1259533
- Node: Extension Sample API Tests1261533
- Node: gawkextlib1262041
- Node: Extension summary1265073
- Node: Extension Exercises1268921
- Node: Language History1270191
- Node: V7/SVR3.11271903
- Node: SVR41274253
- Node: POSIX1275785
- Node: BTL1277210
- Node: POSIX/GNU1277977
- Ref: Gawk Extension Functions1281367
- Node: Feature History1284791
- Node: Common Extensions1304632
- Node: Ranges and Locales1306107
- Ref: Ranges and Locales-Footnote-11310892
- Ref: Ranges and Locales-Footnote-21310919
- Ref: Ranges and Locales-Footnote-31311154
- Node: Contributors1311377
- Node: History summary1317568
- Node: Installation1319010
- Node: Gawk Distribution1319974
- Node: Getting1320466
- Node: Extracting1321465
- Node: Distribution contents1323171
- Node: Unix Installation1331061
- Node: Quick Installation1331881
- Node: Compiling with MPFR1334421
- Node: Shell Startup Files1335127
- Node: Additional Configuration Options1336284
- Node: Configuration Philosophy1338667
- Node: Compiling from Git1341167
- Node: Building the Documentation1341726
- Node: Non-Unix Installation1343138
- Node: PC Installation1343614
- Node: PC Binary Installation1344483
- Node: PC Compiling1345376
- Node: PC Using1346554
- Node: Cygwin1350270
- Node: MSYS1351522
- Node: OpenVMS Installation1352148
- Node: OpenVMS Compilation1352829
- Ref: OpenVMS Compilation-Footnote-11354312
- Node: OpenVMS Dynamic Extensions1354370
- Node: OpenVMS Installation Details1356006
- Node: OpenVMS Running1358437
- Node: OpenVMS GNV1362574
- Node: Bugs1363329
- Node: Bug definition1364249
- Node: Bug address1367850
- Node: Usenet1371419
- Node: Performance bugs1372632
- Node: Asking for help1375636
- Node: Maintainers1377623
- Node: Other Versions1378650
- Node: Installation summary1388639
- Node: Notes1390021
- Node: Compatibility Mode1390831
- Node: Additions1391653
- Node: Accessing The Source1392598
- Node: Adding Code1394129
- Node: New Ports1401240
- Node: Derived Files1405743
- Ref: Derived Files-Footnote-11411554
- Ref: Derived Files-Footnote-21411589
- Ref: Derived Files-Footnote-31412200
- Node: Future Extensions1412314
- Node: Implementation Limitations1412984
- Node: Extension Design1414226
- Node: Old Extension Problems1415386
- Ref: Old Extension Problems-Footnote-11416958
- Node: Extension New Mechanism Goals1417019
- Ref: Extension New Mechanism Goals-Footnote-11420489
- Node: Extension Other Design Decisions1420690
- Node: Extension Future Growth1422887
- Node: Notes summary1423507
- Node: Basic Concepts1424717
- Node: Basic High Level1425402
- Ref: figure-general-flow1425684
- Ref: figure-process-flow1426386
- Ref: Basic High Level-Footnote-11429756
- Node: Basic Data Typing1429945
- Node: Glossary1433353
- Node: Copying1466231
- Node: GNU Free Documentation License1503789
- Node: Index1528912
++Ref: Programs Exercises-Footnote-1905600
++Node: Advanced Features905686
++Node: Nondecimal Data908167
++Node: Boolean Typed Values909797
++Node: Array Sorting911754
++Node: Controlling Array Traversal912483
++Ref: Controlling Array Traversal-Footnote-1920986
++Node: Array Sorting Functions921108
++Ref: Array Sorting Functions-Footnote-1927205
++Node: Two-way I/O927413
++Ref: Two-way I/O-Footnote-1935384
++Ref: Two-way I/O-Footnote-2935575
++Node: TCP/IP Networking935657
++Node: Profiling938825
++Node: Persistent Memory948495
++Ref: Persistent Memory-Footnote-1958067
++Node: Extension Philosophy958198
++Node: Advanced Features Summary959725
++Node: Internationalization961991
++Node: I18N and L10N963693
++Node: Explaining gettext964388
++Ref: Explaining gettext-Footnote-1970524
++Ref: Explaining gettext-Footnote-2970717
++Node: Programmer i18n970882
++Ref: Programmer i18n-Footnote-1975994
++Node: Translator i18n976043
++Node: String Extraction976873
++Ref: String Extraction-Footnote-1978049
++Node: Printf Ordering978147
++Ref: Printf Ordering-Footnote-1981005
++Node: I18N Portability981073
++Ref: I18N Portability-Footnote-1983633
++Node: I18N Example983700
++Ref: I18N Example-Footnote-1987094
++Ref: I18N Example-Footnote-2987167
++Node: Gawk I18N987284
++Node: I18N Summary987938
++Node: Debugger989335
++Node: Debugging990355
++Node: Debugging Concepts990804
++Node: Debugging Terms992621
++Node: Awk Debugging995224
++Ref: Awk Debugging-Footnote-1996197
++Node: Sample Debugging Session996333
++Node: Debugger Invocation996883
++Node: Finding The Bug998508
++Node: List of Debugger Commands1005140
++Node: Breakpoint Control1006517
++Node: Debugger Execution Control1010339
++Node: Viewing And Changing Data1013813
++Node: Execution Stack1017547
++Node: Debugger Info1019228
++Node: Miscellaneous Debugger Commands1023523
++Node: Readline Support1028764
++Node: Limitations1029708
++Node: Debugging Summary1032332
++Node: Namespaces1033631
++Node: Global Namespace1034758
++Node: Qualified Names1036192
++Node: Default Namespace1037227
++Node: Changing The Namespace1038000
++Node: Naming Rules1039682
++Node: Internal Name Management1041637
++Node: Namespace Example1042707
++Node: Namespace And Features1045284
++Node: Namespace Summary1046739
++Node: Arbitrary Precision Arithmetic1048250
++Node: Computer Arithmetic1049769
++Ref: table-numeric-ranges1053694
++Ref: table-floating-point-ranges1054191
++Ref: Computer Arithmetic-Footnote-11054849
++Node: Math Definitions1054906
++Ref: table-ieee-formats1057938
++Node: MPFR features1058511
++Node: MPFR On Parole1058964
++Ref: MPFR On Parole-Footnote-11059805
++Node: MPFR Intro1059964
++Node: FP Math Caution1061648
++Ref: FP Math Caution-Footnote-11062720
++Node: Inexactness of computations1063093
++Node: Inexact representation1064124
++Node: Comparing FP Values1065505
++Node: Errors accumulate1066763
++Node: Strange values1068228
++Ref: Strange values-Footnote-11070882
++Node: Getting Accuracy1070987
++Node: Try To Round1073724
++Node: Setting precision1074631
++Ref: table-predefined-precision-strings1075336
++Node: Setting the rounding mode1077220
++Ref: table-gawk-rounding-modes1077602
++Ref: Setting the rounding mode-Footnote-11081654
++Node: Arbitrary Precision Integers1081837
++Ref: Arbitrary Precision Integers-Footnote-11085047
++Node: Checking for MPFR1085200
++Node: POSIX Floating Point Problems1086690
++Ref: POSIX Floating Point Problems-Footnote-11091510
++Node: Floating point summary1091548
++Node: Dynamic Extensions1093804
++Node: Extension Intro1095401
++Node: Plugin License1096703
++Node: Extension Mechanism Outline1097516
++Ref: figure-load-extension1097967
++Ref: figure-register-new-function1099545
++Ref: figure-call-new-function1100654
++Node: Extension API Description1102769
++Node: Extension API Functions Introduction1104498
++Ref: table-api-std-headers1106392
++Node: General Data Types1110833
++Ref: General Data Types-Footnote-11119979
++Node: Memory Allocation Functions1120282
++Ref: Memory Allocation Functions-Footnote-11124999
++Node: Constructor Functions1125098
++Node: API Ownership of MPFR and GMP Values1128999
++Node: Registration Functions1130552
++Node: Extension Functions1131256
++Node: Exit Callback Functions1136830
++Node: Extension Version String1138144
++Node: Input Parsers1138839
++Node: Output Wrappers1153458
++Node: Two-way processors1158300
++Node: Printing Messages1160653
++Ref: Printing Messages-Footnote-11161864
++Node: Updating ERRNO1162017
++Node: Requesting Values1162816
++Ref: table-value-types-returned1163569
++Node: Accessing Parameters1165628
++Node: Symbol Table Access1166909
++Node: Symbol table by name1167421
++Ref: Symbol table by name-Footnote-11170622
++Node: Symbol table by cookie1170754
++Ref: Symbol table by cookie-Footnote-11175023
++Node: Cached values1175087
++Ref: Cached values-Footnote-11178719
++Node: Array Manipulation1178876
++Ref: Array Manipulation-Footnote-11179975
++Node: Array Data Types1180012
++Ref: Array Data Types-Footnote-11182830
++Node: Array Functions1182926
++Node: Flattening Arrays1187955
++Node: Creating Arrays1195003
++Node: Redirection API1199845
++Node: Extension API Variables1202862
++Node: Extension Versioning1203585
++Ref: gawk-api-version1204014
++Node: Extension GMP/MPFR Versioning1205801
++Node: Extension API Informational Variables1207505
++Node: Extension API Boilerplate1208758
++Node: Changes from API V11212888
++Node: Finding Extensions1214520
++Node: Extension Example1215095
++Node: Internal File Description1215917
++Node: Internal File Ops1220209
++Ref: Internal File Ops-Footnote-11231759
++Node: Using Internal File Ops1231907
++Ref: Using Internal File Ops-Footnote-11234340
++Node: Extension Samples1234618
++Node: Extension Sample File Functions1236187
++Node: Extension Sample Fnmatch1244312
++Node: Extension Sample Fork1245907
++Node: Extension Sample Inplace1247183
++Node: Extension Sample Ord1251285
++Node: Extension Sample Readdir1252161
++Ref: table-readdir-file-types1252950
++Node: Extension Sample Revout1254306
++Node: Extension Sample Rev2way1254903
++Node: Extension Sample Read write array1255655
++Node: Extension Sample Readfile1258929
++Node: Extension Sample Time1260060
++Node: Extension Sample API Tests1262060
++Node: gawkextlib1262568
++Node: Extension summary1265600
++Node: Extension Exercises1269448
++Node: Language History1270718
++Node: V7/SVR3.11272430
++Node: SVR41274780
++Node: POSIX1276312
++Node: BTL1277737
++Node: POSIX/GNU1278504
++Ref: Gawk Extension Functions1281894
++Node: Feature History1285318
++Node: Common Extensions1305159
++Node: Ranges and Locales1306634
++Ref: Ranges and Locales-Footnote-11311419
++Ref: Ranges and Locales-Footnote-21311446
++Ref: Ranges and Locales-Footnote-31311681
++Node: Contributors1311904
++Node: History summary1318095
++Node: Installation1319537
++Node: Gawk Distribution1320501
++Node: Getting1320993
++Node: Extracting1321992
++Node: Distribution contents1323698
++Node: Unix Installation1331588
++Node: Quick Installation1332408
++Node: Compiling with MPFR1334948
++Node: Shell Startup Files1335654
++Node: Additional Configuration Options1336811
++Node: Configuration Philosophy1339194
++Node: Compiling from Git1341694
++Node: Building the Documentation1342253
++Node: Non-Unix Installation1343665
++Node: PC Installation1344141
++Node: PC Binary Installation1345010
++Node: PC Compiling1345903
++Node: PC Using1347081
++Node: Cygwin1350797
++Node: MSYS1352049
++Node: OpenVMS Installation1352675
++Node: OpenVMS Compilation1353356
++Ref: OpenVMS Compilation-Footnote-11354839
++Node: OpenVMS Dynamic Extensions1354897
++Node: OpenVMS Installation Details1356533
++Node: OpenVMS Running1358964
++Node: OpenVMS GNV1363101
++Node: Bugs1363856
++Node: Bug definition1364776
++Node: Bug address1368377
++Node: Usenet1371946
++Node: Performance bugs1373159
++Node: Asking for help1376163
++Node: Maintainers1378150
++Node: Other Versions1379177
++Node: Installation summary1389166
++Node: Notes1390548
++Node: Compatibility Mode1391358
++Node: Additions1392180
++Node: Accessing The Source1393125
++Node: Adding Code1394656
++Node: New Ports1401767
++Node: Derived Files1406270
++Ref: Derived Files-Footnote-11412081
++Ref: Derived Files-Footnote-21412116
++Ref: Derived Files-Footnote-31412727
++Node: Future Extensions1412841
++Node: Implementation Limitations1413511
++Node: Extension Design1414753
++Node: Old Extension Problems1415913
++Ref: Old Extension Problems-Footnote-11417485
++Node: Extension New Mechanism Goals1417546
++Ref: Extension New Mechanism Goals-Footnote-11421016
++Node: Extension Other Design Decisions1421217
++Node: Extension Future Growth1423414
++Node: Notes summary1424034
++Node: Basic Concepts1425244
++Node: Basic High Level1425929
++Ref: figure-general-flow1426211
++Ref: figure-process-flow1426913
++Ref: Basic High Level-Footnote-11430283
++Node: Basic Data Typing1430472
++Node: Glossary1433880
++Node: Copying1466758
++Node: GNU Free Documentation License1504316
++Node: Index1529439
End Tag Table
http://git.sv.gnu.org/cgit/gawk.git/commit/?id=1b3cfc9a134aa78a633f100e5d4ac73a643b05ba
commit 1b3cfc9a134aa78a633f100e5d4ac73a643b05ba
Merge: 796a1dc3 be27eecb
Author: Arnold D. Robbins <arnold@skeeve.com>
Date: Thu Sep 12 06:36:21 2024 +0300
Merge branch 'gawk-5.3-stable' into stable/fpat-doc
diff --cc doc/gawk.info
index 3bf537fd,4176805b..6d157796
--- a/doc/gawk.info
+++ b/doc/gawk.info
@@@ -40031,526 -40043,526 +40041,526 @@@ Node: Skipping intervening26589
Node: Allowing trailing data266700
Node: Fields with fixed data267761
Node: Splitting By Content269383
-Ref: Splitting By Content-Footnote-1273833
-Node: More CSV273996
-Node: FS versus FPAT275654
-Node: Testing field creation276854
-Node: Multiple Line278628
-Node: Getline285097
-Node: Plain Getline287685
-Node: Getline/Variable290333
-Node: Getline/File291529
-Node: Getline/Variable/File292977
-Ref: Getline/Variable/File-Footnote-1294622
-Node: Getline/Pipe294718
-Node: Getline/Variable/Pipe297526
-Node: Getline/Coprocess298709
-Node: Getline/Variable/Coprocess300032
-Node: Getline Notes300798
-Node: Getline Summary304775
-Ref: table-getline-variants305219
-Node: Read Timeout306123
-Ref: Read Timeout-Footnote-1310085
-Node: Retrying Input310143
-Node: Command-line directories311410
-Node: Input Summary312348
-Node: Input Exercises315728
-Node: Printing316166
-Node: Print318109
-Node: Print Examples319610
-Node: Output Separators322455
-Node: OFMT324562
-Node: Printf326275
-Node: Basic Printf327080
-Node: Control Letters328715
-Node: Format Modifiers334161
-Node: Printf Examples340433
-Node: Redirection342974
-Node: Special FD350746
-Ref: Special FD-Footnote-1354044
-Node: Special Files354122
-Node: Other Inherited Files354751
-Node: Special Network355816
-Node: Special Caveats356704
-Node: Close Files And Pipes357687
-Ref: Close Files And Pipes-Footnote-1363811
-Node: Close Return Value363959
-Ref: table-close-pipe-return-values365230
-Ref: Close Return Value-Footnote-1366061
-Node: Noflush366217
-Node: Nonfatal367725
-Node: Output Summary370140
-Node: Output Exercises371426
-Node: Expressions372117
-Node: Values373317
-Node: Constants373995
-Node: Scalar Constants374690
-Ref: Scalar Constants-Footnote-1377266
-Ref: Scalar Constants-Footnote-2377516
-Node: Nondecimal-numbers377596
-Node: Regexp Constants380709
-Node: Using Constant Regexps381255
-Node: Standard Regexp Constants381901
-Node: Strong Regexp Constants385197
-Node: Variables389040
-Node: Using Variables389705
-Node: Assignment Options391679
-Node: Conversion394230
-Node: Strings And Numbers394762
-Ref: Strings And Numbers-Footnote-1397972
-Node: Locale influences conversions398081
-Ref: table-locale-affects400919
-Node: All Operators401561
-Node: Arithmetic Ops402202
-Node: Concatenation405025
-Ref: Concatenation-Footnote-1407961
-Node: Assignment Ops408080
-Ref: table-assign-ops413207
-Node: Increment Ops414588
-Node: Truth Values and Conditions418179
-Node: Truth Values419273
-Node: Typing and Comparison420353
-Node: Variable Typing421185
-Ref: Variable Typing-Footnote-1427829
-Ref: Variable Typing-Footnote-2427909
-Node: Comparison Operators427990
-Ref: table-relational-ops428417
-Node: POSIX String Comparison432093
-Ref: POSIX String Comparison-Footnote-1433850
-Ref: POSIX String Comparison-Footnote-2433993
-Node: Boolean Ops434077
-Ref: Boolean Ops-Footnote-1438751
-Node: Conditional Exp438847
-Node: Function Calls440627
-Node: Precedence444574
-Node: Locales448437
-Node: Expressions Summary450113
-Node: Patterns and Actions452768
-Node: Pattern Overview453904
-Node: Regexp Patterns455629
-Node: Expression Patterns456175
-Node: Ranges460080
-Node: BEGIN/END463254
-Node: Using BEGIN/END464063
-Ref: Using BEGIN/END-Footnote-1466971
-Node: I/O And BEGIN/END467081
-Node: BEGINFILE/ENDFILE469563
-Node: Empty472993
-Node: Using Shell Variables473310
-Node: Action Overview475646
-Node: Statements478082
-Node: If Statement479978
-Node: While Statement481541
-Node: Do Statement483629
-Node: For Statement484813
-Node: Switch Statement488168
-Node: Break Statement490717
-Node: Continue Statement492909
-Node: Next Statement494840
-Node: Nextfile Statement497319
-Node: Exit Statement500172
-Node: Built-in Variables502699
-Node: User-modified503876
-Node: Auto-set512083
-Ref: Auto-set-Footnote-1530167
-Ref: Auto-set-Footnote-2530385
-Node: ARGC and ARGV530441
-Node: Pattern Action Summary534870
-Node: Arrays537476
-Node: Array Basics538849
-Node: Array Intro539697
-Ref: figure-array-elements541708
-Ref: Array Intro-Footnote-1544561
-Node: Reference to Elements544693
-Node: Assigning Elements547213
-Node: Array Example547708
-Node: Scanning an Array549670
-Node: Controlling Scanning552765
-Ref: Controlling Scanning-Footnote-1559400
-Node: Numeric Array Subscripts559724
-Node: Uninitialized Subscripts561992
-Node: Delete563665
-Ref: Delete-Footnote-1566477
-Node: Multidimensional566534
-Node: Multiscanning569737
-Node: Arrays of Arrays571404
-Node: Arrays Summary575708
-Node: Functions577895
-Node: Built-in579027
-Node: Calling Built-in580216
-Node: Boolean Functions582256
-Node: Numeric Functions582818
-Ref: Numeric Functions-Footnote-1587003
-Ref: Numeric Functions-Footnote-2587686
-Ref: Numeric Functions-Footnote-3587738
-Node: String Functions588014
-Ref: String Functions-Footnote-1614465
-Ref: String Functions-Footnote-2614597
-Ref: String Functions-Footnote-3614853
-Node: Gory Details614940
-Ref: table-sub-escapes616949
-Ref: table-sub-proposed618580
-Ref: table-posix-sub620075
-Ref: table-gensub-escapes621748
-Ref: Gory Details-Footnote-1622667
-Node: I/O Functions622821
-Ref: table-system-return-values629497
-Ref: I/O Functions-Footnote-1631659
-Ref: I/O Functions-Footnote-2631807
-Node: Time Functions631927
-Ref: Time Functions-Footnote-1643639
-Ref: Time Functions-Footnote-2643707
-Ref: Time Functions-Footnote-3643869
-Ref: Time Functions-Footnote-4643980
-Ref: Time Functions-Footnote-5644096
-Ref: Time Functions-Footnote-6644323
-Node: Bitwise Functions644601
-Ref: table-bitwise-ops645199
-Ref: Bitwise Functions-Footnote-1651441
-Ref: Bitwise Functions-Footnote-2651618
-Node: Type Functions651813
-Node: I18N Functions653984
-Node: User-defined655719
-Node: Definition Syntax656465
-Ref: Definition Syntax-Footnote-1662283
-Node: Function Example662358
-Ref: Function Example-Footnote-1665337
-Node: Function Calling665359
-Node: Calling A Function665951
-Node: Variable Scope666921
-Node: Pass By Value/Reference669975
-Node: Function Caveats672703
-Ref: Function Caveats-Footnote-1674794
-Node: Return Statement674914
-Node: Dynamic Typing677946
-Node: Dynamic Typing Awk678524
-Node: Dynamic Typing Gawk680662
-Node: Indirect Calls684032
-Node: Functions Summary695169
-Node: Library Functions698135
-Ref: Library Functions-Footnote-1701683
-Ref: Library Functions-Footnote-2701828
-Node: Library Names702003
-Ref: Library Names-Footnote-1705774
-Ref: Library Names-Footnote-2706001
-Node: General Functions706095
-Node: Strtonum Function707365
-Node: Assert Function710447
-Node: Round Function713897
-Node: Cliff Random Function715469
-Node: Ordinal Functions716493
-Ref: Ordinal Functions-Footnote-1719596
-Ref: Ordinal Functions-Footnote-2719848
-Node: Join Function720062
-Ref: Join Function-Footnote-1721860
-Node: Getlocaltime Function722064
-Node: Readfile Function725838
-Node: Shell Quoting727867
-Node: Isnumeric Function729323
-Node: To CSV Function730759
-Node: Data File Management732851
-Node: Filetrans Function733483
-Node: Rewind Function737759
-Node: File Checking739730
-Ref: File Checking-Footnote-1741096
-Node: Empty Files741301
-Node: Ignoring Assigns743364
-Node: Getopt Function744938
-Ref: Getopt Function-Footnote-1760756
-Node: Passwd Functions760968
-Ref: Passwd Functions-Footnote-1770103
-Node: Group Functions770191
-Ref: Group Functions-Footnote-1778315
-Node: Walking Arrays778526
-Node: Library Functions Summary781572
-Node: Library Exercises782992
-Node: Sample Programs783477
-Node: Running Examples784259
-Node: Clones785011
-Node: Cut Program786279
-Node: Egrep Program796703
-Node: Id Program806002
-Node: Split Program816094
-Ref: Split Program-Footnote-1826307
-Node: Tee Program826492
-Node: Uniq Program829398
-Node: Wc Program837258
-Node: Bytes vs. Characters837653
-Node: Using extensions839253
-Node: wc program840031
-Node: Miscellaneous Programs845024
-Node: Dupword Program846249
-Node: Alarm Program848298
-Node: Translate Program853201
-Ref: Translate Program-Footnote-1857910
-Node: Labels Program858188
-Ref: Labels Program-Footnote-1861623
-Node: Word Sorting861707
-Node: History Sorting865881
-Node: Extract Program868154
-Node: Simple Sed876407
-Node: Igawk Program879617
-Ref: Igawk Program-Footnote-1894827
-Ref: Igawk Program-Footnote-2895033
-Ref: Igawk Program-Footnote-3895163
-Node: Anagram Program895290
-Node: Signature Program898376
-Node: Programs Summary899626
-Node: Programs Exercises900880
-Ref: Programs Exercises-Footnote-1905182
-Node: Advanced Features905268
-Node: Nondecimal Data907749
-Node: Boolean Typed Values909379
-Node: Array Sorting911336
-Node: Controlling Array Traversal912065
-Ref: Controlling Array Traversal-Footnote-1920568
-Node: Array Sorting Functions920690
-Ref: Array Sorting Functions-Footnote-1926787
-Node: Two-way I/O926995
-Ref: Two-way I/O-Footnote-1934966
-Ref: Two-way I/O-Footnote-2935157
-Node: TCP/IP Networking935239
-Node: Profiling938407
-Node: Persistent Memory948077
-Ref: Persistent Memory-Footnote-1957649
-Node: Extension Philosophy957780
-Node: Advanced Features Summary959307
-Node: Internationalization961573
-Node: I18N and L10N963275
-Node: Explaining gettext963970
-Ref: Explaining gettext-Footnote-1970106
-Ref: Explaining gettext-Footnote-2970299
-Node: Programmer i18n970464
-Ref: Programmer i18n-Footnote-1975576
-Node: Translator i18n975625
-Node: String Extraction976455
-Ref: String Extraction-Footnote-1977631
-Node: Printf Ordering977729
-Ref: Printf Ordering-Footnote-1980587
-Node: I18N Portability980655
-Ref: I18N Portability-Footnote-1983215
-Node: I18N Example983282
-Ref: I18N Example-Footnote-1986676
-Ref: I18N Example-Footnote-2986749
-Node: Gawk I18N986866
-Node: I18N Summary987520
-Node: Debugger988917
-Node: Debugging989937
-Node: Debugging Concepts990386
-Node: Debugging Terms992203
-Node: Awk Debugging994806
-Ref: Awk Debugging-Footnote-1995779
-Node: Sample Debugging Session995915
-Node: Debugger Invocation996465
-Node: Finding The Bug998090
-Node: List of Debugger Commands1004722
-Node: Breakpoint Control1006099
-Node: Debugger Execution Control1009921
-Node: Viewing And Changing Data1013395
-Node: Execution Stack1017129
-Node: Debugger Info1018810
-Node: Miscellaneous Debugger Commands1023105
-Node: Readline Support1028346
-Node: Limitations1029290
-Node: Debugging Summary1031914
-Node: Namespaces1033213
-Node: Global Namespace1034340
-Node: Qualified Names1035774
-Node: Default Namespace1036809
-Node: Changing The Namespace1037582
-Node: Naming Rules1039264
-Node: Internal Name Management1041219
-Node: Namespace Example1042289
-Node: Namespace And Features1044866
-Node: Namespace Summary1046321
-Node: Arbitrary Precision Arithmetic1047832
-Node: Computer Arithmetic1049351
-Ref: table-numeric-ranges1053276
-Ref: table-floating-point-ranges1053773
-Ref: Computer Arithmetic-Footnote-11054431
-Node: Math Definitions1054488
-Ref: table-ieee-formats1057520
-Node: MPFR features1058093
-Node: MPFR On Parole1058546
-Ref: MPFR On Parole-Footnote-11059387
-Node: MPFR Intro1059546
-Node: FP Math Caution1061230
-Ref: FP Math Caution-Footnote-11062302
-Node: Inexactness of computations1062675
-Node: Inexact representation1063706
-Node: Comparing FP Values1065087
-Node: Errors accumulate1066345
-Node: Strange values1067810
-Ref: Strange values-Footnote-11070464
-Node: Getting Accuracy1070569
-Node: Try To Round1073306
-Node: Setting precision1074213
-Ref: table-predefined-precision-strings1074918
-Node: Setting the rounding mode1076802
-Ref: table-gawk-rounding-modes1077184
-Ref: Setting the rounding mode-Footnote-11081236
-Node: Arbitrary Precision Integers1081419
-Ref: Arbitrary Precision Integers-Footnote-11084629
-Node: Checking for MPFR1084782
-Node: POSIX Floating Point Problems1086272
-Ref: POSIX Floating Point Problems-Footnote-11091092
-Node: Floating point summary1091130
-Node: Dynamic Extensions1093386
-Node: Extension Intro1094983
-Node: Plugin License1096285
-Node: Extension Mechanism Outline1097098
-Ref: figure-load-extension1097549
-Ref: figure-register-new-function1099127
-Ref: figure-call-new-function1100236
-Node: Extension API Description1102351
-Node: Extension API Functions Introduction1104080
-Ref: table-api-std-headers1105974
-Node: General Data Types1110415
-Ref: General Data Types-Footnote-11119561
-Node: Memory Allocation Functions1119864
-Ref: Memory Allocation Functions-Footnote-11124581
-Node: Constructor Functions1124680
-Node: API Ownership of MPFR and GMP Values1128581
-Node: Registration Functions1130134
-Node: Extension Functions1130838
-Node: Exit Callback Functions1136412
-Node: Extension Version String1137726
-Node: Input Parsers1138421
-Node: Output Wrappers1153040
-Node: Two-way processors1157882
-Node: Printing Messages1160235
-Ref: Printing Messages-Footnote-11161446
-Node: Updating ERRNO1161599
-Node: Requesting Values1162398
-Ref: table-value-types-returned1163151
-Node: Accessing Parameters1165210
-Node: Symbol Table Access1166491
-Node: Symbol table by name1167003
-Ref: Symbol table by name-Footnote-11170204
-Node: Symbol table by cookie1170336
-Ref: Symbol table by cookie-Footnote-11174605
-Node: Cached values1174669
-Ref: Cached values-Footnote-11178301
-Node: Array Manipulation1178458
-Ref: Array Manipulation-Footnote-11179557
-Node: Array Data Types1179594
-Ref: Array Data Types-Footnote-11182412
-Node: Array Functions1182508
-Node: Flattening Arrays1187537
-Node: Creating Arrays1194585
-Node: Redirection API1199427
-Node: Extension API Variables1202444
-Node: Extension Versioning1203167
-Ref: gawk-api-version1203596
-Node: Extension GMP/MPFR Versioning1205383
-Node: Extension API Informational Variables1207087
-Node: Extension API Boilerplate1208340
-Node: Changes from API V11212470
-Node: Finding Extensions1214102
-Node: Extension Example1214677
-Node: Internal File Description1215499
-Node: Internal File Ops1219791
-Ref: Internal File Ops-Footnote-11231341
-Node: Using Internal File Ops1231489
-Ref: Using Internal File Ops-Footnote-11233922
-Node: Extension Samples1234200
-Node: Extension Sample File Functions1235769
-Node: Extension Sample Fnmatch1243894
-Node: Extension Sample Fork1245489
-Node: Extension Sample Inplace1246765
-Node: Extension Sample Ord1250867
-Node: Extension Sample Readdir1251743
-Ref: table-readdir-file-types1252532
-Node: Extension Sample Revout1253888
-Node: Extension Sample Rev2way1254485
-Node: Extension Sample Read write array1255237
-Node: Extension Sample Readfile1258511
-Node: Extension Sample Time1259642
-Node: Extension Sample API Tests1261642
-Node: gawkextlib1262150
-Node: Extension summary1265182
-Node: Extension Exercises1269030
-Node: Language History1270300
-Node: V7/SVR3.11272012
-Node: SVR41274362
-Node: POSIX1275894
-Node: BTL1277319
-Node: POSIX/GNU1278086
-Ref: Gawk Extension Functions1281476
-Node: Feature History1284900
-Node: Common Extensions1304741
-Node: Ranges and Locales1306216
-Ref: Ranges and Locales-Footnote-11311001
-Ref: Ranges and Locales-Footnote-21311028
-Ref: Ranges and Locales-Footnote-31311263
-Node: Contributors1311486
-Node: History summary1317677
-Node: Installation1319119
-Node: Gawk Distribution1320083
-Node: Getting1320575
-Node: Extracting1321574
-Node: Distribution contents1323280
-Node: Unix Installation1331170
-Node: Quick Installation1331990
-Node: Compiling with MPFR1334530
-Node: Shell Startup Files1335236
-Node: Additional Configuration Options1336393
-Node: Configuration Philosophy1338776
-Node: Compiling from Git1341276
-Node: Building the Documentation1341835
-Node: Non-Unix Installation1343247
-Node: PC Installation1343723
-Node: PC Binary Installation1344592
-Node: PC Compiling1345485
-Node: PC Using1346663
-Node: Cygwin1350379
-Node: MSYS1351631
-Node: OpenVMS Installation1352257
-Node: OpenVMS Compilation1352938
-Ref: OpenVMS Compilation-Footnote-11354421
-Node: OpenVMS Dynamic Extensions1354479
-Node: OpenVMS Installation Details1356115
-Node: OpenVMS Running1358546
-Node: OpenVMS GNV1362683
-Node: Bugs1363438
-Node: Bug definition1364358
-Node: Bug address1367959
-Node: Usenet1371528
-Node: Performance bugs1372741
-Node: Asking for help1375745
-Node: Maintainers1377732
-Node: Other Versions1378759
-Node: Installation summary1388748
-Node: Notes1390130
-Node: Compatibility Mode1390940
-Node: Additions1391762
-Node: Accessing The Source1392707
-Node: Adding Code1394238
-Node: New Ports1401349
-Node: Derived Files1405852
-Ref: Derived Files-Footnote-11411663
-Ref: Derived Files-Footnote-21411698
-Ref: Derived Files-Footnote-31412309
-Node: Future Extensions1412423
-Node: Implementation Limitations1413093
-Node: Extension Design1414335
-Node: Old Extension Problems1415495
-Ref: Old Extension Problems-Footnote-11417067
-Node: Extension New Mechanism Goals1417128
-Ref: Extension New Mechanism Goals-Footnote-11420598
-Node: Extension Other Design Decisions1420799
-Node: Extension Future Growth1422996
-Node: Notes summary1423616
-Node: Basic Concepts1424826
-Node: Basic High Level1425511
-Ref: figure-general-flow1425793
-Ref: figure-process-flow1426495
-Ref: Basic High Level-Footnote-11429865
-Node: Basic Data Typing1430054
-Node: Glossary1433462
-Node: Copying1466340
-Node: GNU Free Documentation License1503898
-Node: Index1529021
+Ref: Splitting By Content-Footnote-1273306
+Node: More CSV273469
+Node: FS versus FPAT275545
+Node: Testing field creation276745
+Node: Multiple Line278519
+Node: Getline284988
+Node: Plain Getline287576
+Node: Getline/Variable290224
+Node: Getline/File291420
+Node: Getline/Variable/File292868
+Ref: Getline/Variable/File-Footnote-1294513
+Node: Getline/Pipe294609
+Node: Getline/Variable/Pipe297417
+Node: Getline/Coprocess298600
+Node: Getline/Variable/Coprocess299923
+Node: Getline Notes300689
+Node: Getline Summary304666
+Ref: table-getline-variants305110
+Node: Read Timeout306014
+Ref: Read Timeout-Footnote-1309976
+Node: Retrying Input310034
+Node: Command-line directories311301
+Node: Input Summary312239
+Node: Input Exercises315619
+Node: Printing316057
+Node: Print318000
+Node: Print Examples319501
+Node: Output Separators322346
+Node: OFMT324453
+Node: Printf326166
+Node: Basic Printf326971
+Node: Control Letters328606
+Node: Format Modifiers334052
+Node: Printf Examples340324
+Node: Redirection342865
+Node: Special FD350637
+Ref: Special FD-Footnote-1353935
+Node: Special Files354013
+Node: Other Inherited Files354642
+Node: Special Network355707
+Node: Special Caveats356595
+Node: Close Files And Pipes357578
+Ref: Close Files And Pipes-Footnote-1363702
+Node: Close Return Value363850
+Ref: table-close-pipe-return-values365121
+Ref: Close Return Value-Footnote-1365952
+Node: Noflush366108
+Node: Nonfatal367616
+Node: Output Summary370031
+Node: Output Exercises371317
+Node: Expressions372008
+Node: Values373208
+Node: Constants373886
+Node: Scalar Constants374581
+Ref: Scalar Constants-Footnote-1377157
+Ref: Scalar Constants-Footnote-2377407
+Node: Nondecimal-numbers377487
+Node: Regexp Constants380600
+Node: Using Constant Regexps381146
+Node: Standard Regexp Constants381792
+Node: Strong Regexp Constants385088
+Node: Variables388931
+Node: Using Variables389596
+Node: Assignment Options391570
+Node: Conversion394121
+Node: Strings And Numbers394653
+Ref: Strings And Numbers-Footnote-1397863
+Node: Locale influences conversions397972
+Ref: table-locale-affects400810
+Node: All Operators401452
+Node: Arithmetic Ops402093
+Node: Concatenation404916
+Ref: Concatenation-Footnote-1407852
+Node: Assignment Ops407971
+Ref: table-assign-ops413098
+Node: Increment Ops414479
+Node: Truth Values and Conditions418070
+Node: Truth Values419164
+Node: Typing and Comparison420244
+Node: Variable Typing421076
+Ref: Variable Typing-Footnote-1427720
+Ref: Variable Typing-Footnote-2427800
+Node: Comparison Operators427881
+Ref: table-relational-ops428308
+Node: POSIX String Comparison431984
+Ref: POSIX String Comparison-Footnote-1433741
+Ref: POSIX String Comparison-Footnote-2433884
+Node: Boolean Ops433968
+Ref: Boolean Ops-Footnote-1438642
+Node: Conditional Exp438738
+Node: Function Calls440518
+Node: Precedence444465
+Node: Locales448328
+Node: Expressions Summary450004
+Node: Patterns and Actions452659
+Node: Pattern Overview453795
+Node: Regexp Patterns455520
+Node: Expression Patterns456066
+Node: Ranges459971
+Node: BEGIN/END463145
+Node: Using BEGIN/END463954
+Ref: Using BEGIN/END-Footnote-1466862
+Node: I/O And BEGIN/END466972
+Node: BEGINFILE/ENDFILE469454
+Node: Empty472884
+Node: Using Shell Variables473201
+Node: Action Overview475537
+Node: Statements477973
+Node: If Statement479869
+Node: While Statement481432
+Node: Do Statement483520
+Node: For Statement484704
+Node: Switch Statement488059
+Node: Break Statement490608
+Node: Continue Statement492800
+Node: Next Statement494731
+Node: Nextfile Statement497210
+Node: Exit Statement500063
+Node: Built-in Variables502590
+Node: User-modified503767
+Node: Auto-set511974
+Ref: Auto-set-Footnote-1530058
+Ref: Auto-set-Footnote-2530276
+Node: ARGC and ARGV530332
+Node: Pattern Action Summary534761
+Node: Arrays537367
+Node: Array Basics538740
+Node: Array Intro539588
+Ref: figure-array-elements541599
+Ref: Array Intro-Footnote-1544452
+Node: Reference to Elements544584
+Node: Assigning Elements547104
+Node: Array Example547599
+Node: Scanning an Array549561
+Node: Controlling Scanning552656
+Ref: Controlling Scanning-Footnote-1559291
+Node: Numeric Array Subscripts559615
+Node: Uninitialized Subscripts561883
+Node: Delete563556
+Ref: Delete-Footnote-1566368
+Node: Multidimensional566425
+Node: Multiscanning569628
+Node: Arrays of Arrays571295
+Node: Arrays Summary575599
+Node: Functions577786
+Node: Built-in578918
+Node: Calling Built-in580107
+Node: Boolean Functions582147
+Node: Numeric Functions582709
+Ref: Numeric Functions-Footnote-1586894
+Ref: Numeric Functions-Footnote-2587577
+Ref: Numeric Functions-Footnote-3587629
+Node: String Functions587905
+Ref: String Functions-Footnote-1614356
+Ref: String Functions-Footnote-2614488
+Ref: String Functions-Footnote-3614744
+Node: Gory Details614831
+Ref: table-sub-escapes616840
+Ref: table-sub-proposed618471
+Ref: table-posix-sub619966
+Ref: table-gensub-escapes621639
+Ref: Gory Details-Footnote-1622558
+Node: I/O Functions622712
+Ref: table-system-return-values629388
+Ref: I/O Functions-Footnote-1631550
+Ref: I/O Functions-Footnote-2631698
+Node: Time Functions631818
+Ref: Time Functions-Footnote-1643530
+Ref: Time Functions-Footnote-2643598
+Ref: Time Functions-Footnote-3643760
+Ref: Time Functions-Footnote-4643871
+Ref: Time Functions-Footnote-5643987
+Ref: Time Functions-Footnote-6644214
+Node: Bitwise Functions644492
+Ref: table-bitwise-ops645090
+Ref: Bitwise Functions-Footnote-1651332
+Ref: Bitwise Functions-Footnote-2651509
+Node: Type Functions651704
+Node: I18N Functions653875
+Node: User-defined655610
+Node: Definition Syntax656356
+Ref: Definition Syntax-Footnote-1662174
+Node: Function Example662249
+Ref: Function Example-Footnote-1665228
+Node: Function Calling665250
+Node: Calling A Function665842
+Node: Variable Scope666812
+Node: Pass By Value/Reference669866
+Node: Function Caveats672594
+Ref: Function Caveats-Footnote-1674685
+Node: Return Statement674805
+Node: Dynamic Typing677837
+Node: Dynamic Typing Awk678415
+Node: Dynamic Typing Gawk680553
+Node: Indirect Calls683923
+Node: Functions Summary695060
+Node: Library Functions698026
+Ref: Library Functions-Footnote-1701574
+Ref: Library Functions-Footnote-2701719
+Node: Library Names701894
+Ref: Library Names-Footnote-1705665
+Ref: Library Names-Footnote-2705892
+Node: General Functions705986
+Node: Strtonum Function707256
+Node: Assert Function710338
+Node: Round Function713788
+Node: Cliff Random Function715360
+Node: Ordinal Functions716384
+Ref: Ordinal Functions-Footnote-1719487
+Ref: Ordinal Functions-Footnote-2719739
+Node: Join Function719953
+Ref: Join Function-Footnote-1721751
+Node: Getlocaltime Function721955
+Node: Readfile Function725729
+Node: Shell Quoting727758
+Node: Isnumeric Function729214
+Node: To CSV Function730650
+Node: Data File Management732742
+Node: Filetrans Function733374
+Node: Rewind Function737650
+Node: File Checking739621
+Ref: File Checking-Footnote-1740987
+Node: Empty Files741192
+Node: Ignoring Assigns743255
+Node: Getopt Function744829
+Ref: Getopt Function-Footnote-1760647
+Node: Passwd Functions760859
+Ref: Passwd Functions-Footnote-1769994
+Node: Group Functions770082
+Ref: Group Functions-Footnote-1778206
+Node: Walking Arrays778417
+Node: Library Functions Summary781463
+Node: Library Exercises782883
+Node: Sample Programs783368
+Node: Running Examples784150
+Node: Clones784902
+Node: Cut Program786170
+Node: Egrep Program796594
+Node: Id Program805893
+Node: Split Program815985
+Ref: Split Program-Footnote-1826198
+Node: Tee Program826383
+Node: Uniq Program829289
+Node: Wc Program837149
+Node: Bytes vs. Characters837544
+Node: Using extensions839144
+Node: wc program839922
+Node: Miscellaneous Programs844915
+Node: Dupword Program846140
+Node: Alarm Program848189
+Node: Translate Program853092
+Ref: Translate Program-Footnote-1857801
+Node: Labels Program858079
+Ref: Labels Program-Footnote-1861514
+Node: Word Sorting861598
+Node: History Sorting865772
+Node: Extract Program868045
+Node: Simple Sed876298
+Node: Igawk Program879508
+Ref: Igawk Program-Footnote-1894718
+Ref: Igawk Program-Footnote-2894924
+Ref: Igawk Program-Footnote-3895054
+Node: Anagram Program895181
+Node: Signature Program898267
+Node: Programs Summary899517
+Node: Programs Exercises900771
+Ref: Programs Exercises-Footnote-1905073
+Node: Advanced Features905159
+Node: Nondecimal Data907640
+Node: Boolean Typed Values909270
+Node: Array Sorting911227
+Node: Controlling Array Traversal911956
+Ref: Controlling Array Traversal-Footnote-1920459
+Node: Array Sorting Functions920581
+Ref: Array Sorting Functions-Footnote-1926678
+Node: Two-way I/O926886
+Ref: Two-way I/O-Footnote-1934857
+Ref: Two-way I/O-Footnote-2935048
+Node: TCP/IP Networking935130
+Node: Profiling938298
+Node: Persistent Memory947968
+Ref: Persistent Memory-Footnote-1957540
+Node: Extension Philosophy957671
+Node: Advanced Features Summary959198
+Node: Internationalization961464
+Node: I18N and L10N963166
+Node: Explaining gettext963861
+Ref: Explaining gettext-Footnote-1969997
+Ref: Explaining gettext-Footnote-2970190
+Node: Programmer i18n970355
+Ref: Programmer i18n-Footnote-1975467
+Node: Translator i18n975516
+Node: String Extraction976346
+Ref: String Extraction-Footnote-1977522
+Node: Printf Ordering977620
+Ref: Printf Ordering-Footnote-1980478
+Node: I18N Portability980546
+Ref: I18N Portability-Footnote-1983106
+Node: I18N Example983173
+Ref: I18N Example-Footnote-1986567
+Ref: I18N Example-Footnote-2986640
+Node: Gawk I18N986757
+Node: I18N Summary987411
+Node: Debugger988808
+Node: Debugging989828
+Node: Debugging Concepts990277
+Node: Debugging Terms992094
+Node: Awk Debugging994697
+Ref: Awk Debugging-Footnote-1995670
+Node: Sample Debugging Session995806
+Node: Debugger Invocation996356
+Node: Finding The Bug997981
+Node: List of Debugger Commands1004613
+Node: Breakpoint Control1005990
+Node: Debugger Execution Control1009812
+Node: Viewing And Changing Data1013286
+Node: Execution Stack1017020
+Node: Debugger Info1018701
+Node: Miscellaneous Debugger Commands1022996
+Node: Readline Support1028237
+Node: Limitations1029181
+Node: Debugging Summary1031805
+Node: Namespaces1033104
+Node: Global Namespace1034231
+Node: Qualified Names1035665
+Node: Default Namespace1036700
+Node: Changing The Namespace1037473
+Node: Naming Rules1039155
+Node: Internal Name Management1041110
+Node: Namespace Example1042180
+Node: Namespace And Features1044757
+Node: Namespace Summary1046212
+Node: Arbitrary Precision Arithmetic1047723
+Node: Computer Arithmetic1049242
+Ref: table-numeric-ranges1053167
+Ref: table-floating-point-ranges1053664
+Ref: Computer Arithmetic-Footnote-11054322
+Node: Math Definitions1054379
+Ref: table-ieee-formats1057411
+Node: MPFR features1057984
+Node: MPFR On Parole1058437
+Ref: MPFR On Parole-Footnote-11059278
+Node: MPFR Intro1059437
+Node: FP Math Caution1061121
+Ref: FP Math Caution-Footnote-11062193
+Node: Inexactness of computations1062566
+Node: Inexact representation1063597
+Node: Comparing FP Values1064978
+Node: Errors accumulate1066236
+Node: Strange values1067701
+Ref: Strange values-Footnote-11070355
+Node: Getting Accuracy1070460
+Node: Try To Round1073197
+Node: Setting precision1074104
+Ref: table-predefined-precision-strings1074809
+Node: Setting the rounding mode1076693
+Ref: table-gawk-rounding-modes1077075
+Ref: Setting the rounding mode-Footnote-11081127
+Node: Arbitrary Precision Integers1081310
+Ref: Arbitrary Precision Integers-Footnote-11084520
+Node: Checking for MPFR1084673
+Node: POSIX Floating Point Problems1086163
+Ref: POSIX Floating Point Problems-Footnote-11090983
+Node: Floating point summary1091021
+Node: Dynamic Extensions1093277
+Node: Extension Intro1094874
+Node: Plugin License1096176
+Node: Extension Mechanism Outline1096989
+Ref: figure-load-extension1097440
+Ref: figure-register-new-function1099018
+Ref: figure-call-new-function1100127
+Node: Extension API Description1102242
+Node: Extension API Functions Introduction1103971
+Ref: table-api-std-headers1105865
+Node: General Data Types1110306
+Ref: General Data Types-Footnote-11119452
+Node: Memory Allocation Functions1119755
+Ref: Memory Allocation Functions-Footnote-11124472
+Node: Constructor Functions1124571
+Node: API Ownership of MPFR and GMP Values1128472
+Node: Registration Functions1130025
+Node: Extension Functions1130729
+Node: Exit Callback Functions1136303
+Node: Extension Version String1137617
+Node: Input Parsers1138312
+Node: Output Wrappers1152931
+Node: Two-way processors1157773
+Node: Printing Messages1160126
+Ref: Printing Messages-Footnote-11161337
+Node: Updating ERRNO1161490
+Node: Requesting Values1162289
+Ref: table-value-types-returned1163042
+Node: Accessing Parameters1165101
+Node: Symbol Table Access1166382
+Node: Symbol table by name1166894
+Ref: Symbol table by name-Footnote-11170095
+Node: Symbol table by cookie1170227
+Ref: Symbol table by cookie-Footnote-11174496
+Node: Cached values1174560
+Ref: Cached values-Footnote-11178192
+Node: Array Manipulation1178349
+Ref: Array Manipulation-Footnote-11179448
+Node: Array Data Types1179485
+Ref: Array Data Types-Footnote-11182303
+Node: Array Functions1182399
+Node: Flattening Arrays1187428
+Node: Creating Arrays1194476
+Node: Redirection API1199318
+Node: Extension API Variables1202335
+Node: Extension Versioning1203058
+Ref: gawk-api-version1203487
+Node: Extension GMP/MPFR Versioning1205274
+Node: Extension API Informational Variables1206978
+Node: Extension API Boilerplate1208231
+Node: Changes from API V11212361
+Node: Finding Extensions1213993
+Node: Extension Example1214568
+Node: Internal File Description1215390
+Node: Internal File Ops1219682
+Ref: Internal File Ops-Footnote-11231232
+Node: Using Internal File Ops1231380
+Ref: Using Internal File Ops-Footnote-11233813
+Node: Extension Samples1234091
+Node: Extension Sample File Functions1235660
+Node: Extension Sample Fnmatch1243785
+Node: Extension Sample Fork1245380
+Node: Extension Sample Inplace1246656
+Node: Extension Sample Ord1250758
+Node: Extension Sample Readdir1251634
+Ref: table-readdir-file-types1252423
+Node: Extension Sample Revout1253779
+Node: Extension Sample Rev2way1254376
+Node: Extension Sample Read write array1255128
+Node: Extension Sample Readfile1258402
+Node: Extension Sample Time1259533
+Node: Extension Sample API Tests1261533
+Node: gawkextlib1262041
+Node: Extension summary1265073
+Node: Extension Exercises1268921
+Node: Language History1270191
+Node: V7/SVR3.11271903
+Node: SVR41274253
+Node: POSIX1275785
+Node: BTL1277210
+Node: POSIX/GNU1277977
+Ref: Gawk Extension Functions1281367
+Node: Feature History1284791
+Node: Common Extensions1304632
+Node: Ranges and Locales1306107
+Ref: Ranges and Locales-Footnote-11310892
+Ref: Ranges and Locales-Footnote-21310919
+Ref: Ranges and Locales-Footnote-31311154
+Node: Contributors1311377
+Node: History summary1317568
+Node: Installation1319010
+Node: Gawk Distribution1319974
+Node: Getting1320466
+Node: Extracting1321465
+Node: Distribution contents1323171
+Node: Unix Installation1331061
+Node: Quick Installation1331881
+Node: Compiling with MPFR1334421
+Node: Shell Startup Files1335127
+Node: Additional Configuration Options1336284
+Node: Configuration Philosophy1338667
+Node: Compiling from Git1341167
+Node: Building the Documentation1341726
+Node: Non-Unix Installation1343138
+Node: PC Installation1343614
+Node: PC Binary Installation1344483
+Node: PC Compiling1345376
+Node: PC Using1346554
+Node: Cygwin1350270
+Node: MSYS1351522
+Node: OpenVMS Installation1352148
+Node: OpenVMS Compilation1352829
+Ref: OpenVMS Compilation-Footnote-11354312
+Node: OpenVMS Dynamic Extensions1354370
+Node: OpenVMS Installation Details1356006
+Node: OpenVMS Running1358437
+Node: OpenVMS GNV1362574
+Node: Bugs1363329
+Node: Bug definition1364249
+Node: Bug address1367850
+Node: Usenet1371419
+Node: Performance bugs1372632
+Node: Asking for help1375636
+Node: Maintainers1377623
+Node: Other Versions1378650
- Node: Installation summary1388254
- Node: Notes1389636
- Node: Compatibility Mode1390446
- Node: Additions1391268
- Node: Accessing The Source1392213
- Node: Adding Code1393744
- Node: New Ports1400855
- Node: Derived Files1405358
- Ref: Derived Files-Footnote-11411169
- Ref: Derived Files-Footnote-21411204
- Ref: Derived Files-Footnote-31411815
- Node: Future Extensions1411929
- Node: Implementation Limitations1412599
- Node: Extension Design1413841
- Node: Old Extension Problems1415001
- Ref: Old Extension Problems-Footnote-11416573
- Node: Extension New Mechanism Goals1416634
- Ref: Extension New Mechanism Goals-Footnote-11420104
- Node: Extension Other Design Decisions1420305
- Node: Extension Future Growth1422502
- Node: Notes summary1423122
- Node: Basic Concepts1424332
- Node: Basic High Level1425017
- Ref: figure-general-flow1425299
- Ref: figure-process-flow1426001
- Ref: Basic High Level-Footnote-11429371
- Node: Basic Data Typing1429560
- Node: Glossary1432968
- Node: Copying1465846
- Node: GNU Free Documentation License1503404
- Node: Index1528527
++Node: Installation summary1388639
++Node: Notes1390021
++Node: Compatibility Mode1390831
++Node: Additions1391653
++Node: Accessing The Source1392598
++Node: Adding Code1394129
++Node: New Ports1401240
++Node: Derived Files1405743
++Ref: Derived Files-Footnote-11411554
++Ref: Derived Files-Footnote-21411589
++Ref: Derived Files-Footnote-31412200
++Node: Future Extensions1412314
++Node: Implementation Limitations1412984
++Node: Extension Design1414226
++Node: Old Extension Problems1415386
++Ref: Old Extension Problems-Footnote-11416958
++Node: Extension New Mechanism Goals1417019
++Ref: Extension New Mechanism Goals-Footnote-11420489
++Node: Extension Other Design Decisions1420690
++Node: Extension Future Growth1422887
++Node: Notes summary1423507
++Node: Basic Concepts1424717
++Node: Basic High Level1425402
++Ref: figure-general-flow1425684
++Ref: figure-process-flow1426386
++Ref: Basic High Level-Footnote-11429756
++Node: Basic Data Typing1429945
++Node: Glossary1433353
++Node: Copying1466231
++Node: GNU Free Documentation License1503789
++Node: Index1528912
End Tag Table
http://git.sv.gnu.org/cgit/gawk.git/commit/?id=796a1dc3be2578f509082a9034b89fff531ebcb4
commit 796a1dc3be2578f509082a9034b89fff531ebcb4
Merge: 1ad7ce29 ebbbbb57
Author: Arnold D. Robbins <arnold@skeeve.com>
Date: Sun Sep 8 15:44:07 2024 +0300
Merge branch 'gawk-5.3-stable' into stable/fpat-doc
http://git.sv.gnu.org/cgit/gawk.git/commit/?id=1ad7ce29a257d574c6908b21c838455eac0dfd49
commit 1ad7ce29a257d574c6908b21c838455eac0dfd49
Merge: 737c11fd f76a67bb
Author: Arnold D. Robbins <arnold@skeeve.com>
Date: Wed Sep 4 07:56:18 2024 +0300
Merge branch 'gawk-5.3-stable' into stable/fpat-doc
http://git.sv.gnu.org/cgit/gawk.git/commit/?id=737c11fdedc21a449c00171d70b19293d6f9b937
commit 737c11fdedc21a449c00171d70b19293d6f9b937
Merge: 8eb585c6 bf9f190e
Author: Arnold D. Robbins <arnold@skeeve.com>
Date: Mon Sep 2 07:49:16 2024 +0300
Merge branch 'gawk-5.3-stable' into stable/fpat-doc
http://git.sv.gnu.org/cgit/gawk.git/commit/?id=8eb585c64ce996e08f22cc3bbb6440fd983eec1b
commit 8eb585c64ce996e08f22cc3bbb6440fd983eec1b
Merge: cac1f551 9406c9a7
Author: Arnold D. Robbins <arnold@skeeve.com>
Date: Fri Aug 30 14:40:03 2024 +0300
Merge branch 'gawk-5.3-stable' into stable/fpat-doc
diff --cc doc/gawk.info
index 079655b2,63049ee0..3bf537fd
--- a/doc/gawk.info
+++ b/doc/gawk.info
@@@ -40031,526 -40033,526 +40031,526 @@@ Node: Skipping intervening26589
Node: Allowing trailing data266700
Node: Fields with fixed data267761
Node: Splitting By Content269383
-Ref: Splitting By Content-Footnote-1273833
-Node: More CSV273996
-Node: FS versus FPAT275654
-Node: Testing field creation276854
-Node: Multiple Line278628
-Node: Getline285097
-Node: Plain Getline287685
-Node: Getline/Variable290333
-Node: Getline/File291529
-Node: Getline/Variable/File292977
-Ref: Getline/Variable/File-Footnote-1294622
-Node: Getline/Pipe294718
-Node: Getline/Variable/Pipe297526
-Node: Getline/Coprocess298709
-Node: Getline/Variable/Coprocess300032
-Node: Getline Notes300798
-Node: Getline Summary304775
-Ref: table-getline-variants305219
-Node: Read Timeout306123
-Ref: Read Timeout-Footnote-1310085
-Node: Retrying Input310143
-Node: Command-line directories311410
-Node: Input Summary312348
-Node: Input Exercises315728
-Node: Printing316166
-Node: Print318109
-Node: Print Examples319610
-Node: Output Separators322455
-Node: OFMT324562
-Node: Printf326275
-Node: Basic Printf327080
-Node: Control Letters328715
-Node: Format Modifiers334161
-Node: Printf Examples340433
-Node: Redirection342974
-Node: Special FD350746
-Ref: Special FD-Footnote-1354044
-Node: Special Files354122
-Node: Other Inherited Files354751
-Node: Special Network355816
-Node: Special Caveats356704
-Node: Close Files And Pipes357687
-Ref: Close Files And Pipes-Footnote-1363811
-Node: Close Return Value363959
-Ref: table-close-pipe-return-values365230
-Ref: Close Return Value-Footnote-1366061
-Node: Noflush366217
-Node: Nonfatal367725
-Node: Output Summary370140
-Node: Output Exercises371426
-Node: Expressions372117
-Node: Values373317
-Node: Constants373995
-Node: Scalar Constants374690
-Ref: Scalar Constants-Footnote-1377266
-Ref: Scalar Constants-Footnote-2377516
-Node: Nondecimal-numbers377596
-Node: Regexp Constants380709
-Node: Using Constant Regexps381255
-Node: Standard Regexp Constants381901
-Node: Strong Regexp Constants385197
-Node: Variables389040
-Node: Using Variables389705
-Node: Assignment Options391679
-Node: Conversion394230
-Node: Strings And Numbers394762
-Ref: Strings And Numbers-Footnote-1397972
-Node: Locale influences conversions398081
-Ref: table-locale-affects400919
-Node: All Operators401561
-Node: Arithmetic Ops402202
-Node: Concatenation405025
-Ref: Concatenation-Footnote-1407961
-Node: Assignment Ops408080
-Ref: table-assign-ops413207
-Node: Increment Ops414588
-Node: Truth Values and Conditions418179
-Node: Truth Values419273
-Node: Typing and Comparison420353
-Node: Variable Typing421185
-Ref: Variable Typing-Footnote-1427829
-Ref: Variable Typing-Footnote-2427909
-Node: Comparison Operators427990
-Ref: table-relational-ops428417
-Node: POSIX String Comparison432093
-Ref: POSIX String Comparison-Footnote-1433850
-Ref: POSIX String Comparison-Footnote-2433993
-Node: Boolean Ops434077
-Ref: Boolean Ops-Footnote-1438751
-Node: Conditional Exp438847
-Node: Function Calls440627
-Node: Precedence444574
-Node: Locales448437
-Node: Expressions Summary450113
-Node: Patterns and Actions452768
-Node: Pattern Overview453904
-Node: Regexp Patterns455629
-Node: Expression Patterns456175
-Node: Ranges460080
-Node: BEGIN/END463254
-Node: Using BEGIN/END464063
-Ref: Using BEGIN/END-Footnote-1466971
-Node: I/O And BEGIN/END467081
-Node: BEGINFILE/ENDFILE469563
-Node: Empty472993
-Node: Using Shell Variables473310
-Node: Action Overview475646
-Node: Statements478082
-Node: If Statement479978
-Node: While Statement481541
-Node: Do Statement483629
-Node: For Statement484813
-Node: Switch Statement488168
-Node: Break Statement490717
-Node: Continue Statement492909
-Node: Next Statement494840
-Node: Nextfile Statement497319
-Node: Exit Statement500172
-Node: Built-in Variables502699
-Node: User-modified503876
-Node: Auto-set512083
-Ref: Auto-set-Footnote-1530167
-Ref: Auto-set-Footnote-2530385
-Node: ARGC and ARGV530441
-Node: Pattern Action Summary534870
-Node: Arrays537476
-Node: Array Basics538849
-Node: Array Intro539697
-Ref: figure-array-elements541708
-Ref: Array Intro-Footnote-1544561
-Node: Reference to Elements544693
-Node: Assigning Elements547213
-Node: Array Example547708
-Node: Scanning an Array549670
-Node: Controlling Scanning552765
-Ref: Controlling Scanning-Footnote-1559400
-Node: Numeric Array Subscripts559724
-Node: Uninitialized Subscripts561992
-Node: Delete563665
-Ref: Delete-Footnote-1566477
-Node: Multidimensional566534
-Node: Multiscanning569737
-Node: Arrays of Arrays571404
-Node: Arrays Summary575708
-Node: Functions577895
-Node: Built-in579027
-Node: Calling Built-in580216
-Node: Boolean Functions582256
-Node: Numeric Functions582818
-Ref: Numeric Functions-Footnote-1587003
-Ref: Numeric Functions-Footnote-2587686
-Ref: Numeric Functions-Footnote-3587738
-Node: String Functions588014
-Ref: String Functions-Footnote-1614465
-Ref: String Functions-Footnote-2614597
-Ref: String Functions-Footnote-3614853
-Node: Gory Details614940
-Ref: table-sub-escapes616949
-Ref: table-sub-proposed618580
-Ref: table-posix-sub620075
-Ref: table-gensub-escapes621748
-Ref: Gory Details-Footnote-1622667
-Node: I/O Functions622821
-Ref: table-system-return-values629497
-Ref: I/O Functions-Footnote-1631659
-Ref: I/O Functions-Footnote-2631807
-Node: Time Functions631927
-Ref: Time Functions-Footnote-1643639
-Ref: Time Functions-Footnote-2643707
-Ref: Time Functions-Footnote-3643869
-Ref: Time Functions-Footnote-4643980
-Ref: Time Functions-Footnote-5644096
-Ref: Time Functions-Footnote-6644323
-Node: Bitwise Functions644601
-Ref: table-bitwise-ops645199
-Ref: Bitwise Functions-Footnote-1651441
-Ref: Bitwise Functions-Footnote-2651618
-Node: Type Functions651813
-Node: I18N Functions653984
-Node: User-defined655719
-Node: Definition Syntax656465
-Ref: Definition Syntax-Footnote-1662283
-Node: Function Example662358
-Ref: Function Example-Footnote-1665337
-Node: Function Calling665359
-Node: Calling A Function665951
-Node: Variable Scope666921
-Node: Pass By Value/Reference669975
-Node: Function Caveats672703
-Ref: Function Caveats-Footnote-1674794
-Node: Return Statement674914
-Node: Dynamic Typing677946
-Node: Dynamic Typing Awk678524
-Node: Dynamic Typing Gawk680662
-Node: Indirect Calls684032
-Node: Functions Summary695169
-Node: Library Functions698135
-Ref: Library Functions-Footnote-1701683
-Ref: Library Functions-Footnote-2701828
-Node: Library Names702003
-Ref: Library Names-Footnote-1705774
-Ref: Library Names-Footnote-2706001
-Node: General Functions706095
-Node: Strtonum Function707365
-Node: Assert Function710447
-Node: Round Function713897
-Node: Cliff Random Function715469
-Node: Ordinal Functions716493
-Ref: Ordinal Functions-Footnote-1719596
-Ref: Ordinal Functions-Footnote-2719848
-Node: Join Function720062
-Ref: Join Function-Footnote-1721860
-Node: Getlocaltime Function722064
-Node: Readfile Function725838
-Node: Shell Quoting727867
-Node: Isnumeric Function729323
-Node: To CSV Function730759
-Node: Data File Management732851
-Node: Filetrans Function733483
-Node: Rewind Function737759
-Node: File Checking739730
-Ref: File Checking-Footnote-1741096
-Node: Empty Files741301
-Node: Ignoring Assigns743364
-Node: Getopt Function744938
-Ref: Getopt Function-Footnote-1760756
-Node: Passwd Functions760968
-Ref: Passwd Functions-Footnote-1770103
-Node: Group Functions770191
-Ref: Group Functions-Footnote-1778315
-Node: Walking Arrays778526
-Node: Library Functions Summary781572
-Node: Library Exercises782992
-Node: Sample Programs783477
-Node: Running Examples784259
-Node: Clones785011
-Node: Cut Program786279
-Node: Egrep Program796703
-Node: Id Program806002
-Node: Split Program816094
-Ref: Split Program-Footnote-1826307
-Node: Tee Program826492
-Node: Uniq Program829398
-Node: Wc Program837258
-Node: Bytes vs. Characters837653
-Node: Using extensions839253
-Node: wc program840031
-Node: Miscellaneous Programs845024
-Node: Dupword Program846249
-Node: Alarm Program848298
-Node: Translate Program853201
-Ref: Translate Program-Footnote-1857910
-Node: Labels Program858188
-Ref: Labels Program-Footnote-1861623
-Node: Word Sorting861707
-Node: History Sorting865881
-Node: Extract Program868154
-Node: Simple Sed876407
-Node: Igawk Program879617
-Ref: Igawk Program-Footnote-1894827
-Ref: Igawk Program-Footnote-2895033
-Ref: Igawk Program-Footnote-3895163
-Node: Anagram Program895290
-Node: Signature Program898376
-Node: Programs Summary899626
-Node: Programs Exercises900880
-Ref: Programs Exercises-Footnote-1905182
-Node: Advanced Features905268
-Node: Nondecimal Data907749
-Node: Boolean Typed Values909379
-Node: Array Sorting911336
-Node: Controlling Array Traversal912065
-Ref: Controlling Array Traversal-Footnote-1920568
-Node: Array Sorting Functions920690
-Ref: Array Sorting Functions-Footnote-1926787
-Node: Two-way I/O926995
-Ref: Two-way I/O-Footnote-1934966
-Ref: Two-way I/O-Footnote-2935157
-Node: TCP/IP Networking935239
-Node: Profiling938407
-Node: Persistent Memory948077
-Ref: Persistent Memory-Footnote-1957649
-Node: Extension Philosophy957780
-Node: Advanced Features Summary959307
-Node: Internationalization961573
-Node: I18N and L10N963275
-Node: Explaining gettext963970
-Ref: Explaining gettext-Footnote-1970106
-Ref: Explaining gettext-Footnote-2970299
-Node: Programmer i18n970464
-Ref: Programmer i18n-Footnote-1975576
-Node: Translator i18n975625
-Node: String Extraction976455
-Ref: String Extraction-Footnote-1977631
-Node: Printf Ordering977729
-Ref: Printf Ordering-Footnote-1980587
-Node: I18N Portability980655
-Ref: I18N Portability-Footnote-1983215
-Node: I18N Example983282
-Ref: I18N Example-Footnote-1986676
-Ref: I18N Example-Footnote-2986749
-Node: Gawk I18N986866
-Node: I18N Summary987520
-Node: Debugger988917
-Node: Debugging989937
-Node: Debugging Concepts990386
-Node: Debugging Terms992203
-Node: Awk Debugging994806
-Ref: Awk Debugging-Footnote-1995779
-Node: Sample Debugging Session995915
-Node: Debugger Invocation996465
-Node: Finding The Bug998090
-Node: List of Debugger Commands1004722
-Node: Breakpoint Control1006099
-Node: Debugger Execution Control1009921
-Node: Viewing And Changing Data1013395
-Node: Execution Stack1017129
-Node: Debugger Info1018810
-Node: Miscellaneous Debugger Commands1023105
-Node: Readline Support1028346
-Node: Limitations1029290
-Node: Debugging Summary1031914
-Node: Namespaces1033213
-Node: Global Namespace1034340
-Node: Qualified Names1035774
-Node: Default Namespace1036809
-Node: Changing The Namespace1037582
-Node: Naming Rules1039264
-Node: Internal Name Management1041219
-Node: Namespace Example1042289
-Node: Namespace And Features1044866
-Node: Namespace Summary1046321
-Node: Arbitrary Precision Arithmetic1047832
-Node: Computer Arithmetic1049351
-Ref: table-numeric-ranges1053276
-Ref: table-floating-point-ranges1053773
-Ref: Computer Arithmetic-Footnote-11054431
-Node: Math Definitions1054488
-Ref: table-ieee-formats1057520
-Node: MPFR features1058093
-Node: MPFR On Parole1058546
-Ref: MPFR On Parole-Footnote-11059387
-Node: MPFR Intro1059546
-Node: FP Math Caution1061230
-Ref: FP Math Caution-Footnote-11062302
-Node: Inexactness of computations1062675
-Node: Inexact representation1063706
-Node: Comparing FP Values1065087
-Node: Errors accumulate1066345
-Node: Strange values1067810
-Ref: Strange values-Footnote-11070464
-Node: Getting Accuracy1070569
-Node: Try To Round1073306
-Node: Setting precision1074213
-Ref: table-predefined-precision-strings1074918
-Node: Setting the rounding mode1076802
-Ref: table-gawk-rounding-modes1077184
-Ref: Setting the rounding mode-Footnote-11081236
-Node: Arbitrary Precision Integers1081419
-Ref: Arbitrary Precision Integers-Footnote-11084629
-Node: Checking for MPFR1084782
-Node: POSIX Floating Point Problems1086272
-Ref: POSIX Floating Point Problems-Footnote-11091092
-Node: Floating point summary1091130
-Node: Dynamic Extensions1093386
-Node: Extension Intro1094983
-Node: Plugin License1096285
-Node: Extension Mechanism Outline1097098
-Ref: figure-load-extension1097549
-Ref: figure-register-new-function1099127
-Ref: figure-call-new-function1100236
-Node: Extension API Description1102351
-Node: Extension API Functions Introduction1104080
-Ref: table-api-std-headers1105974
-Node: General Data Types1110415
-Ref: General Data Types-Footnote-11119561
-Node: Memory Allocation Functions1119864
-Ref: Memory Allocation Functions-Footnote-11124581
-Node: Constructor Functions1124680
-Node: API Ownership of MPFR and GMP Values1128581
-Node: Registration Functions1130134
-Node: Extension Functions1130838
-Node: Exit Callback Functions1136412
-Node: Extension Version String1137726
-Node: Input Parsers1138421
-Node: Output Wrappers1153040
-Node: Two-way processors1157882
-Node: Printing Messages1160235
-Ref: Printing Messages-Footnote-11161446
-Node: Updating ERRNO1161599
-Node: Requesting Values1162398
-Ref: table-value-types-returned1163151
-Node: Accessing Parameters1165210
-Node: Symbol Table Access1166491
-Node: Symbol table by name1167003
-Ref: Symbol table by name-Footnote-11170204
-Node: Symbol table by cookie1170336
-Ref: Symbol table by cookie-Footnote-11174605
-Node: Cached values1174669
-Ref: Cached values-Footnote-11178301
-Node: Array Manipulation1178458
-Ref: Array Manipulation-Footnote-11179557
-Node: Array Data Types1179594
-Ref: Array Data Types-Footnote-11182412
-Node: Array Functions1182508
-Node: Flattening Arrays1187537
-Node: Creating Arrays1194585
-Node: Redirection API1199427
-Node: Extension API Variables1202444
-Node: Extension Versioning1203167
-Ref: gawk-api-version1203596
-Node: Extension GMP/MPFR Versioning1205383
-Node: Extension API Informational Variables1207087
-Node: Extension API Boilerplate1208340
-Node: Changes from API V11212470
-Node: Finding Extensions1214102
-Node: Extension Example1214677
-Node: Internal File Description1215499
-Node: Internal File Ops1219791
-Ref: Internal File Ops-Footnote-11231341
-Node: Using Internal File Ops1231489
-Ref: Using Internal File Ops-Footnote-11233922
-Node: Extension Samples1234200
-Node: Extension Sample File Functions1235769
-Node: Extension Sample Fnmatch1243894
-Node: Extension Sample Fork1245489
-Node: Extension Sample Inplace1246765
-Node: Extension Sample Ord1250867
-Node: Extension Sample Readdir1251743
-Ref: table-readdir-file-types1252532
-Node: Extension Sample Revout1253888
-Node: Extension Sample Rev2way1254485
-Node: Extension Sample Read write array1255237
-Node: Extension Sample Readfile1258511
-Node: Extension Sample Time1259642
-Node: Extension Sample API Tests1261642
-Node: gawkextlib1262150
-Node: Extension summary1265182
-Node: Extension Exercises1269030
-Node: Language History1270300
-Node: V7/SVR3.11272012
-Node: SVR41274362
-Node: POSIX1275894
-Node: BTL1277319
-Node: POSIX/GNU1278086
-Ref: Gawk Extension Functions1281476
-Node: Feature History1284900
-Node: Common Extensions1304741
-Node: Ranges and Locales1306216
-Ref: Ranges and Locales-Footnote-11311001
-Ref: Ranges and Locales-Footnote-21311028
-Ref: Ranges and Locales-Footnote-31311263
-Node: Contributors1311486
-Node: History summary1317677
-Node: Installation1319119
-Node: Gawk Distribution1320083
-Node: Getting1320575
-Node: Extracting1321574
-Node: Distribution contents1323280
-Node: Unix Installation1331170
-Node: Quick Installation1331990
-Node: Compiling with MPFR1334530
-Node: Shell Startup Files1335236
-Node: Additional Configuration Options1336393
-Node: Configuration Philosophy1338776
-Node: Compiling from Git1341276
-Node: Building the Documentation1341835
-Node: Non-Unix Installation1343247
-Node: PC Installation1343723
-Node: PC Binary Installation1344592
-Node: PC Compiling1345485
-Node: PC Using1346663
-Node: Cygwin1350379
-Node: MSYS1351631
-Node: OpenVMS Installation1352257
-Node: OpenVMS Compilation1352938
-Ref: OpenVMS Compilation-Footnote-11354421
-Node: OpenVMS Dynamic Extensions1354479
-Node: OpenVMS Installation Details1356115
-Node: OpenVMS Running1358546
-Node: OpenVMS GNV1362683
-Node: Bugs1363438
-Node: Bug definition1364358
-Node: Bug address1367959
-Node: Usenet1371528
-Node: Performance bugs1372741
-Node: Asking for help1375745
-Node: Maintainers1377732
-Node: Other Versions1378759
-Node: Installation summary1388363
-Node: Notes1389745
-Node: Compatibility Mode1390555
-Node: Additions1391377
-Node: Accessing The Source1392322
-Node: Adding Code1393853
-Node: New Ports1400964
-Node: Derived Files1405467
-Ref: Derived Files-Footnote-11411278
-Ref: Derived Files-Footnote-21411313
-Ref: Derived Files-Footnote-31411924
-Node: Future Extensions1412038
-Node: Implementation Limitations1412708
-Node: Extension Design1413950
-Node: Old Extension Problems1415110
-Ref: Old Extension Problems-Footnote-11416682
-Node: Extension New Mechanism Goals1416743
-Ref: Extension New Mechanism Goals-Footnote-11420213
-Node: Extension Other Design Decisions1420414
-Node: Extension Future Growth1422611
-Node: Notes summary1423231
-Node: Basic Concepts1424441
-Node: Basic High Level1425126
-Ref: figure-general-flow1425408
-Ref: figure-process-flow1426110
-Ref: Basic High Level-Footnote-11429480
-Node: Basic Data Typing1429669
-Node: Glossary1433077
-Node: Copying1465955
-Node: GNU Free Documentation License1503513
-Node: Index1528636
+Ref: Splitting By Content-Footnote-1273306
+Node: More CSV273469
+Node: FS versus FPAT275545
+Node: Testing field creation276745
+Node: Multiple Line278519
+Node: Getline284988
+Node: Plain Getline287576
+Node: Getline/Variable290224
+Node: Getline/File291420
+Node: Getline/Variable/File292868
+Ref: Getline/Variable/File-Footnote-1294513
+Node: Getline/Pipe294609
+Node: Getline/Variable/Pipe297417
+Node: Getline/Coprocess298600
+Node: Getline/Variable/Coprocess299923
+Node: Getline Notes300689
+Node: Getline Summary304666
+Ref: table-getline-variants305110
+Node: Read Timeout306014
+Ref: Read Timeout-Footnote-1309976
+Node: Retrying Input310034
+Node: Command-line directories311301
+Node: Input Summary312239
+Node: Input Exercises315619
+Node: Printing316057
+Node: Print318000
+Node: Print Examples319501
+Node: Output Separators322346
+Node: OFMT324453
+Node: Printf326166
+Node: Basic Printf326971
+Node: Control Letters328606
+Node: Format Modifiers334052
+Node: Printf Examples340324
+Node: Redirection342865
+Node: Special FD350637
+Ref: Special FD-Footnote-1353935
+Node: Special Files354013
+Node: Other Inherited Files354642
+Node: Special Network355707
+Node: Special Caveats356595
+Node: Close Files And Pipes357578
+Ref: Close Files And Pipes-Footnote-1363702
+Node: Close Return Value363850
+Ref: table-close-pipe-return-values365121
+Ref: Close Return Value-Footnote-1365952
+Node: Noflush366108
+Node: Nonfatal367616
+Node: Output Summary370031
+Node: Output Exercises371317
+Node: Expressions372008
+Node: Values373208
+Node: Constants373886
+Node: Scalar Constants374581
+Ref: Scalar Constants-Footnote-1377157
+Ref: Scalar Constants-Footnote-2377407
+Node: Nondecimal-numbers377487
+Node: Regexp Constants380600
+Node: Using Constant Regexps381146
+Node: Standard Regexp Constants381792
+Node: Strong Regexp Constants385088
+Node: Variables388931
+Node: Using Variables389596
+Node: Assignment Options391570
+Node: Conversion394121
+Node: Strings And Numbers394653
+Ref: Strings And Numbers-Footnote-1397863
+Node: Locale influences conversions397972
+Ref: table-locale-affects400810
+Node: All Operators401452
+Node: Arithmetic Ops402093
+Node: Concatenation404916
+Ref: Concatenation-Footnote-1407852
+Node: Assignment Ops407971
+Ref: table-assign-ops413098
+Node: Increment Ops414479
+Node: Truth Values and Conditions418070
+Node: Truth Values419164
+Node: Typing and Comparison420244
+Node: Variable Typing421076
+Ref: Variable Typing-Footnote-1427720
+Ref: Variable Typing-Footnote-2427800
+Node: Comparison Operators427881
+Ref: table-relational-ops428308
+Node: POSIX String Comparison431984
+Ref: POSIX String Comparison-Footnote-1433741
+Ref: POSIX String Comparison-Footnote-2433884
+Node: Boolean Ops433968
+Ref: Boolean Ops-Footnote-1438642
+Node: Conditional Exp438738
+Node: Function Calls440518
+Node: Precedence444465
+Node: Locales448328
+Node: Expressions Summary450004
+Node: Patterns and Actions452659
+Node: Pattern Overview453795
+Node: Regexp Patterns455520
+Node: Expression Patterns456066
+Node: Ranges459971
+Node: BEGIN/END463145
+Node: Using BEGIN/END463954
+Ref: Using BEGIN/END-Footnote-1466862
+Node: I/O And BEGIN/END466972
+Node: BEGINFILE/ENDFILE469454
+Node: Empty472884
+Node: Using Shell Variables473201
+Node: Action Overview475537
+Node: Statements477973
+Node: If Statement479869
+Node: While Statement481432
+Node: Do Statement483520
+Node: For Statement484704
+Node: Switch Statement488059
+Node: Break Statement490608
+Node: Continue Statement492800
+Node: Next Statement494731
+Node: Nextfile Statement497210
+Node: Exit Statement500063
+Node: Built-in Variables502590
+Node: User-modified503767
+Node: Auto-set511974
+Ref: Auto-set-Footnote-1530058
+Ref: Auto-set-Footnote-2530276
+Node: ARGC and ARGV530332
+Node: Pattern Action Summary534761
+Node: Arrays537367
+Node: Array Basics538740
+Node: Array Intro539588
+Ref: figure-array-elements541599
+Ref: Array Intro-Footnote-1544452
+Node: Reference to Elements544584
+Node: Assigning Elements547104
+Node: Array Example547599
+Node: Scanning an Array549561
+Node: Controlling Scanning552656
+Ref: Controlling Scanning-Footnote-1559291
+Node: Numeric Array Subscripts559615
+Node: Uninitialized Subscripts561883
+Node: Delete563556
+Ref: Delete-Footnote-1566368
+Node: Multidimensional566425
+Node: Multiscanning569628
+Node: Arrays of Arrays571295
+Node: Arrays Summary575599
+Node: Functions577786
+Node: Built-in578918
+Node: Calling Built-in580107
+Node: Boolean Functions582147
+Node: Numeric Functions582709
+Ref: Numeric Functions-Footnote-1586894
+Ref: Numeric Functions-Footnote-2587577
+Ref: Numeric Functions-Footnote-3587629
+Node: String Functions587905
+Ref: String Functions-Footnote-1614356
+Ref: String Functions-Footnote-2614488
+Ref: String Functions-Footnote-3614744
+Node: Gory Details614831
+Ref: table-sub-escapes616840
+Ref: table-sub-proposed618471
+Ref: table-posix-sub619966
+Ref: table-gensub-escapes621639
+Ref: Gory Details-Footnote-1622558
+Node: I/O Functions622712
+Ref: table-system-return-values629388
+Ref: I/O Functions-Footnote-1631550
+Ref: I/O Functions-Footnote-2631698
+Node: Time Functions631818
+Ref: Time Functions-Footnote-1643530
+Ref: Time Functions-Footnote-2643598
+Ref: Time Functions-Footnote-3643760
+Ref: Time Functions-Footnote-4643871
+Ref: Time Functions-Footnote-5643987
+Ref: Time Functions-Footnote-6644214
+Node: Bitwise Functions644492
+Ref: table-bitwise-ops645090
+Ref: Bitwise Functions-Footnote-1651332
+Ref: Bitwise Functions-Footnote-2651509
+Node: Type Functions651704
+Node: I18N Functions653875
+Node: User-defined655610
+Node: Definition Syntax656356
+Ref: Definition Syntax-Footnote-1662174
+Node: Function Example662249
+Ref: Function Example-Footnote-1665228
+Node: Function Calling665250
+Node: Calling A Function665842
+Node: Variable Scope666812
+Node: Pass By Value/Reference669866
+Node: Function Caveats672594
+Ref: Function Caveats-Footnote-1674685
+Node: Return Statement674805
+Node: Dynamic Typing677837
+Node: Dynamic Typing Awk678415
+Node: Dynamic Typing Gawk680553
+Node: Indirect Calls683923
+Node: Functions Summary695060
+Node: Library Functions698026
+Ref: Library Functions-Footnote-1701574
+Ref: Library Functions-Footnote-2701719
+Node: Library Names701894
+Ref: Library Names-Footnote-1705665
+Ref: Library Names-Footnote-2705892
+Node: General Functions705986
+Node: Strtonum Function707256
+Node: Assert Function710338
+Node: Round Function713788
+Node: Cliff Random Function715360
+Node: Ordinal Functions716384
+Ref: Ordinal Functions-Footnote-1719487
+Ref: Ordinal Functions-Footnote-2719739
+Node: Join Function719953
+Ref: Join Function-Footnote-1721751
+Node: Getlocaltime Function721955
+Node: Readfile Function725729
+Node: Shell Quoting727758
+Node: Isnumeric Function729214
+Node: To CSV Function730650
+Node: Data File Management732742
+Node: Filetrans Function733374
+Node: Rewind Function737650
+Node: File Checking739621
+Ref: File Checking-Footnote-1740987
+Node: Empty Files741192
+Node: Ignoring Assigns743255
+Node: Getopt Function744829
+Ref: Getopt Function-Footnote-1760647
+Node: Passwd Functions760859
+Ref: Passwd Functions-Footnote-1769994
+Node: Group Functions770082
+Ref: Group Functions-Footnote-1778206
+Node: Walking Arrays778417
+Node: Library Functions Summary781463
+Node: Library Exercises782883
+Node: Sample Programs783368
+Node: Running Examples784150
+Node: Clones784902
+Node: Cut Program786170
+Node: Egrep Program796594
- Node: Id Program805899
- Node: Split Program815991
- Ref: Split Program-Footnote-1826204
- Node: Tee Program826389
- Node: Uniq Program829295
- Node: Wc Program837155
- Node: Bytes vs. Characters837550
- Node: Using extensions839150
- Node: wc program839928
- Node: Miscellaneous Programs844921
- Node: Dupword Program846146
- Node: Alarm Program848195
- Node: Translate Program853098
- Ref: Translate Program-Footnote-1857807
- Node: Labels Program858085
- Ref: Labels Program-Footnote-1861520
- Node: Word Sorting861604
- Node: History Sorting865778
- Node: Extract Program868051
- Node: Simple Sed876304
- Node: Igawk Program879514
- Ref: Igawk Program-Footnote-1894724
- Ref: Igawk Program-Footnote-2894930
- Ref: Igawk Program-Footnote-3895060
- Node: Anagram Program895187
- Node: Signature Program898273
- Node: Programs Summary899523
- Node: Programs Exercises900777
- Ref: Programs Exercises-Footnote-1905079
- Node: Advanced Features905165
- Node: Nondecimal Data907646
- Node: Boolean Typed Values909276
- Node: Array Sorting911233
- Node: Controlling Array Traversal911962
- Ref: Controlling Array Traversal-Footnote-1920465
- Node: Array Sorting Functions920587
- Ref: Array Sorting Functions-Footnote-1926684
- Node: Two-way I/O926892
- Ref: Two-way I/O-Footnote-1934863
- Ref: Two-way I/O-Footnote-2935054
- Node: TCP/IP Networking935136
- Node: Profiling938304
- Node: Persistent Memory947974
- Ref: Persistent Memory-Footnote-1957546
- Node: Extension Philosophy957677
- Node: Advanced Features Summary959204
- Node: Internationalization961470
- Node: I18N and L10N963172
- Node: Explaining gettext963867
- Ref: Explaining gettext-Footnote-1970003
- Ref: Explaining gettext-Footnote-2970196
- Node: Programmer i18n970361
- Ref: Programmer i18n-Footnote-1975473
- Node: Translator i18n975522
- Node: String Extraction976352
- Ref: String Extraction-Footnote-1977528
- Node: Printf Ordering977626
- Ref: Printf Ordering-Footnote-1980484
- Node: I18N Portability980552
- Ref: I18N Portability-Footnote-1983112
- Node: I18N Example983179
- Ref: I18N Example-Footnote-1986573
- Ref: I18N Example-Footnote-2986646
- Node: Gawk I18N986763
- Node: I18N Summary987417
- Node: Debugger988814
- Node: Debugging989834
- Node: Debugging Concepts990283
- Node: Debugging Terms992100
- Node: Awk Debugging994703
- Ref: Awk Debugging-Footnote-1995676
- Node: Sample Debugging Session995812
- Node: Debugger Invocation996362
- Node: Finding The Bug997987
- Node: List of Debugger Commands1004619
- Node: Breakpoint Control1005996
- Node: Debugger Execution Control1009818
- Node: Viewing And Changing Data1013292
- Node: Execution Stack1017026
- Node: Debugger Info1018707
- Node: Miscellaneous Debugger Commands1023002
- Node: Readline Support1028243
- Node: Limitations1029187
- Node: Debugging Summary1031811
- Node: Namespaces1033110
- Node: Global Namespace1034237
- Node: Qualified Names1035671
- Node: Default Namespace1036706
- Node: Changing The Namespace1037479
- Node: Naming Rules1039161
- Node: Internal Name Management1041116
- Node: Namespace Example1042186
- Node: Namespace And Features1044763
- Node: Namespace Summary1046218
- Node: Arbitrary Precision Arithmetic1047729
- Node: Computer Arithmetic1049248
- Ref: table-numeric-ranges1053173
- Ref: table-floating-point-ranges1053670
- Ref: Computer Arithmetic-Footnote-11054328
- Node: Math Definitions1054385
- Ref: table-ieee-formats1057417
- Node: MPFR features1057990
- Node: MPFR On Parole1058443
- Ref: MPFR On Parole-Footnote-11059284
- Node: MPFR Intro1059443
- Node: FP Math Caution1061127
- Ref: FP Math Caution-Footnote-11062199
- Node: Inexactness of computations1062572
- Node: Inexact representation1063603
- Node: Comparing FP Values1064984
- Node: Errors accumulate1066242
- Node: Strange values1067707
- Ref: Strange values-Footnote-11070361
- Node: Getting Accuracy1070466
- Node: Try To Round1073203
- Node: Setting precision1074110
- Ref: table-predefined-precision-strings1074815
- Node: Setting the rounding mode1076699
- Ref: table-gawk-rounding-modes1077081
- Ref: Setting the rounding mode-Footnote-11081133
- Node: Arbitrary Precision Integers1081316
- Ref: Arbitrary Precision Integers-Footnote-11084526
- Node: Checking for MPFR1084679
- Node: POSIX Floating Point Problems1086169
- Ref: POSIX Floating Point Problems-Footnote-11090989
- Node: Floating point summary1091027
- Node: Dynamic Extensions1093283
- Node: Extension Intro1094880
- Node: Plugin License1096182
- Node: Extension Mechanism Outline1096995
- Ref: figure-load-extension1097446
- Ref: figure-register-new-function1099024
- Ref: figure-call-new-function1100133
- Node: Extension API Description1102248
- Node: Extension API Functions Introduction1103977
- Ref: table-api-std-headers1105871
- Node: General Data Types1110312
- Ref: General Data Types-Footnote-11119458
- Node: Memory Allocation Functions1119761
- Ref: Memory Allocation Functions-Footnote-11124478
- Node: Constructor Functions1124577
- Node: API Ownership of MPFR and GMP Values1128478
- Node: Registration Functions1130031
- Node: Extension Functions1130735
- Node: Exit Callback Functions1136309
- Node: Extension Version String1137623
- Node: Input Parsers1138318
- Node: Output Wrappers1152937
- Node: Two-way processors1157779
- Node: Printing Messages1160132
- Ref: Printing Messages-Footnote-11161343
- Node: Updating ERRNO1161496
- Node: Requesting Values1162295
- Ref: table-value-types-returned1163048
- Node: Accessing Parameters1165107
- Node: Symbol Table Access1166388
- Node: Symbol table by name1166900
- Ref: Symbol table by name-Footnote-11170101
- Node: Symbol table by cookie1170233
- Ref: Symbol table by cookie-Footnote-11174502
- Node: Cached values1174566
- Ref: Cached values-Footnote-11178198
- Node: Array Manipulation1178355
- Ref: Array Manipulation-Footnote-11179454
- Node: Array Data Types1179491
- Ref: Array Data Types-Footnote-11182309
- Node: Array Functions1182405
- Node: Flattening Arrays1187434
- Node: Creating Arrays1194482
- Node: Redirection API1199324
- Node: Extension API Variables1202341
- Node: Extension Versioning1203064
- Ref: gawk-api-version1203493
- Node: Extension GMP/MPFR Versioning1205280
- Node: Extension API Informational Variables1206984
- Node: Extension API Boilerplate1208237
- Node: Changes from API V11212367
- Node: Finding Extensions1213999
- Node: Extension Example1214574
- Node: Internal File Description1215396
- Node: Internal File Ops1219688
- Ref: Internal File Ops-Footnote-11231238
- Node: Using Internal File Ops1231386
- Ref: Using Internal File Ops-Footnote-11233819
- Node: Extension Samples1234097
- Node: Extension Sample File Functions1235666
- Node: Extension Sample Fnmatch1243791
- Node: Extension Sample Fork1245386
- Node: Extension Sample Inplace1246662
- Node: Extension Sample Ord1250764
- Node: Extension Sample Readdir1251640
- Ref: table-readdir-file-types1252429
- Node: Extension Sample Revout1253785
- Node: Extension Sample Rev2way1254382
- Node: Extension Sample Read write array1255134
- Node: Extension Sample Readfile1258408
- Node: Extension Sample Time1259539
- Node: Extension Sample API Tests1261539
- Node: gawkextlib1262047
- Node: Extension summary1265079
- Node: Extension Exercises1268927
- Node: Language History1270197
- Node: V7/SVR3.11271909
- Node: SVR41274259
- Node: POSIX1275791
- Node: BTL1277216
- Node: POSIX/GNU1277983
- Ref: Gawk Extension Functions1281373
- Node: Feature History1284797
- Node: Common Extensions1304638
- Node: Ranges and Locales1306113
- Ref: Ranges and Locales-Footnote-11310898
- Ref: Ranges and Locales-Footnote-21310925
- Ref: Ranges and Locales-Footnote-31311160
- Node: Contributors1311383
- Node: History summary1317574
- Node: Installation1319016
- Node: Gawk Distribution1319980
- Node: Getting1320472
- Node: Extracting1321471
- Node: Distribution contents1323177
- Node: Unix Installation1331067
- Node: Quick Installation1331887
- Node: Compiling with MPFR1334427
- Node: Shell Startup Files1335133
- Node: Additional Configuration Options1336290
- Node: Configuration Philosophy1338673
- Node: Compiling from Git1341173
- Node: Building the Documentation1341732
- Node: Non-Unix Installation1343144
- Node: PC Installation1343620
- Node: PC Binary Installation1344489
- Node: PC Compiling1345382
- Node: PC Using1346560
- Node: Cygwin1350276
- Node: MSYS1351528
- Node: OpenVMS Installation1352154
- Node: OpenVMS Compilation1352835
- Ref: OpenVMS Compilation-Footnote-11354318
- Node: OpenVMS Dynamic Extensions1354376
- Node: OpenVMS Installation Details1356012
- Node: OpenVMS Running1358443
- Node: OpenVMS GNV1362580
- Node: Bugs1363335
- Node: Bug definition1364255
- Node: Bug address1367856
- Node: Usenet1371425
- Node: Performance bugs1372638
- Node: Asking for help1375642
- Node: Maintainers1377629
- Node: Other Versions1378656
- Node: Installation summary1388260
- Node: Notes1389642
- Node: Compatibility Mode1390452
- Node: Additions1391274
- Node: Accessing The Source1392219
- Node: Adding Code1393750
- Node: New Ports1400861
- Node: Derived Files1405364
- Ref: Derived Files-Footnote-11411175
- Ref: Derived Files-Footnote-21411210
- Ref: Derived Files-Footnote-31411821
- Node: Future Extensions1411935
- Node: Implementation Limitations1412605
- Node: Extension Design1413847
- Node: Old Extension Problems1415007
- Ref: Old Extension Problems-Footnote-11416579
- Node: Extension New Mechanism Goals1416640
- Ref: Extension New Mechanism Goals-Footnote-11420110
- Node: Extension Other Design Decisions1420311
- Node: Extension Future Growth1422508
- Node: Notes summary1423128
- Node: Basic Concepts1424338
- Node: Basic High Level1425023
- Ref: figure-general-flow1425305
- Ref: figure-process-flow1426007
- Ref: Basic High Level-Footnote-11429377
- Node: Basic Data Typing1429566
- Node: Glossary1432974
- Node: Copying1465852
- Node: GNU Free Documentation License1503410
- Node: Index1528533
++Node: Id Program805893
++Node: Split Program815985
++Ref: Split Program-Footnote-1826198
++Node: Tee Program826383
++Node: Uniq Program829289
++Node: Wc Program837149
++Node: Bytes vs. Characters837544
++Node: Using extensions839144
++Node: wc program839922
++Node: Miscellaneous Programs844915
++Node: Dupword Program846140
++Node: Alarm Program848189
++Node: Translate Program853092
++Ref: Translate Program-Footnote-1857801
++Node: Labels Program858079
++Ref: Labels Program-Footnote-1861514
++Node: Word Sorting861598
++Node: History Sorting865772
++Node: Extract Program868045
++Node: Simple Sed876298
++Node: Igawk Program879508
++Ref: Igawk Program-Footnote-1894718
++Ref: Igawk Program-Footnote-2894924
++Ref: Igawk Program-Footnote-3895054
++Node: Anagram Program895181
++Node: Signature Program898267
++Node: Programs Summary899517
++Node: Programs Exercises900771
++Ref: Programs Exercises-Footnote-1905073
++Node: Advanced Features905159
++Node: Nondecimal Data907640
++Node: Boolean Typed Values909270
++Node: Array Sorting911227
++Node: Controlling Array Traversal911956
++Ref: Controlling Array Traversal-Footnote-1920459
++Node: Array Sorting Functions920581
++Ref: Array Sorting Functions-Footnote-1926678
++Node: Two-way I/O926886
++Ref: Two-way I/O-Footnote-1934857
++Ref: Two-way I/O-Footnote-2935048
++Node: TCP/IP Networking935130
++Node: Profiling938298
++Node: Persistent Memory947968
++Ref: Persistent Memory-Footnote-1957540
++Node: Extension Philosophy957671
++Node: Advanced Features Summary959198
++Node: Internationalization961464
++Node: I18N and L10N963166
++Node: Explaining gettext963861
++Ref: Explaining gettext-Footnote-1969997
++Ref: Explaining gettext-Footnote-2970190
++Node: Programmer i18n970355
++Ref: Programmer i18n-Footnote-1975467
++Node: Translator i18n975516
++Node: String Extraction976346
++Ref: String Extraction-Footnote-1977522
++Node: Printf Ordering977620
++Ref: Printf Ordering-Footnote-1980478
++Node: I18N Portability980546
++Ref: I18N Portability-Footnote-1983106
++Node: I18N Example983173
++Ref: I18N Example-Footnote-1986567
++Ref: I18N Example-Footnote-2986640
++Node: Gawk I18N986757
++Node: I18N Summary987411
++Node: Debugger988808
++Node: Debugging989828
++Node: Debugging Concepts990277
++Node: Debugging Terms992094
++Node: Awk Debugging994697
++Ref: Awk Debugging-Footnote-1995670
++Node: Sample Debugging Session995806
++Node: Debugger Invocation996356
++Node: Finding The Bug997981
++Node: List of Debugger Commands1004613
++Node: Breakpoint Control1005990
++Node: Debugger Execution Control1009812
++Node: Viewing And Changing Data1013286
++Node: Execution Stack1017020
++Node: Debugger Info1018701
++Node: Miscellaneous Debugger Commands1022996
++Node: Readline Support1028237
++Node: Limitations1029181
++Node: Debugging Summary1031805
++Node: Namespaces1033104
++Node: Global Namespace1034231
++Node: Qualified Names1035665
++Node: Default Namespace1036700
++Node: Changing The Namespace1037473
++Node: Naming Rules1039155
++Node: Internal Name Management1041110
++Node: Namespace Example1042180
++Node: Namespace And Features1044757
++Node: Namespace Summary1046212
++Node: Arbitrary Precision Arithmetic1047723
++Node: Computer Arithmetic1049242
++Ref: table-numeric-ranges1053167
++Ref: table-floating-point-ranges1053664
++Ref: Computer Arithmetic-Footnote-11054322
++Node: Math Definitions1054379
++Ref: table-ieee-formats1057411
++Node: MPFR features1057984
++Node: MPFR On Parole1058437
++Ref: MPFR On Parole-Footnote-11059278
++Node: MPFR Intro1059437
++Node: FP Math Caution1061121
++Ref: FP Math Caution-Footnote-11062193
++Node: Inexactness of computations1062566
++Node: Inexact representation1063597
++Node: Comparing FP Values1064978
++Node: Errors accumulate1066236
++Node: Strange values1067701
++Ref: Strange values-Footnote-11070355
++Node: Getting Accuracy1070460
++Node: Try To Round1073197
++Node: Setting precision1074104
++Ref: table-predefined-precision-strings1074809
++Node: Setting the rounding mode1076693
++Ref: table-gawk-rounding-modes1077075
++Ref: Setting the rounding mode-Footnote-11081127
++Node: Arbitrary Precision Integers1081310
++Ref: Arbitrary Precision Integers-Footnote-11084520
++Node: Checking for MPFR1084673
++Node: POSIX Floating Point Problems1086163
++Ref: POSIX Floating Point Problems-Footnote-11090983
++Node: Floating point summary1091021
++Node: Dynamic Extensions1093277
++Node: Extension Intro1094874
++Node: Plugin License1096176
++Node: Extension Mechanism Outline1096989
++Ref: figure-load-extension1097440
++Ref: figure-register-new-function1099018
++Ref: figure-call-new-function1100127
++Node: Extension API Description1102242
++Node: Extension API Functions Introduction1103971
++Ref: table-api-std-headers1105865
++Node: General Data Types1110306
++Ref: General Data Types-Footnote-11119452
++Node: Memory Allocation Functions1119755
++Ref: Memory Allocation Functions-Footnote-11124472
++Node: Constructor Functions1124571
++Node: API Ownership of MPFR and GMP Values1128472
++Node: Registration Functions1130025
++Node: Extension Functions1130729
++Node: Exit Callback Functions1136303
++Node: Extension Version String1137617
++Node: Input Parsers1138312
++Node: Output Wrappers1152931
++Node: Two-way processors1157773
++Node: Printing Messages1160126
++Ref: Printing Messages-Footnote-11161337
++Node: Updating ERRNO1161490
++Node: Requesting Values1162289
++Ref: table-value-types-returned1163042
++Node: Accessing Parameters1165101
++Node: Symbol Table Access1166382
++Node: Symbol table by name1166894
++Ref: Symbol table by name-Footnote-11170095
++Node: Symbol table by cookie1170227
++Ref: Symbol table by cookie-Footnote-11174496
++Node: Cached values1174560
++Ref: Cached values-Footnote-11178192
++Node: Array Manipulation1178349
++Ref: Array Manipulation-Footnote-11179448
++Node: Array Data Types1179485
++Ref: Array Data Types-Footnote-11182303
++Node: Array Functions1182399
++Node: Flattening Arrays1187428
++Node: Creating Arrays1194476
++Node: Redirection API1199318
++Node: Extension API Variables1202335
++Node: Extension Versioning1203058
++Ref: gawk-api-version1203487
++Node: Extension GMP/MPFR Versioning1205274
++Node: Extension API Informational Variables1206978
++Node: Extension API Boilerplate1208231
++Node: Changes from API V11212361
++Node: Finding Extensions1213993
++Node: Extension Example1214568
++Node: Internal File Description1215390
++Node: Internal File Ops1219682
++Ref: Internal File Ops-Footnote-11231232
++Node: Using Internal File Ops1231380
++Ref: Using Internal File Ops-Footnote-11233813
++Node: Extension Samples1234091
++Node: Extension Sample File Functions1235660
++Node: Extension Sample Fnmatch1243785
++Node: Extension Sample Fork1245380
++Node: Extension Sample Inplace1246656
++Node: Extension Sample Ord1250758
++Node: Extension Sample Readdir1251634
++Ref: table-readdir-file-types1252423
++Node: Extension Sample Revout1253779
++Node: Extension Sample Rev2way1254376
++Node: Extension Sample Read write array1255128
++Node: Extension Sample Readfile1258402
++Node: Extension Sample Time1259533
++Node: Extension Sample API Tests1261533
++Node: gawkextlib1262041
++Node: Extension summary1265073
++Node: Extension Exercises1268921
++Node: Language History1270191
++Node: V7/SVR3.11271903
++Node: SVR41274253
++Node: POSIX1275785
++Node: BTL1277210
++Node: POSIX/GNU1277977
++Ref: Gawk Extension Functions1281367
++Node: Feature History1284791
++Node: Common Extensions1304632
++Node: Ranges and Locales1306107
++Ref: Ranges and Locales-Footnote-11310892
++Ref: Ranges and Locales-Footnote-21310919
++Ref: Ranges and Locales-Footnote-31311154
++Node: Contributors1311377
++Node: History summary1317568
++Node: Installation1319010
++Node: Gawk Distribution1319974
++Node: Getting1320466
++Node: Extracting1321465
++Node: Distribution contents1323171
++Node: Unix Installation1331061
++Node: Quick Installation1331881
++Node: Compiling with MPFR1334421
++Node: Shell Startup Files1335127
++Node: Additional Configuration Options1336284
++Node: Configuration Philosophy1338667
++Node: Compiling from Git1341167
++Node: Building the Documentation1341726
++Node: Non-Unix Installation1343138
++Node: PC Installation1343614
++Node: PC Binary Installation1344483
++Node: PC Compiling1345376
++Node: PC Using1346554
++Node: Cygwin1350270
++Node: MSYS1351522
++Node: OpenVMS Installation1352148
++Node: OpenVMS Compilation1352829
++Ref: OpenVMS Compilation-Footnote-11354312
++Node: OpenVMS Dynamic Extensions1354370
++Node: OpenVMS Installation Details1356006
++Node: OpenVMS Running1358437
++Node: OpenVMS GNV1362574
++Node: Bugs1363329
++Node: Bug definition1364249
++Node: Bug address1367850
++Node: Usenet1371419
++Node: Performance bugs1372632
++Node: Asking for help1375636
++Node: Maintainers1377623
++Node: Other Versions1378650
++Node: Installation summary1388254
++Node: Notes1389636
++Node: Compatibility Mode1390446
++Node: Additions1391268
++Node: Accessing The Source1392213
++Node: Adding Code1393744
++Node: New Ports1400855
++Node: Derived Files1405358
++Ref: Derived Files-Footnote-11411169
++Ref: Derived Files-Footnote-21411204
++Ref: Derived Files-Footnote-31411815
++Node: Future Extensions1411929
++Node: Implementation Limitations1412599
++Node: Extension Design1413841
++Node: Old Extension Problems1415001
++Ref: Old Extension Problems-Footnote-11416573
++Node: Extension New Mechanism Goals1416634
++Ref: Extension New Mechanism Goals-Footnote-11420104
++Node: Extension Other Design Decisions1420305
++Node: Extension Future Growth1422502
++Node: Notes summary1423122
++Node: Basic Concepts1424332
++Node: Basic High Level1425017
++Ref: figure-general-flow1425299
++Ref: figure-process-flow1426001
++Ref: Basic High Level-Footnote-11429371
++Node: Basic Data Typing1429560
++Node: Glossary1432968
++Node: Copying1465846
++Node: GNU Free Documentation License1503404
++Node: Index1528527
End Tag Table
http://git.sv.gnu.org/cgit/gawk.git/commit/?id=cac1f551ae51c9b2cd258a29fed8ba1fb9a22e41
commit cac1f551ae51c9b2cd258a29fed8ba1fb9a22e41
Merge: 8ced7f38 84eb66e2
Author: Arnold D. Robbins <arnold@skeeve.com>
Date: Thu Aug 29 09:50:37 2024 +0300
Merge branch 'gawk-5.3-stable' into stable/fpat-doc
http://git.sv.gnu.org/cgit/gawk.git/commit/?id=8ced7f38f9a28fbb40f915e6429d41ab79fd346b
commit 8ced7f38f9a28fbb40f915e6429d41ab79fd346b
Merge: a157700d 1b36f12e
Author: Arnold D. Robbins <arnold@skeeve.com>
Date: Wed Aug 28 08:30:24 2024 +0300
Merge branch 'gawk-5.3-stable' into stable/fpat-doc
http://git.sv.gnu.org/cgit/gawk.git/commit/?id=a157700d6354f16fb8c1a1921b4d6c7a766f7b76
commit a157700d6354f16fb8c1a1921b4d6c7a766f7b76
Merge: db25f278 a5ce4f44
Author: Arnold D. Robbins <arnold@skeeve.com>
Date: Sat Aug 17 21:28:49 2024 +0300
Merge branch 'gawk-5.3-stable' into stable/fpat-doc
http://git.sv.gnu.org/cgit/gawk.git/commit/?id=db25f2786ad250aae18c6ea58d6f92b3730aa204
commit db25f2786ad250aae18c6ea58d6f92b3730aa204
Merge: 32d01763 7e870b2e
Author: Arnold D. Robbins <arnold@skeeve.com>
Date: Fri Aug 16 14:52:30 2024 +0300
Merge branch 'gawk-5.3-stable' into stable/fpat-doc
diff --cc doc/gawk.info
index 6a99e029,5e3d6f66..079655b2
--- a/doc/gawk.info
+++ b/doc/gawk.info
@@@ -39930,588 -39971,588 +39969,588 @@@ Node: Intro Summary12287
Node: Invoking Gawk123828
Node: Command Line125390
Node: Options126240
- Ref: Options-Footnote-1145580
- Ref: Options-Footnote-2145815
- Node: Other Arguments145840
- Node: Naming Standard Input150005
- Node: Environment Variables151275
- Node: AWKPATH Variable151849
- Ref: AWKPATH Variable-Footnote-1155433
- Ref: AWKPATH Variable-Footnote-2155467
- Node: AWKLIBPATH Variable155858
- Ref: AWKLIBPATH Variable-Footnote-1157631
- Node: Other Environment Variables158026
- Node: Exit Status162502
- Node: Include Files163215
- Node: Loading Shared Libraries167267
- Node: Obsolete168757
- Node: Undocumented169505
- Node: Invoking Summary169802
- Node: Regexp172827
- Node: Regexp Usage174321
- Node: Escape Sequences176422
- Ref: Escape Sequences-Footnote-1183957
- Node: Regexp Operators184035
- Node: Regexp Operator Details184528
- Ref: Regexp Operator Details-Footnote-1192539
- Node: Interval Expressions192698
- Ref: Interval Expressions-Footnote-1194965
- Node: Bracket Expressions195063
- Ref: table-char-classes197619
- Node: Leftmost Longest201117
- Node: Computed Regexps202473
- Node: GNU Regexp Operators205988
- Node: Case-sensitivity211085
- Ref: Case-sensitivity-Footnote-1214035
- Ref: Case-sensitivity-Footnote-2214278
- Node: Regexp Summary214390
- Node: Reading Files215912
- Node: Records218231
- Node: awk split records219506
- Node: gawk split records224388
- Ref: gawk split records-Footnote-1229676
- Node: Fields229713
- Ref: Fields-Footnote-1232629
- Node: Nonconstant Fields232749
- Ref: Nonconstant Fields-Footnote-1235057
- Node: Changing Fields235273
- Node: Field Separators241571
- Node: Default Field Splitting244440
- Node: Regexp Field Splitting245582
- Node: Single Character Fields249411
- Node: Comma Separated Fields250500
- Ref: table-csv-examples251904
- Node: Command Line Field Separator254203
- Node: Full Line Fields257579
- Ref: Full Line Fields-Footnote-1259157
- Ref: Full Line Fields-Footnote-2259203
- Node: Field Splitting Summary259308
- Node: Constant Size261625
- Node: Fixed width data262369
- Node: Skipping intervening265884
- Node: Allowing trailing data266686
- Node: Fields with fixed data267747
- Node: Splitting By Content269369
- Ref: Splitting By Content-Footnote-1273292
- Node: More CSV273455
- Node: FS versus FPAT275531
- Node: Testing field creation276731
- Node: Multiple Line278505
- Node: Getline284974
- Node: Plain Getline287562
- Node: Getline/Variable290210
- Node: Getline/File291406
- Node: Getline/Variable/File292854
- Ref: Getline/Variable/File-Footnote-1294499
- Node: Getline/Pipe294595
- Node: Getline/Variable/Pipe297403
- Node: Getline/Coprocess298586
- Node: Getline/Variable/Coprocess299909
- Node: Getline Notes300675
- Node: Getline Summary304652
- Ref: table-getline-variants305096
- Node: Read Timeout306000
- Ref: Read Timeout-Footnote-1309962
- Node: Retrying Input310020
- Node: Command-line directories311287
- Node: Input Summary312225
- Node: Input Exercises315605
- Node: Printing316043
- Node: Print317986
- Node: Print Examples319487
- Node: Output Separators322332
- Node: OFMT324439
- Node: Printf326152
- Node: Basic Printf326957
- Node: Control Letters328592
- Node: Format Modifiers334038
- Node: Printf Examples340310
- Node: Redirection342851
- Node: Special FD350623
- Ref: Special FD-Footnote-1353921
- Node: Special Files353999
- Node: Other Inherited Files354628
- Node: Special Network355693
- Node: Special Caveats356581
- Node: Close Files And Pipes357564
- Ref: Close Files And Pipes-Footnote-1363688
- Node: Close Return Value363836
- Ref: table-close-pipe-return-values365107
- Ref: Close Return Value-Footnote-1365938
- Node: Noflush366094
- Node: Nonfatal367602
- Node: Output Summary370017
- Node: Output Exercises371303
- Node: Expressions371994
- Node: Values373194
- Node: Constants373872
- Node: Scalar Constants374567
- Ref: Scalar Constants-Footnote-1377143
- Ref: Scalar Constants-Footnote-2377393
- Node: Nondecimal-numbers377473
- Node: Regexp Constants380586
- Node: Using Constant Regexps381132
- Node: Standard Regexp Constants381778
- Node: Strong Regexp Constants385074
- Node: Variables388917
- Node: Using Variables389582
- Node: Assignment Options391556
- Node: Conversion394107
- Node: Strings And Numbers394639
- Ref: Strings And Numbers-Footnote-1397849
- Node: Locale influences conversions397958
- Ref: table-locale-affects400796
- Node: All Operators401438
- Node: Arithmetic Ops402079
- Node: Concatenation404902
- Ref: Concatenation-Footnote-1407838
- Node: Assignment Ops407957
- Ref: table-assign-ops413084
- Node: Increment Ops414465
- Node: Truth Values and Conditions418056
- Node: Truth Values419150
- Node: Typing and Comparison420230
- Node: Variable Typing421062
- Ref: Variable Typing-Footnote-1427706
- Ref: Variable Typing-Footnote-2427786
- Node: Comparison Operators427867
- Ref: table-relational-ops428294
- Node: POSIX String Comparison431970
- Ref: POSIX String Comparison-Footnote-1433727
- Ref: POSIX String Comparison-Footnote-2433870
- Node: Boolean Ops433954
- Ref: Boolean Ops-Footnote-1438628
- Node: Conditional Exp438724
- Node: Function Calls440504
- Node: Precedence444451
- Node: Locales448314
- Node: Expressions Summary449990
- Node: Patterns and Actions452645
- Node: Pattern Overview453781
- Node: Regexp Patterns455506
- Node: Expression Patterns456052
- Node: Ranges459957
- Node: BEGIN/END463131
- Node: Using BEGIN/END463940
- Ref: Using BEGIN/END-Footnote-1466848
- Node: I/O And BEGIN/END466958
- Node: BEGINFILE/ENDFILE469440
- Node: Empty472870
- Node: Using Shell Variables473187
- Node: Action Overview475523
- Node: Statements477959
- Node: If Statement479855
- Node: While Statement481418
- Node: Do Statement483506
- Node: For Statement484690
- Node: Switch Statement488045
- Node: Break Statement490594
- Node: Continue Statement492786
- Node: Next Statement494717
- Node: Nextfile Statement497196
- Node: Exit Statement500049
- Node: Built-in Variables502576
- Node: User-modified503753
- Node: Auto-set511960
- Ref: Auto-set-Footnote-1530044
- Ref: Auto-set-Footnote-2530262
- Node: ARGC and ARGV530318
- Node: Pattern Action Summary534747
- Node: Arrays537353
- Node: Array Basics538726
- Node: Array Intro539574
- Ref: figure-array-elements541585
- Ref: Array Intro-Footnote-1544438
- Node: Reference to Elements544570
- Node: Assigning Elements547090
- Node: Array Example547585
- Node: Scanning an Array549547
- Node: Controlling Scanning552642
- Ref: Controlling Scanning-Footnote-1559277
- Node: Numeric Array Subscripts559601
- Node: Uninitialized Subscripts561869
- Node: Delete563542
- Ref: Delete-Footnote-1566354
- Node: Multidimensional566411
- Node: Multiscanning569614
- Node: Arrays of Arrays571281
- Node: Arrays Summary575585
- Node: Functions577772
- Node: Built-in578904
- Node: Calling Built-in580093
- Node: Boolean Functions582133
- Node: Numeric Functions582695
- Ref: Numeric Functions-Footnote-1586880
- Ref: Numeric Functions-Footnote-2587563
- Ref: Numeric Functions-Footnote-3587615
- Node: String Functions587891
- Ref: String Functions-Footnote-1614342
- Ref: String Functions-Footnote-2614474
- Ref: String Functions-Footnote-3614730
- Node: Gory Details614817
- Ref: table-sub-escapes616826
- Ref: table-sub-proposed618457
- Ref: table-posix-sub619952
- Ref: table-gensub-escapes621625
- Ref: Gory Details-Footnote-1622544
- Node: I/O Functions622698
- Ref: table-system-return-values629374
- Ref: I/O Functions-Footnote-1631536
- Ref: I/O Functions-Footnote-2631684
- Node: Time Functions631804
- Ref: Time Functions-Footnote-1643516
- Ref: Time Functions-Footnote-2643584
- Ref: Time Functions-Footnote-3643746
- Ref: Time Functions-Footnote-4643857
- Ref: Time Functions-Footnote-5643973
- Ref: Time Functions-Footnote-6644200
- Node: Bitwise Functions644478
- Ref: table-bitwise-ops645076
- Ref: Bitwise Functions-Footnote-1651318
- Ref: Bitwise Functions-Footnote-2651495
- Node: Type Functions651690
- Node: I18N Functions653861
- Node: User-defined655596
- Node: Definition Syntax656342
- Ref: Definition Syntax-Footnote-1662160
- Node: Function Example662235
- Ref: Function Example-Footnote-1665214
- Node: Function Calling665236
- Node: Calling A Function665828
- Node: Variable Scope666798
- Node: Pass By Value/Reference669852
- Node: Function Caveats672580
- Ref: Function Caveats-Footnote-1674671
- Node: Return Statement674791
- Node: Dynamic Typing677823
- Node: Dynamic Typing Awk678401
- Node: Dynamic Typing Gawk680539
- Node: Indirect Calls683909
- Node: Functions Summary695046
- Node: Library Functions698012
- Ref: Library Functions-Footnote-1701560
- Ref: Library Functions-Footnote-2701705
- Node: Library Names701880
- Ref: Library Names-Footnote-1705651
- Ref: Library Names-Footnote-2705878
- Node: General Functions705972
- Node: Strtonum Function707242
- Node: Assert Function710324
- Node: Round Function713774
- Node: Cliff Random Function715346
- Node: Ordinal Functions716370
- Ref: Ordinal Functions-Footnote-1719473
- Ref: Ordinal Functions-Footnote-2719725
- Node: Join Function719939
- Ref: Join Function-Footnote-1721737
- Node: Getlocaltime Function721941
- Node: Readfile Function725715
- Node: Shell Quoting727744
- Node: Isnumeric Function729200
- Node: To CSV Function730636
- Node: Data File Management732728
- Node: Filetrans Function733360
- Node: Rewind Function737636
- Node: File Checking739607
- Ref: File Checking-Footnote-1740973
- Node: Empty Files741178
- Node: Ignoring Assigns743241
- Node: Getopt Function744815
- Ref: Getopt Function-Footnote-1760633
- Node: Passwd Functions760845
- Ref: Passwd Functions-Footnote-1769980
- Node: Group Functions770068
- Ref: Group Functions-Footnote-1778192
- Node: Walking Arrays778403
- Node: Library Functions Summary781449
- Node: Library Exercises782869
- Node: Sample Programs783354
- Node: Running Examples784136
- Node: Clones784888
- Node: Cut Program786156
- Node: Egrep Program796580
- Node: Id Program805885
- Node: Split Program815977
- Ref: Split Program-Footnote-1826190
- Node: Tee Program826375
- Node: Uniq Program829281
- Node: Wc Program837141
- Node: Bytes vs. Characters837536
- Node: Using extensions839136
- Node: wc program839914
- Node: Miscellaneous Programs844907
- Node: Dupword Program846132
- Node: Alarm Program848181
- Node: Translate Program853084
- Ref: Translate Program-Footnote-1857793
- Node: Labels Program858071
- Ref: Labels Program-Footnote-1861506
- Node: Word Sorting861590
- Node: History Sorting865764
- Node: Extract Program868037
- Node: Simple Sed876290
- Node: Igawk Program879500
- Ref: Igawk Program-Footnote-1894710
- Ref: Igawk Program-Footnote-2894916
- Ref: Igawk Program-Footnote-3895046
- Node: Anagram Program895173
- Node: Signature Program898259
- Node: Programs Summary899509
- Node: Programs Exercises900763
- Ref: Programs Exercises-Footnote-1905065
- Node: Advanced Features905151
- Node: Nondecimal Data907632
- Node: Boolean Typed Values909262
- Node: Array Sorting911219
- Node: Controlling Array Traversal911948
- Ref: Controlling Array Traversal-Footnote-1920451
- Node: Array Sorting Functions920573
- Ref: Array Sorting Functions-Footnote-1926670
- Node: Two-way I/O926878
- Ref: Two-way I/O-Footnote-1934849
- Ref: Two-way I/O-Footnote-2935040
- Node: TCP/IP Networking935122
- Node: Profiling938290
- Node: Persistent Memory947960
- Ref: Persistent Memory-Footnote-1957532
- Node: Extension Philosophy957663
- Node: Advanced Features Summary959190
- Node: Internationalization961456
- Node: I18N and L10N963158
- Node: Explaining gettext963853
- Ref: Explaining gettext-Footnote-1969989
- Ref: Explaining gettext-Footnote-2970182
- Node: Programmer i18n970347
- Ref: Programmer i18n-Footnote-1975459
- Node: Translator i18n975508
- Node: String Extraction976338
- Ref: String Extraction-Footnote-1977514
- Node: Printf Ordering977612
- Ref: Printf Ordering-Footnote-1980470
- Node: I18N Portability980538
- Ref: I18N Portability-Footnote-1983098
- Node: I18N Example983165
- Ref: I18N Example-Footnote-1986559
- Ref: I18N Example-Footnote-2986632
- Node: Gawk I18N986749
- Node: I18N Summary987403
- Node: Debugger988800
- Node: Debugging989820
- Node: Debugging Concepts990269
- Node: Debugging Terms992086
- Node: Awk Debugging994689
- Ref: Awk Debugging-Footnote-1995662
- Node: Sample Debugging Session995798
- Node: Debugger Invocation996348
- Node: Finding The Bug997973
- Node: List of Debugger Commands1004605
- Node: Breakpoint Control1005982
- Node: Debugger Execution Control1009804
- Node: Viewing And Changing Data1013278
- Node: Execution Stack1017012
- Node: Debugger Info1018693
- Node: Miscellaneous Debugger Commands1022988
- Node: Readline Support1028229
- Node: Limitations1029173
- Node: Debugging Summary1031797
- Node: Namespaces1033096
- Node: Global Namespace1034223
- Node: Qualified Names1035657
- Node: Default Namespace1036692
- Node: Changing The Namespace1037465
- Node: Naming Rules1039147
- Node: Internal Name Management1041102
- Node: Namespace Example1042172
- Node: Namespace And Features1044749
- Node: Namespace Summary1046204
- Node: Arbitrary Precision Arithmetic1047715
- Node: Computer Arithmetic1049234
- Ref: table-numeric-ranges1053159
- Ref: table-floating-point-ranges1053656
- Ref: Computer Arithmetic-Footnote-11054314
- Node: Math Definitions1054371
- Ref: table-ieee-formats1057403
- Node: MPFR features1057976
- Node: MPFR On Parole1058429
- Ref: MPFR On Parole-Footnote-11059270
- Node: MPFR Intro1059429
- Node: FP Math Caution1061113
- Ref: FP Math Caution-Footnote-11062185
- Node: Inexactness of computations1062558
- Node: Inexact representation1063589
- Node: Comparing FP Values1064970
- Node: Errors accumulate1066228
- Node: Strange values1067693
- Ref: Strange values-Footnote-11070347
- Node: Getting Accuracy1070452
- Node: Try To Round1073189
- Node: Setting precision1074096
- Ref: table-predefined-precision-strings1074801
- Node: Setting the rounding mode1076685
- Ref: table-gawk-rounding-modes1077067
- Ref: Setting the rounding mode-Footnote-11081119
- Node: Arbitrary Precision Integers1081302
- Ref: Arbitrary Precision Integers-Footnote-11084512
- Node: Checking for MPFR1084665
- Node: POSIX Floating Point Problems1086155
- Ref: POSIX Floating Point Problems-Footnote-11090975
- Node: Floating point summary1091013
- Node: Dynamic Extensions1093269
- Node: Extension Intro1094866
- Node: Plugin License1096168
- Node: Extension Mechanism Outline1096981
- Ref: figure-load-extension1097432
- Ref: figure-register-new-function1099010
- Ref: figure-call-new-function1100119
- Node: Extension API Description1102234
- Node: Extension API Functions Introduction1103963
- Ref: table-api-std-headers1105857
- Node: General Data Types1110298
- Ref: General Data Types-Footnote-11119444
- Node: Memory Allocation Functions1119747
- Ref: Memory Allocation Functions-Footnote-11124464
- Node: Constructor Functions1124563
- Node: API Ownership of MPFR and GMP Values1128464
- Node: Registration Functions1130017
- Node: Extension Functions1130721
- Node: Exit Callback Functions1136295
- Node: Extension Version String1137609
- Node: Input Parsers1138304
- Node: Output Wrappers1152923
- Node: Two-way processors1157765
- Node: Printing Messages1160118
- Ref: Printing Messages-Footnote-11161329
- Node: Updating ERRNO1161482
- Node: Requesting Values1162281
- Ref: table-value-types-returned1163034
- Node: Accessing Parameters1165093
- Node: Symbol Table Access1166374
- Node: Symbol table by name1166886
- Ref: Symbol table by name-Footnote-11170087
- Node: Symbol table by cookie1170219
- Ref: Symbol table by cookie-Footnote-11174488
- Node: Cached values1174552
- Ref: Cached values-Footnote-11178184
- Node: Array Manipulation1178341
- Ref: Array Manipulation-Footnote-11179440
- Node: Array Data Types1179477
- Ref: Array Data Types-Footnote-11182295
- Node: Array Functions1182391
- Node: Flattening Arrays1187420
- Node: Creating Arrays1194468
- Node: Redirection API1199310
- Node: Extension API Variables1202327
- Node: Extension Versioning1203050
- Ref: gawk-api-version1203479
- Node: Extension GMP/MPFR Versioning1205266
- Node: Extension API Informational Variables1206970
- Node: Extension API Boilerplate1208223
- Node: Changes from API V11212353
- Node: Finding Extensions1213985
- Node: Extension Example1214560
- Node: Internal File Description1215382
- Node: Internal File Ops1219674
- Ref: Internal File Ops-Footnote-11231224
- Node: Using Internal File Ops1231372
- Ref: Using Internal File Ops-Footnote-11233803
- Node: Extension Samples1234081
- Node: Extension Sample File Functions1235650
- Node: Extension Sample Fnmatch1243775
- Node: Extension Sample Fork1245370
- Node: Extension Sample Inplace1246646
- Node: Extension Sample Ord1250748
- Node: Extension Sample Readdir1251624
- Ref: table-readdir-file-types1252413
- Node: Extension Sample Revout1253769
- Node: Extension Sample Rev2way1254366
- Node: Extension Sample Read write array1255118
- Node: Extension Sample Readfile1258392
- Node: Extension Sample Time1259523
- Node: Extension Sample API Tests1261523
- Node: gawkextlib1262031
- Node: Extension summary1265063
- Node: Extension Exercises1268911
- Node: Language History1270181
- Node: V7/SVR3.11271893
- Node: SVR41274243
- Node: POSIX1275775
- Node: BTL1277200
- Node: POSIX/GNU1277967
- Ref: Gawk Extension Functions1281357
- Node: Feature History1284781
- Node: Common Extensions1304622
- Node: Ranges and Locales1306097
- Ref: Ranges and Locales-Footnote-11310882
- Ref: Ranges and Locales-Footnote-21310909
- Ref: Ranges and Locales-Footnote-31311144
- Node: Contributors1311367
- Node: History summary1317558
- Node: Installation1319000
- Node: Gawk Distribution1319964
- Node: Getting1320456
- Node: Extracting1321455
- Node: Distribution contents1323161
- Node: Unix Installation1331051
- Node: Quick Installation1331871
- Node: Compiling with MPFR1334411
- Node: Shell Startup Files1335117
- Node: Additional Configuration Options1336274
- Node: Configuration Philosophy1338657
- Node: Compiling from Git1341157
- Node: Building the Documentation1341716
- Node: Non-Unix Installation1343128
- Node: PC Installation1343604
- Node: PC Binary Installation1344473
- Node: PC Compiling1345366
- Node: PC Using1346544
- Node: Cygwin1350260
- Node: MSYS1351512
- Node: OpenVMS Installation1352138
- Node: OpenVMS Compilation1352819
- Ref: OpenVMS Compilation-Footnote-11354302
- Node: OpenVMS Dynamic Extensions1354360
- Node: OpenVMS Installation Details1355996
- Node: OpenVMS Running1358427
- Node: OpenVMS GNV1362564
- Node: Bugs1363319
- Node: Bug definition1364239
- Node: Bug address1367840
- Node: Usenet1371409
- Node: Performance bugs1372622
- Node: Asking for help1375626
- Node: Maintainers1377613
- Node: Other Versions1378640
- Node: Installation summary1388244
- Node: Notes1389626
- Node: Compatibility Mode1390436
- Node: Additions1391258
- Node: Accessing The Source1392203
- Node: Adding Code1393734
- Node: New Ports1400845
- Node: Derived Files1405348
- Ref: Derived Files-Footnote-11411159
- Ref: Derived Files-Footnote-21411194
- Ref: Derived Files-Footnote-31411805
- Node: Future Extensions1411919
- Node: Implementation Limitations1412589
- Node: Extension Design1413831
- Node: Old Extension Problems1414991
- Ref: Old Extension Problems-Footnote-11416563
- Node: Extension New Mechanism Goals1416624
- Ref: Extension New Mechanism Goals-Footnote-11420094
- Node: Extension Other Design Decisions1420295
- Node: Extension Future Growth1422492
- Node: Notes summary1423112
- Node: Basic Concepts1424322
- Node: Basic High Level1425007
- Ref: figure-general-flow1425289
- Ref: figure-process-flow1425991
- Ref: Basic High Level-Footnote-11429361
- Node: Basic Data Typing1429550
- Node: Glossary1432958
- Node: Copying1465836
- Node: GNU Free Documentation License1503394
- Node: Index1528517
+ Ref: Options-Footnote-1145582
+ Ref: Options-Footnote-2145817
+ Node: Other Arguments145842
+ Node: Naming Standard Input150007
+ Node: Environment Variables151277
+ Node: AWKPATH Variable151851
+ Ref: AWKPATH Variable-Footnote-1155435
+ Ref: AWKPATH Variable-Footnote-2155469
+ Node: AWKLIBPATH Variable155860
+ Ref: AWKLIBPATH Variable-Footnote-1157635
+ Node: Other Environment Variables158030
+ Node: Exit Status162506
+ Node: Include Files163219
+ Node: Loading Shared Libraries167279
+ Node: Obsolete168771
+ Node: Undocumented169519
+ Node: Invoking Summary169816
+ Node: Regexp172841
+ Node: Regexp Usage174335
+ Node: Escape Sequences176436
+ Ref: Escape Sequences-Footnote-1183971
+ Node: Regexp Operators184049
+ Node: Regexp Operator Details184542
+ Ref: Regexp Operator Details-Footnote-1192553
+ Node: Interval Expressions192712
+ Ref: Interval Expressions-Footnote-1194979
+ Node: Bracket Expressions195077
+ Ref: table-char-classes197633
+ Node: Leftmost Longest201131
+ Node: Computed Regexps202487
+ Node: GNU Regexp Operators206002
+ Node: Case-sensitivity211099
+ Ref: Case-sensitivity-Footnote-1214049
+ Ref: Case-sensitivity-Footnote-2214292
+ Node: Regexp Summary214404
+ Node: Reading Files215926
+ Node: Records218245
+ Node: awk split records219520
+ Node: gawk split records224402
+ Ref: gawk split records-Footnote-1229690
+ Node: Fields229727
+ Ref: Fields-Footnote-1232643
+ Node: Nonconstant Fields232763
+ Ref: Nonconstant Fields-Footnote-1235071
+ Node: Changing Fields235287
+ Node: Field Separators241585
+ Node: Default Field Splitting244454
+ Node: Regexp Field Splitting245596
+ Node: Single Character Fields249425
+ Node: Comma Separated Fields250514
+ Ref: table-csv-examples251918
+ Node: Command Line Field Separator254217
+ Node: Full Line Fields257593
+ Ref: Full Line Fields-Footnote-1259171
+ Ref: Full Line Fields-Footnote-2259217
+ Node: Field Splitting Summary259322
+ Node: Constant Size261639
+ Node: Fixed width data262383
+ Node: Skipping intervening265898
+ Node: Allowing trailing data266700
+ Node: Fields with fixed data267761
+ Node: Splitting By Content269383
-Ref: Splitting By Content-Footnote-1273833
-Node: More CSV273996
-Node: FS versus FPAT275654
-Node: Testing field creation276854
-Node: Multiple Line278628
-Node: Getline285097
-Node: Plain Getline287685
-Node: Getline/Variable290333
-Node: Getline/File291529
-Node: Getline/Variable/File292977
-Ref: Getline/Variable/File-Footnote-1294622
-Node: Getline/Pipe294718
-Node: Getline/Variable/Pipe297526
-Node: Getline/Coprocess298709
-Node: Getline/Variable/Coprocess300032
-Node: Getline Notes300798
-Node: Getline Summary304775
-Ref: table-getline-variants305219
-Node: Read Timeout306123
-Ref: Read Timeout-Footnote-1310085
-Node: Retrying Input310143
-Node: Command-line directories311410
-Node: Input Summary312348
-Node: Input Exercises315728
-Node: Printing316166
-Node: Print318109
-Node: Print Examples319610
-Node: Output Separators322455
-Node: OFMT324562
-Node: Printf326275
-Node: Basic Printf327080
-Node: Control Letters328715
-Node: Format Modifiers334161
-Node: Printf Examples340433
-Node: Redirection342974
-Node: Special FD350746
-Ref: Special FD-Footnote-1354044
-Node: Special Files354122
-Node: Other Inherited Files354751
-Node: Special Network355816
-Node: Special Caveats356704
-Node: Close Files And Pipes357687
-Ref: Close Files And Pipes-Footnote-1363811
-Node: Close Return Value363959
-Ref: table-close-pipe-return-values365230
-Ref: Close Return Value-Footnote-1366061
-Node: Noflush366217
-Node: Nonfatal367725
-Node: Output Summary370140
-Node: Output Exercises371426
-Node: Expressions372117
-Node: Values373317
-Node: Constants373995
-Node: Scalar Constants374690
-Ref: Scalar Constants-Footnote-1377266
-Ref: Scalar Constants-Footnote-2377516
-Node: Nondecimal-numbers377596
-Node: Regexp Constants380709
-Node: Using Constant Regexps381255
-Node: Standard Regexp Constants381901
-Node: Strong Regexp Constants385197
-Node: Variables389040
-Node: Using Variables389705
-Node: Assignment Options391679
-Node: Conversion394230
-Node: Strings And Numbers394762
-Ref: Strings And Numbers-Footnote-1397972
-Node: Locale influences conversions398081
-Ref: table-locale-affects400919
-Node: All Operators401561
-Node: Arithmetic Ops402202
-Node: Concatenation405025
-Ref: Concatenation-Footnote-1407961
-Node: Assignment Ops408080
-Ref: table-assign-ops413207
-Node: Increment Ops414588
-Node: Truth Values and Conditions418179
-Node: Truth Values419273
-Node: Typing and Comparison420353
-Node: Variable Typing421185
-Ref: Variable Typing-Footnote-1427829
-Ref: Variable Typing-Footnote-2427909
-Node: Comparison Operators427990
-Ref: table-relational-ops428417
-Node: POSIX String Comparison432093
-Ref: POSIX String Comparison-Footnote-1433850
-Ref: POSIX String Comparison-Footnote-2433993
-Node: Boolean Ops434077
-Ref: Boolean Ops-Footnote-1438751
-Node: Conditional Exp438847
-Node: Function Calls440627
-Node: Precedence444574
-Node: Locales448437
-Node: Expressions Summary450113
-Node: Patterns and Actions452768
-Node: Pattern Overview453904
-Node: Regexp Patterns455629
-Node: Expression Patterns456175
-Node: Ranges460080
-Node: BEGIN/END463254
-Node: Using BEGIN/END464063
-Ref: Using BEGIN/END-Footnote-1466971
-Node: I/O And BEGIN/END467081
-Node: BEGINFILE/ENDFILE469563
-Node: Empty472993
-Node: Using Shell Variables473310
-Node: Action Overview475646
-Node: Statements478082
-Node: If Statement479978
-Node: While Statement481541
-Node: Do Statement483629
-Node: For Statement484813
-Node: Switch Statement488168
-Node: Break Statement490717
-Node: Continue Statement492909
-Node: Next Statement494840
-Node: Nextfile Statement497319
-Node: Exit Statement500172
-Node: Built-in Variables502699
-Node: User-modified503876
-Node: Auto-set512083
-Ref: Auto-set-Footnote-1530167
-Ref: Auto-set-Footnote-2530385
-Node: ARGC and ARGV530441
-Node: Pattern Action Summary534870
-Node: Arrays537476
-Node: Array Basics538849
-Node: Array Intro539697
-Ref: figure-array-elements541708
-Ref: Array Intro-Footnote-1544561
-Node: Reference to Elements544693
-Node: Assigning Elements547213
-Node: Array Example547708
-Node: Scanning an Array549670
-Node: Controlling Scanning552765
-Ref: Controlling Scanning-Footnote-1559400
-Node: Numeric Array Subscripts559724
-Node: Uninitialized Subscripts561992
-Node: Delete563665
-Ref: Delete-Footnote-1566477
-Node: Multidimensional566534
-Node: Multiscanning569737
-Node: Arrays of Arrays571404
-Node: Arrays Summary575708
-Node: Functions577895
-Node: Built-in579027
-Node: Calling Built-in580216
-Node: Boolean Functions582256
-Node: Numeric Functions582818
-Ref: Numeric Functions-Footnote-1587003
-Ref: Numeric Functions-Footnote-2587686
-Ref: Numeric Functions-Footnote-3587738
-Node: String Functions588014
-Ref: String Functions-Footnote-1614465
-Ref: String Functions-Footnote-2614597
-Ref: String Functions-Footnote-3614853
-Node: Gory Details614940
-Ref: table-sub-escapes616949
-Ref: table-sub-proposed618580
-Ref: table-posix-sub620075
-Ref: table-gensub-escapes621748
-Ref: Gory Details-Footnote-1622667
-Node: I/O Functions622821
-Ref: table-system-return-values629497
-Ref: I/O Functions-Footnote-1631659
-Ref: I/O Functions-Footnote-2631807
-Node: Time Functions631927
-Ref: Time Functions-Footnote-1643639
-Ref: Time Functions-Footnote-2643707
-Ref: Time Functions-Footnote-3643869
-Ref: Time Functions-Footnote-4643980
-Ref: Time Functions-Footnote-5644096
-Ref: Time Functions-Footnote-6644323
-Node: Bitwise Functions644601
-Ref: table-bitwise-ops645199
-Ref: Bitwise Functions-Footnote-1651441
-Ref: Bitwise Functions-Footnote-2651618
-Node: Type Functions651813
-Node: I18N Functions653984
-Node: User-defined655719
-Node: Definition Syntax656465
-Ref: Definition Syntax-Footnote-1662283
-Node: Function Example662358
-Ref: Function Example-Footnote-1665337
-Node: Function Calling665359
-Node: Calling A Function665951
-Node: Variable Scope666921
-Node: Pass By Value/Reference669975
-Node: Function Caveats672703
-Ref: Function Caveats-Footnote-1674794
-Node: Return Statement674914
-Node: Dynamic Typing677946
-Node: Dynamic Typing Awk678524
-Node: Dynamic Typing Gawk680662
-Node: Indirect Calls684032
-Node: Functions Summary695169
-Node: Library Functions698135
-Ref: Library Functions-Footnote-1701683
-Ref: Library Functions-Footnote-2701828
-Node: Library Names702003
-Ref: Library Names-Footnote-1705774
-Ref: Library Names-Footnote-2706001
-Node: General Functions706095
-Node: Strtonum Function707365
-Node: Assert Function710447
-Node: Round Function713897
-Node: Cliff Random Function715469
-Node: Ordinal Functions716493
-Ref: Ordinal Functions-Footnote-1719596
-Ref: Ordinal Functions-Footnote-2719848
-Node: Join Function720062
-Ref: Join Function-Footnote-1721860
-Node: Getlocaltime Function722064
-Node: Readfile Function725838
-Node: Shell Quoting727867
-Node: Isnumeric Function729323
-Node: To CSV Function730759
-Node: Data File Management732851
-Node: Filetrans Function733483
-Node: Rewind Function737759
-Node: File Checking739730
-Ref: File Checking-Footnote-1741096
-Node: Empty Files741301
-Node: Ignoring Assigns743364
-Node: Getopt Function744938
-Ref: Getopt Function-Footnote-1760756
-Node: Passwd Functions760968
-Ref: Passwd Functions-Footnote-1770103
-Node: Group Functions770191
-Ref: Group Functions-Footnote-1778315
-Node: Walking Arrays778526
-Node: Library Functions Summary781572
-Node: Library Exercises782992
-Node: Sample Programs783477
-Node: Running Examples784259
-Node: Clones785011
-Node: Cut Program786279
-Node: Egrep Program796703
-Node: Id Program806008
-Node: Split Program816100
-Ref: Split Program-Footnote-1826313
-Node: Tee Program826498
-Node: Uniq Program829404
-Node: Wc Program837264
-Node: Bytes vs. Characters837659
-Node: Using extensions839259
-Node: wc program840037
-Node: Miscellaneous Programs845030
-Node: Dupword Program846255
-Node: Alarm Program848304
-Node: Translate Program853207
-Ref: Translate Program-Footnote-1857916
-Node: Labels Program858194
-Ref: Labels Program-Footnote-1861629
-Node: Word Sorting861713
-Node: History Sorting865887
-Node: Extract Program868160
-Node: Simple Sed876413
-Node: Igawk Program879623
-Ref: Igawk Program-Footnote-1894833
-Ref: Igawk Program-Footnote-2895039
-Ref: Igawk Program-Footnote-3895169
-Node: Anagram Program895296
-Node: Signature Program898382
-Node: Programs Summary899632
-Node: Programs Exercises900886
-Ref: Programs Exercises-Footnote-1905188
-Node: Advanced Features905274
-Node: Nondecimal Data907755
-Node: Boolean Typed Values909385
-Node: Array Sorting911342
-Node: Controlling Array Traversal912071
-Ref: Controlling Array Traversal-Footnote-1920574
-Node: Array Sorting Functions920696
-Ref: Array Sorting Functions-Footnote-1926793
-Node: Two-way I/O927001
-Ref: Two-way I/O-Footnote-1934972
-Ref: Two-way I/O-Footnote-2935163
-Node: TCP/IP Networking935245
-Node: Profiling938413
-Node: Persistent Memory948083
-Ref: Persistent Memory-Footnote-1957655
-Node: Extension Philosophy957786
-Node: Advanced Features Summary959313
-Node: Internationalization961579
-Node: I18N and L10N963281
-Node: Explaining gettext963976
-Ref: Explaining gettext-Footnote-1970112
-Ref: Explaining gettext-Footnote-2970305
-Node: Programmer i18n970470
-Ref: Programmer i18n-Footnote-1975582
-Node: Translator i18n975631
-Node: String Extraction976461
-Ref: String Extraction-Footnote-1977637
-Node: Printf Ordering977735
-Ref: Printf Ordering-Footnote-1980593
-Node: I18N Portability980661
-Ref: I18N Portability-Footnote-1983221
-Node: I18N Example983288
-Ref: I18N Example-Footnote-1986682
-Ref: I18N Example-Footnote-2986755
-Node: Gawk I18N986872
-Node: I18N Summary987526
-Node: Debugger988923
-Node: Debugging989943
-Node: Debugging Concepts990392
-Node: Debugging Terms992209
-Node: Awk Debugging994812
-Ref: Awk Debugging-Footnote-1995785
-Node: Sample Debugging Session995921
-Node: Debugger Invocation996471
-Node: Finding The Bug998096
-Node: List of Debugger Commands1004728
-Node: Breakpoint Control1006105
-Node: Debugger Execution Control1009927
-Node: Viewing And Changing Data1013401
-Node: Execution Stack1017135
-Node: Debugger Info1018816
-Node: Miscellaneous Debugger Commands1023111
-Node: Readline Support1028352
-Node: Limitations1029296
-Node: Debugging Summary1031920
-Node: Namespaces1033219
-Node: Global Namespace1034346
-Node: Qualified Names1035780
-Node: Default Namespace1036815
-Node: Changing The Namespace1037588
-Node: Naming Rules1039270
-Node: Internal Name Management1041225
-Node: Namespace Example1042295
-Node: Namespace And Features1044872
-Node: Namespace Summary1046327
-Node: Arbitrary Precision Arithmetic1047838
-Node: Computer Arithmetic1049357
-Ref: table-numeric-ranges1053282
-Ref: table-floating-point-ranges1053779
-Ref: Computer Arithmetic-Footnote-11054437
-Node: Math Definitions1054494
-Ref: table-ieee-formats1057526
-Node: MPFR features1058099
-Node: MPFR On Parole1058552
-Ref: MPFR On Parole-Footnote-11059393
-Node: MPFR Intro1059552
-Node: FP Math Caution1061236
-Ref: FP Math Caution-Footnote-11062308
-Node: Inexactness of computations1062681
-Node: Inexact representation1063712
-Node: Comparing FP Values1065093
-Node: Errors accumulate1066351
-Node: Strange values1067816
-Ref: Strange values-Footnote-11070470
-Node: Getting Accuracy1070575
-Node: Try To Round1073312
-Node: Setting precision1074219
-Ref: table-predefined-precision-strings1074924
-Node: Setting the rounding mode1076808
-Ref: table-gawk-rounding-modes1077190
-Ref: Setting the rounding mode-Footnote-11081242
-Node: Arbitrary Precision Integers1081425
-Ref: Arbitrary Precision Integers-Footnote-11084635
-Node: Checking for MPFR1084788
-Node: POSIX Floating Point Problems1086278
-Ref: POSIX Floating Point Problems-Footnote-11091098
-Node: Floating point summary1091136
-Node: Dynamic Extensions1093392
-Node: Extension Intro1094989
-Node: Plugin License1096291
-Node: Extension Mechanism Outline1097104
-Ref: figure-load-extension1097555
-Ref: figure-register-new-function1099133
-Ref: figure-call-new-function1100242
-Node: Extension API Description1102357
-Node: Extension API Functions Introduction1104086
-Ref: table-api-std-headers1105980
-Node: General Data Types1110421
-Ref: General Data Types-Footnote-11119567
-Node: Memory Allocation Functions1119870
-Ref: Memory Allocation Functions-Footnote-11124587
-Node: Constructor Functions1124686
-Node: API Ownership of MPFR and GMP Values1128587
-Node: Registration Functions1130140
-Node: Extension Functions1130844
-Node: Exit Callback Functions1136418
-Node: Extension Version String1137732
-Node: Input Parsers1138427
-Node: Output Wrappers1153046
-Node: Two-way processors1157888
-Node: Printing Messages1160241
-Ref: Printing Messages-Footnote-11161452
-Node: Updating ERRNO1161605
-Node: Requesting Values1162404
-Ref: table-value-types-returned1163157
-Node: Accessing Parameters1165216
-Node: Symbol Table Access1166497
-Node: Symbol table by name1167009
-Ref: Symbol table by name-Footnote-11170210
-Node: Symbol table by cookie1170342
-Ref: Symbol table by cookie-Footnote-11174611
-Node: Cached values1174675
-Ref: Cached values-Footnote-11178307
-Node: Array Manipulation1178464
-Ref: Array Manipulation-Footnote-11179563
-Node: Array Data Types1179600
-Ref: Array Data Types-Footnote-11182418
-Node: Array Functions1182514
-Node: Flattening Arrays1187543
-Node: Creating Arrays1194591
-Node: Redirection API1199433
-Node: Extension API Variables1202450
-Node: Extension Versioning1203173
-Ref: gawk-api-version1203602
-Node: Extension GMP/MPFR Versioning1205389
-Node: Extension API Informational Variables1207093
-Node: Extension API Boilerplate1208346
-Node: Changes from API V11212476
-Node: Finding Extensions1214108
-Node: Extension Example1214683
-Node: Internal File Description1215505
-Node: Internal File Ops1219797
-Ref: Internal File Ops-Footnote-11231347
-Node: Using Internal File Ops1231495
-Ref: Using Internal File Ops-Footnote-11233928
-Node: Extension Samples1234206
-Node: Extension Sample File Functions1235775
-Node: Extension Sample Fnmatch1243900
-Node: Extension Sample Fork1245495
-Node: Extension Sample Inplace1246771
-Node: Extension Sample Ord1250873
-Node: Extension Sample Readdir1251749
-Ref: table-readdir-file-types1252538
-Node: Extension Sample Revout1253894
-Node: Extension Sample Rev2way1254491
-Node: Extension Sample Read write array1255243
-Node: Extension Sample Readfile1258517
-Node: Extension Sample Time1259648
-Node: Extension Sample API Tests1261648
-Node: gawkextlib1262156
-Node: Extension summary1265188
-Node: Extension Exercises1269036
-Node: Language History1270306
-Node: V7/SVR3.11272018
-Node: SVR41274368
-Node: POSIX1275900
-Node: BTL1277325
-Node: POSIX/GNU1278092
-Ref: Gawk Extension Functions1281482
-Node: Feature History1284906
-Node: Common Extensions1304747
-Node: Ranges and Locales1306222
-Ref: Ranges and Locales-Footnote-11311007
-Ref: Ranges and Locales-Footnote-21311034
-Ref: Ranges and Locales-Footnote-31311269
-Node: Contributors1311492
-Node: History summary1317683
-Node: Installation1319125
-Node: Gawk Distribution1320089
-Node: Getting1320581
-Node: Extracting1321580
-Node: Distribution contents1323286
-Node: Unix Installation1331176
-Node: Quick Installation1331996
-Node: Compiling with MPFR1334536
-Node: Shell Startup Files1335242
-Node: Additional Configuration Options1336399
-Node: Configuration Philosophy1338782
-Node: Compiling from Git1341282
-Node: Building the Documentation1341841
-Node: Non-Unix Installation1343253
-Node: PC Installation1343729
-Node: PC Binary Installation1344598
-Node: PC Compiling1345491
-Node: PC Using1346669
-Node: Cygwin1350385
-Node: MSYS1351637
-Node: OpenVMS Installation1352263
-Node: OpenVMS Compilation1352944
-Ref: OpenVMS Compilation-Footnote-11354427
-Node: OpenVMS Dynamic Extensions1354485
-Node: OpenVMS Installation Details1356121
-Node: OpenVMS Running1358552
-Node: OpenVMS GNV1362689
-Node: Bugs1363444
-Node: Bug definition1364364
-Node: Bug address1367965
-Node: Usenet1371534
-Node: Performance bugs1372747
-Node: Asking for help1375751
-Node: Maintainers1377738
-Node: Other Versions1378765
-Node: Installation summary1388369
-Node: Notes1389751
-Node: Compatibility Mode1390561
-Node: Additions1391383
-Node: Accessing The Source1392328
-Node: Adding Code1393859
-Node: New Ports1400970
-Node: Derived Files1405473
-Ref: Derived Files-Footnote-11411284
-Ref: Derived Files-Footnote-21411319
-Ref: Derived Files-Footnote-31411930
-Node: Future Extensions1412044
-Node: Implementation Limitations1412714
-Node: Extension Design1413956
-Node: Old Extension Problems1415116
-Ref: Old Extension Problems-Footnote-11416688
-Node: Extension New Mechanism Goals1416749
-Ref: Extension New Mechanism Goals-Footnote-11420219
-Node: Extension Other Design Decisions1420420
-Node: Extension Future Growth1422617
-Node: Notes summary1423237
-Node: Basic Concepts1424447
-Node: Basic High Level1425132
-Ref: figure-general-flow1425414
-Ref: figure-process-flow1426116
-Ref: Basic High Level-Footnote-11429486
-Node: Basic Data Typing1429675
-Node: Glossary1433083
-Node: Copying1465961
-Node: GNU Free Documentation License1503519
-Node: Index1528642
++Ref: Splitting By Content-Footnote-1273306
++Node: More CSV273469
++Node: FS versus FPAT275545
++Node: Testing field creation276745
++Node: Multiple Line278519
++Node: Getline284988
++Node: Plain Getline287576
++Node: Getline/Variable290224
++Node: Getline/File291420
++Node: Getline/Variable/File292868
++Ref: Getline/Variable/File-Footnote-1294513
++Node: Getline/Pipe294609
++Node: Getline/Variable/Pipe297417
++Node: Getline/Coprocess298600
++Node: Getline/Variable/Coprocess299923
++Node: Getline Notes300689
++Node: Getline Summary304666
++Ref: table-getline-variants305110
++Node: Read Timeout306014
++Ref: Read Timeout-Footnote-1309976
++Node: Retrying Input310034
++Node: Command-line directories311301
++Node: Input Summary312239
++Node: Input Exercises315619
++Node: Printing316057
++Node: Print318000
++Node: Print Examples319501
++Node: Output Separators322346
++Node: OFMT324453
++Node: Printf326166
++Node: Basic Printf326971
++Node: Control Letters328606
++Node: Format Modifiers334052
++Node: Printf Examples340324
++Node: Redirection342865
++Node: Special FD350637
++Ref: Special FD-Footnote-1353935
++Node: Special Files354013
++Node: Other Inherited Files354642
++Node: Special Network355707
++Node: Special Caveats356595
++Node: Close Files And Pipes357578
++Ref: Close Files And Pipes-Footnote-1363702
++Node: Close Return Value363850
++Ref: table-close-pipe-return-values365121
++Ref: Close Return Value-Footnote-1365952
++Node: Noflush366108
++Node: Nonfatal367616
++Node: Output Summary370031
++Node: Output Exercises371317
++Node: Expressions372008
++Node: Values373208
++Node: Constants373886
++Node: Scalar Constants374581
++Ref: Scalar Constants-Footnote-1377157
++Ref: Scalar Constants-Footnote-2377407
++Node: Nondecimal-numbers377487
++Node: Regexp Constants380600
++Node: Using Constant Regexps381146
++Node: Standard Regexp Constants381792
++Node: Strong Regexp Constants385088
++Node: Variables388931
++Node: Using Variables389596
++Node: Assignment Options391570
++Node: Conversion394121
++Node: Strings And Numbers394653
++Ref: Strings And Numbers-Footnote-1397863
++Node: Locale influences conversions397972
++Ref: table-locale-affects400810
++Node: All Operators401452
++Node: Arithmetic Ops402093
++Node: Concatenation404916
++Ref: Concatenation-Footnote-1407852
++Node: Assignment Ops407971
++Ref: table-assign-ops413098
++Node: Increment Ops414479
++Node: Truth Values and Conditions418070
++Node: Truth Values419164
++Node: Typing and Comparison420244
++Node: Variable Typing421076
++Ref: Variable Typing-Footnote-1427720
++Ref: Variable Typing-Footnote-2427800
++Node: Comparison Operators427881
++Ref: table-relational-ops428308
++Node: POSIX String Comparison431984
++Ref: POSIX String Comparison-Footnote-1433741
++Ref: POSIX String Comparison-Footnote-2433884
++Node: Boolean Ops433968
++Ref: Boolean Ops-Footnote-1438642
++Node: Conditional Exp438738
++Node: Function Calls440518
++Node: Precedence444465
++Node: Locales448328
++Node: Expressions Summary450004
++Node: Patterns and Actions452659
++Node: Pattern Overview453795
++Node: Regexp Patterns455520
++Node: Expression Patterns456066
++Node: Ranges459971
++Node: BEGIN/END463145
++Node: Using BEGIN/END463954
++Ref: Using BEGIN/END-Footnote-1466862
++Node: I/O And BEGIN/END466972
++Node: BEGINFILE/ENDFILE469454
++Node: Empty472884
++Node: Using Shell Variables473201
++Node: Action Overview475537
++Node: Statements477973
++Node: If Statement479869
++Node: While Statement481432
++Node: Do Statement483520
++Node: For Statement484704
++Node: Switch Statement488059
++Node: Break Statement490608
++Node: Continue Statement492800
++Node: Next Statement494731
++Node: Nextfile Statement497210
++Node: Exit Statement500063
++Node: Built-in Variables502590
++Node: User-modified503767
++Node: Auto-set511974
++Ref: Auto-set-Footnote-1530058
++Ref: Auto-set-Footnote-2530276
++Node: ARGC and ARGV530332
++Node: Pattern Action Summary534761
++Node: Arrays537367
++Node: Array Basics538740
++Node: Array Intro539588
++Ref: figure-array-elements541599
++Ref: Array Intro-Footnote-1544452
++Node: Reference to Elements544584
++Node: Assigning Elements547104
++Node: Array Example547599
++Node: Scanning an Array549561
++Node: Controlling Scanning552656
++Ref: Controlling Scanning-Footnote-1559291
++Node: Numeric Array Subscripts559615
++Node: Uninitialized Subscripts561883
++Node: Delete563556
++Ref: Delete-Footnote-1566368
++Node: Multidimensional566425
++Node: Multiscanning569628
++Node: Arrays of Arrays571295
++Node: Arrays Summary575599
++Node: Functions577786
++Node: Built-in578918
++Node: Calling Built-in580107
++Node: Boolean Functions582147
++Node: Numeric Functions582709
++Ref: Numeric Functions-Footnote-1586894
++Ref: Numeric Functions-Footnote-2587577
++Ref: Numeric Functions-Footnote-3587629
++Node: String Functions587905
++Ref: String Functions-Footnote-1614356
++Ref: String Functions-Footnote-2614488
++Ref: String Functions-Footnote-3614744
++Node: Gory Details614831
++Ref: table-sub-escapes616840
++Ref: table-sub-proposed618471
++Ref: table-posix-sub619966
++Ref: table-gensub-escapes621639
++Ref: Gory Details-Footnote-1622558
++Node: I/O Functions622712
++Ref: table-system-return-values629388
++Ref: I/O Functions-Footnote-1631550
++Ref: I/O Functions-Footnote-2631698
++Node: Time Functions631818
++Ref: Time Functions-Footnote-1643530
++Ref: Time Functions-Footnote-2643598
++Ref: Time Functions-Footnote-3643760
++Ref: Time Functions-Footnote-4643871
++Ref: Time Functions-Footnote-5643987
++Ref: Time Functions-Footnote-6644214
++Node: Bitwise Functions644492
++Ref: table-bitwise-ops645090
++Ref: Bitwise Functions-Footnote-1651332
++Ref: Bitwise Functions-Footnote-2651509
++Node: Type Functions651704
++Node: I18N Functions653875
++Node: User-defined655610
++Node: Definition Syntax656356
++Ref: Definition Syntax-Footnote-1662174
++Node: Function Example662249
++Ref: Function Example-Footnote-1665228
++Node: Function Calling665250
++Node: Calling A Function665842
++Node: Variable Scope666812
++Node: Pass By Value/Reference669866
++Node: Function Caveats672594
++Ref: Function Caveats-Footnote-1674685
++Node: Return Statement674805
++Node: Dynamic Typing677837
++Node: Dynamic Typing Awk678415
++Node: Dynamic Typing Gawk680553
++Node: Indirect Calls683923
++Node: Functions Summary695060
++Node: Library Functions698026
++Ref: Library Functions-Footnote-1701574
++Ref: Library Functions-Footnote-2701719
++Node: Library Names701894
++Ref: Library Names-Footnote-1705665
++Ref: Library Names-Footnote-2705892
++Node: General Functions705986
++Node: Strtonum Function707256
++Node: Assert Function710338
++Node: Round Function713788
++Node: Cliff Random Function715360
++Node: Ordinal Functions716384
++Ref: Ordinal Functions-Footnote-1719487
++Ref: Ordinal Functions-Footnote-2719739
++Node: Join Function719953
++Ref: Join Function-Footnote-1721751
++Node: Getlocaltime Function721955
++Node: Readfile Function725729
++Node: Shell Quoting727758
++Node: Isnumeric Function729214
++Node: To CSV Function730650
++Node: Data File Management732742
++Node: Filetrans Function733374
++Node: Rewind Function737650
++Node: File Checking739621
++Ref: File Checking-Footnote-1740987
++Node: Empty Files741192
++Node: Ignoring Assigns743255
++Node: Getopt Function744829
++Ref: Getopt Function-Footnote-1760647
++Node: Passwd Functions760859
++Ref: Passwd Functions-Footnote-1769994
++Node: Group Functions770082
++Ref: Group Functions-Footnote-1778206
++Node: Walking Arrays778417
++Node: Library Functions Summary781463
++Node: Library Exercises782883
++Node: Sample Programs783368
++Node: Running Examples784150
++Node: Clones784902
++Node: Cut Program786170
++Node: Egrep Program796594
++Node: Id Program805899
++Node: Split Program815991
++Ref: Split Program-Footnote-1826204
++Node: Tee Program826389
++Node: Uniq Program829295
++Node: Wc Program837155
++Node: Bytes vs. Characters837550
++Node: Using extensions839150
++Node: wc program839928
++Node: Miscellaneous Programs844921
++Node: Dupword Program846146
++Node: Alarm Program848195
++Node: Translate Program853098
++Ref: Translate Program-Footnote-1857807
++Node: Labels Program858085
++Ref: Labels Program-Footnote-1861520
++Node: Word Sorting861604
++Node: History Sorting865778
++Node: Extract Program868051
++Node: Simple Sed876304
++Node: Igawk Program879514
++Ref: Igawk Program-Footnote-1894724
++Ref: Igawk Program-Footnote-2894930
++Ref: Igawk Program-Footnote-3895060
++Node: Anagram Program895187
++Node: Signature Program898273
++Node: Programs Summary899523
++Node: Programs Exercises900777
++Ref: Programs Exercises-Footnote-1905079
++Node: Advanced Features905165
++Node: Nondecimal Data907646
++Node: Boolean Typed Values909276
++Node: Array Sorting911233
++Node: Controlling Array Traversal911962
++Ref: Controlling Array Traversal-Footnote-1920465
++Node: Array Sorting Functions920587
++Ref: Array Sorting Functions-Footnote-1926684
++Node: Two-way I/O926892
++Ref: Two-way I/O-Footnote-1934863
++Ref: Two-way I/O-Footnote-2935054
++Node: TCP/IP Networking935136
++Node: Profiling938304
++Node: Persistent Memory947974
++Ref: Persistent Memory-Footnote-1957546
++Node: Extension Philosophy957677
++Node: Advanced Features Summary959204
++Node: Internationalization961470
++Node: I18N and L10N963172
++Node: Explaining gettext963867
++Ref: Explaining gettext-Footnote-1970003
++Ref: Explaining gettext-Footnote-2970196
++Node: Programmer i18n970361
++Ref: Programmer i18n-Footnote-1975473
++Node: Translator i18n975522
++Node: String Extraction976352
++Ref: String Extraction-Footnote-1977528
++Node: Printf Ordering977626
++Ref: Printf Ordering-Footnote-1980484
++Node: I18N Portability980552
++Ref: I18N Portability-Footnote-1983112
++Node: I18N Example983179
++Ref: I18N Example-Footnote-1986573
++Ref: I18N Example-Footnote-2986646
++Node: Gawk I18N986763
++Node: I18N Summary987417
++Node: Debugger988814
++Node: Debugging989834
++Node: Debugging Concepts990283
++Node: Debugging Terms992100
++Node: Awk Debugging994703
++Ref: Awk Debugging-Footnote-1995676
++Node: Sample Debugging Session995812
++Node: Debugger Invocation996362
++Node: Finding The Bug997987
++Node: List of Debugger Commands1004619
++Node: Breakpoint Control1005996
++Node: Debugger Execution Control1009818
++Node: Viewing And Changing Data1013292
++Node: Execution Stack1017026
++Node: Debugger Info1018707
++Node: Miscellaneous Debugger Commands1023002
++Node: Readline Support1028243
++Node: Limitations1029187
++Node: Debugging Summary1031811
++Node: Namespaces1033110
++Node: Global Namespace1034237
++Node: Qualified Names1035671
++Node: Default Namespace1036706
++Node: Changing The Namespace1037479
++Node: Naming Rules1039161
++Node: Internal Name Management1041116
++Node: Namespace Example1042186
++Node: Namespace And Features1044763
++Node: Namespace Summary1046218
++Node: Arbitrary Precision Arithmetic1047729
++Node: Computer Arithmetic1049248
++Ref: table-numeric-ranges1053173
++Ref: table-floating-point-ranges1053670
++Ref: Computer Arithmetic-Footnote-11054328
++Node: Math Definitions1054385
++Ref: table-ieee-formats1057417
++Node: MPFR features1057990
++Node: MPFR On Parole1058443
++Ref: MPFR On Parole-Footnote-11059284
++Node: MPFR Intro1059443
++Node: FP Math Caution1061127
++Ref: FP Math Caution-Footnote-11062199
++Node: Inexactness of computations1062572
++Node: Inexact representation1063603
++Node: Comparing FP Values1064984
++Node: Errors accumulate1066242
++Node: Strange values1067707
++Ref: Strange values-Footnote-11070361
++Node: Getting Accuracy1070466
++Node: Try To Round1073203
++Node: Setting precision1074110
++Ref: table-predefined-precision-strings1074815
++Node: Setting the rounding mode1076699
++Ref: table-gawk-rounding-modes1077081
++Ref: Setting the rounding mode-Footnote-11081133
++Node: Arbitrary Precision Integers1081316
++Ref: Arbitrary Precision Integers-Footnote-11084526
++Node: Checking for MPFR1084679
++Node: POSIX Floating Point Problems1086169
++Ref: POSIX Floating Point Problems-Footnote-11090989
++Node: Floating point summary1091027
++Node: Dynamic Extensions1093283
++Node: Extension Intro1094880
++Node: Plugin License1096182
++Node: Extension Mechanism Outline1096995
++Ref: figure-load-extension1097446
++Ref: figure-register-new-function1099024
++Ref: figure-call-new-function1100133
++Node: Extension API Description1102248
++Node: Extension API Functions Introduction1103977
++Ref: table-api-std-headers1105871
++Node: General Data Types1110312
++Ref: General Data Types-Footnote-11119458
++Node: Memory Allocation Functions1119761
++Ref: Memory Allocation Functions-Footnote-11124478
++Node: Constructor Functions1124577
++Node: API Ownership of MPFR and GMP Values1128478
++Node: Registration Functions1130031
++Node: Extension Functions1130735
++Node: Exit Callback Functions1136309
++Node: Extension Version String1137623
++Node: Input Parsers1138318
++Node: Output Wrappers1152937
++Node: Two-way processors1157779
++Node: Printing Messages1160132
++Ref: Printing Messages-Footnote-11161343
++Node: Updating ERRNO1161496
++Node: Requesting Values1162295
++Ref: table-value-types-returned1163048
++Node: Accessing Parameters1165107
++Node: Symbol Table Access1166388
++Node: Symbol table by name1166900
++Ref: Symbol table by name-Footnote-11170101
++Node: Symbol table by cookie1170233
++Ref: Symbol table by cookie-Footnote-11174502
++Node: Cached values1174566
++Ref: Cached values-Footnote-11178198
++Node: Array Manipulation1178355
++Ref: Array Manipulation-Footnote-11179454
++Node: Array Data Types1179491
++Ref: Array Data Types-Footnote-11182309
++Node: Array Functions1182405
++Node: Flattening Arrays1187434
++Node: Creating Arrays1194482
++Node: Redirection API1199324
++Node: Extension API Variables1202341
++Node: Extension Versioning1203064
++Ref: gawk-api-version1203493
++Node: Extension GMP/MPFR Versioning1205280
++Node: Extension API Informational Variables1206984
++Node: Extension API Boilerplate1208237
++Node: Changes from API V11212367
++Node: Finding Extensions1213999
++Node: Extension Example1214574
++Node: Internal File Description1215396
++Node: Internal File Ops1219688
++Ref: Internal File Ops-Footnote-11231238
++Node: Using Internal File Ops1231386
++Ref: Using Internal File Ops-Footnote-11233819
++Node: Extension Samples1234097
++Node: Extension Sample File Functions1235666
++Node: Extension Sample Fnmatch1243791
++Node: Extension Sample Fork1245386
++Node: Extension Sample Inplace1246662
++Node: Extension Sample Ord1250764
++Node: Extension Sample Readdir1251640
++Ref: table-readdir-file-types1252429
++Node: Extension Sample Revout1253785
++Node: Extension Sample Rev2way1254382
++Node: Extension Sample Read write array1255134
++Node: Extension Sample Readfile1258408
++Node: Extension Sample Time1259539
++Node: Extension Sample API Tests1261539
++Node: gawkextlib1262047
++Node: Extension summary1265079
++Node: Extension Exercises1268927
++Node: Language History1270197
++Node: V7/SVR3.11271909
++Node: SVR41274259
++Node: POSIX1275791
++Node: BTL1277216
++Node: POSIX/GNU1277983
++Ref: Gawk Extension Functions1281373
++Node: Feature History1284797
++Node: Common Extensions1304638
++Node: Ranges and Locales1306113
++Ref: Ranges and Locales-Footnote-11310898
++Ref: Ranges and Locales-Footnote-21310925
++Ref: Ranges and Locales-Footnote-31311160
++Node: Contributors1311383
++Node: History summary1317574
++Node: Installation1319016
++Node: Gawk Distribution1319980
++Node: Getting1320472
++Node: Extracting1321471
++Node: Distribution contents1323177
++Node: Unix Installation1331067
++Node: Quick Installation1331887
++Node: Compiling with MPFR1334427
++Node: Shell Startup Files1335133
++Node: Additional Configuration Options1336290
++Node: Configuration Philosophy1338673
++Node: Compiling from Git1341173
++Node: Building the Documentation1341732
++Node: Non-Unix Installation1343144
++Node: PC Installation1343620
++Node: PC Binary Installation1344489
++Node: PC Compiling1345382
++Node: PC Using1346560
++Node: Cygwin1350276
++Node: MSYS1351528
++Node: OpenVMS Installation1352154
++Node: OpenVMS Compilation1352835
++Ref: OpenVMS Compilation-Footnote-11354318
++Node: OpenVMS Dynamic Extensions1354376
++Node: OpenVMS Installation Details1356012
++Node: OpenVMS Running1358443
++Node: OpenVMS GNV1362580
++Node: Bugs1363335
++Node: Bug definition1364255
++Node: Bug address1367856
++Node: Usenet1371425
++Node: Performance bugs1372638
++Node: Asking for help1375642
++Node: Maintainers1377629
++Node: Other Versions1378656
++Node: Installation summary1388260
++Node: Notes1389642
++Node: Compatibility Mode1390452
++Node: Additions1391274
++Node: Accessing The Source1392219
++Node: Adding Code1393750
++Node: New Ports1400861
++Node: Derived Files1405364
++Ref: Derived Files-Footnote-11411175
++Ref: Derived Files-Footnote-21411210
++Ref: Derived Files-Footnote-31411821
++Node: Future Extensions1411935
++Node: Implementation Limitations1412605
++Node: Extension Design1413847
++Node: Old Extension Problems1415007
++Ref: Old Extension Problems-Footnote-11416579
++Node: Extension New Mechanism Goals1416640
++Ref: Extension New Mechanism Goals-Footnote-11420110
++Node: Extension Other Design Decisions1420311
++Node: Extension Future Growth1422508
++Node: Notes summary1423128
++Node: Basic Concepts1424338
++Node: Basic High Level1425023
++Ref: figure-general-flow1425305
++Ref: figure-process-flow1426007
++Ref: Basic High Level-Footnote-11429377
++Node: Basic Data Typing1429566
++Node: Glossary1432974
++Node: Copying1465852
++Node: GNU Free Documentation License1503410
++Node: Index1528533
End Tag Table
http://git.sv.gnu.org/cgit/gawk.git/commit/?id=32d0176354bff1de4e2d4a6dbe7b73a40524fdb7
commit 32d0176354bff1de4e2d4a6dbe7b73a40524fdb7
Merge: 2584dcc1 7a521fe4
Author: Arnold D. Robbins <arnold@skeeve.com>
Date: Mon Aug 12 06:39:44 2024 +0300
Merge branch 'gawk-5.3-stable' into stable/fpat-doc
http://git.sv.gnu.org/cgit/gawk.git/commit/?id=2584dcc110c4d2f5dcece14a39f5bfbe8cfae2b7
commit 2584dcc110c4d2f5dcece14a39f5bfbe8cfae2b7
Merge: 2425ac76 5d0ec572
Author: Arnold D. Robbins <arnold@skeeve.com>
Date: Sat Aug 10 21:12:21 2024 +0300
Merge branch 'gawk-5.3-stable' into stable/fpat-doc
http://git.sv.gnu.org/cgit/gawk.git/commit/?id=2425ac76447a0965098315266f6178f7a34b575a
commit 2425ac76447a0965098315266f6178f7a34b575a
Merge: b0406af3 a3e53973
Author: Arnold D. Robbins <arnold@skeeve.com>
Date: Fri Aug 9 08:49:02 2024 +0300
Merge branch 'gawk-5.3-stable' into stable/fpat-doc
http://git.sv.gnu.org/cgit/gawk.git/commit/?id=b0406af3bfbc6b7fc1d039077ff6743e8a8623ea
commit b0406af3bfbc6b7fc1d039077ff6743e8a8623ea
Merge: d05df39e c6e97e72
Author: Arnold D. Robbins <arnold@skeeve.com>
Date: Thu Aug 8 19:49:44 2024 +0300
Merge branch 'gawk-5.3-stable' into stable/fpat-doc
http://git.sv.gnu.org/cgit/gawk.git/commit/?id=d05df39e2ddc2b150d0572238120ef52ffebc1c0
commit d05df39e2ddc2b150d0572238120ef52ffebc1c0
Merge: 8f0bc2a5 891341aa
Author: Arnold D. Robbins <arnold@skeeve.com>
Date: Mon Aug 5 21:19:51 2024 +0300
Merge branch 'gawk-5.3-stable' into stable/fpat-doc
diff --cc doc/ChangeLog
index de56f7b6,7102717b..c609f25d
--- a/doc/ChangeLog
+++ b/doc/ChangeLog
@@@ -1,7 -1,7 +1,11 @@@
+ 2024-08-05 Arnold D. Robbins <arnold@skeeve.com>
+
+ * gawk.texi: Small consistency fix.
+
+2024-08-05 Stuart Ferguson <stuart.fergs@gmail.com>
+
+ * gawk.texi (Splitting By Content, More CSV): Reworked.
+
2024-07-30 Arnold D. Robbins <arnold@skeeve.com>
* gawk.texi: Small style edits.
diff --cc doc/gawk.info
index fd9d8529,644c33f4..6a99e029
--- a/doc/gawk.info
+++ b/doc/gawk.info
@@@ -39992,526 -39994,526 +39992,526 @@@ Node: Skipping intervening26588
Node: Allowing trailing data266686
Node: Fields with fixed data267747
Node: Splitting By Content269369
-Ref: Splitting By Content-Footnote-1273819
-Node: More CSV273982
-Node: FS versus FPAT275640
-Node: Testing field creation276840
-Node: Multiple Line278614
-Node: Getline285083
-Node: Plain Getline287671
-Node: Getline/Variable290319
-Node: Getline/File291515
-Node: Getline/Variable/File292963
-Ref: Getline/Variable/File-Footnote-1294608
-Node: Getline/Pipe294704
-Node: Getline/Variable/Pipe297512
-Node: Getline/Coprocess298695
-Node: Getline/Variable/Coprocess300018
-Node: Getline Notes300784
-Node: Getline Summary304761
-Ref: table-getline-variants305205
-Node: Read Timeout306109
-Ref: Read Timeout-Footnote-1310071
-Node: Retrying Input310129
-Node: Command-line directories311396
-Node: Input Summary312334
-Node: Input Exercises315714
-Node: Printing316152
-Node: Print318095
-Node: Print Examples319596
-Node: Output Separators322441
-Node: OFMT324548
-Node: Printf326261
-Node: Basic Printf327066
-Node: Control Letters328701
-Node: Format Modifiers334147
-Node: Printf Examples340419
-Node: Redirection342960
-Node: Special FD350732
-Ref: Special FD-Footnote-1354030
-Node: Special Files354108
-Node: Other Inherited Files354737
-Node: Special Network355802
-Node: Special Caveats356690
-Node: Close Files And Pipes357673
-Ref: Close Files And Pipes-Footnote-1363797
-Node: Close Return Value363945
-Ref: table-close-pipe-return-values365216
-Ref: Close Return Value-Footnote-1366047
-Node: Noflush366203
-Node: Nonfatal367711
-Node: Output Summary370126
-Node: Output Exercises371412
-Node: Expressions372103
-Node: Values373303
-Node: Constants373981
-Node: Scalar Constants374676
-Ref: Scalar Constants-Footnote-1377252
-Ref: Scalar Constants-Footnote-2377502
-Node: Nondecimal-numbers377582
-Node: Regexp Constants380695
-Node: Using Constant Regexps381241
-Node: Standard Regexp Constants381887
-Node: Strong Regexp Constants385183
-Node: Variables389026
-Node: Using Variables389691
-Node: Assignment Options391665
-Node: Conversion394216
-Node: Strings And Numbers394748
-Ref: Strings And Numbers-Footnote-1397958
-Node: Locale influences conversions398067
-Ref: table-locale-affects400905
-Node: All Operators401547
-Node: Arithmetic Ops402188
-Node: Concatenation405011
-Ref: Concatenation-Footnote-1407947
-Node: Assignment Ops408066
-Ref: table-assign-ops413193
-Node: Increment Ops414574
-Node: Truth Values and Conditions418165
-Node: Truth Values419259
-Node: Typing and Comparison420339
-Node: Variable Typing421171
-Ref: Variable Typing-Footnote-1427815
-Ref: Variable Typing-Footnote-2427895
-Node: Comparison Operators427976
-Ref: table-relational-ops428403
-Node: POSIX String Comparison432079
-Ref: POSIX String Comparison-Footnote-1433836
-Ref: POSIX String Comparison-Footnote-2433979
-Node: Boolean Ops434063
-Ref: Boolean Ops-Footnote-1438737
-Node: Conditional Exp438833
-Node: Function Calls440613
-Node: Precedence444560
-Node: Locales448423
-Node: Expressions Summary450099
-Node: Patterns and Actions452754
-Node: Pattern Overview453890
-Node: Regexp Patterns455615
-Node: Expression Patterns456161
-Node: Ranges460066
-Node: BEGIN/END463240
-Node: Using BEGIN/END464049
-Ref: Using BEGIN/END-Footnote-1466957
-Node: I/O And BEGIN/END467067
-Node: BEGINFILE/ENDFILE469549
-Node: Empty472979
-Node: Using Shell Variables473296
-Node: Action Overview475632
-Node: Statements478068
-Node: If Statement479964
-Node: While Statement481527
-Node: Do Statement483615
-Node: For Statement484799
-Node: Switch Statement488154
-Node: Break Statement490703
-Node: Continue Statement492895
-Node: Next Statement494826
-Node: Nextfile Statement497305
-Node: Exit Statement500158
-Node: Built-in Variables502685
-Node: User-modified503862
-Node: Auto-set512069
-Ref: Auto-set-Footnote-1530153
-Ref: Auto-set-Footnote-2530371
-Node: ARGC and ARGV530427
-Node: Pattern Action Summary534856
-Node: Arrays537462
-Node: Array Basics538835
-Node: Array Intro539683
-Ref: figure-array-elements541694
-Ref: Array Intro-Footnote-1544547
-Node: Reference to Elements544679
-Node: Assigning Elements547199
-Node: Array Example547694
-Node: Scanning an Array549656
-Node: Controlling Scanning552751
-Ref: Controlling Scanning-Footnote-1559386
-Node: Numeric Array Subscripts559710
-Node: Uninitialized Subscripts561978
-Node: Delete563651
-Ref: Delete-Footnote-1566463
-Node: Multidimensional566520
-Node: Multiscanning569723
-Node: Arrays of Arrays571390
-Node: Arrays Summary575694
-Node: Functions577881
-Node: Built-in579013
-Node: Calling Built-in580202
-Node: Boolean Functions582242
-Node: Numeric Functions582804
-Ref: Numeric Functions-Footnote-1586989
-Ref: Numeric Functions-Footnote-2587672
-Ref: Numeric Functions-Footnote-3587724
-Node: String Functions588000
-Ref: String Functions-Footnote-1614451
-Ref: String Functions-Footnote-2614583
-Ref: String Functions-Footnote-3614839
-Node: Gory Details614926
-Ref: table-sub-escapes616935
-Ref: table-sub-proposed618566
-Ref: table-posix-sub620061
-Ref: table-gensub-escapes621734
-Ref: Gory Details-Footnote-1622653
-Node: I/O Functions622807
-Ref: table-system-return-values629483
-Ref: I/O Functions-Footnote-1631645
-Ref: I/O Functions-Footnote-2631793
-Node: Time Functions631913
-Ref: Time Functions-Footnote-1643625
-Ref: Time Functions-Footnote-2643693
-Ref: Time Functions-Footnote-3643855
-Ref: Time Functions-Footnote-4643966
-Ref: Time Functions-Footnote-5644082
-Ref: Time Functions-Footnote-6644309
-Node: Bitwise Functions644587
-Ref: table-bitwise-ops645185
-Ref: Bitwise Functions-Footnote-1651427
-Ref: Bitwise Functions-Footnote-2651604
-Node: Type Functions651799
-Node: I18N Functions653970
-Node: User-defined655705
-Node: Definition Syntax656451
-Ref: Definition Syntax-Footnote-1662269
-Node: Function Example662344
-Ref: Function Example-Footnote-1665323
-Node: Function Calling665345
-Node: Calling A Function665937
-Node: Variable Scope666907
-Node: Pass By Value/Reference669961
-Node: Function Caveats672689
-Ref: Function Caveats-Footnote-1674780
-Node: Return Statement674900
-Node: Dynamic Typing677932
-Node: Dynamic Typing Awk678510
-Node: Dynamic Typing Gawk680648
-Node: Indirect Calls684018
-Node: Functions Summary695155
-Node: Library Functions698121
-Ref: Library Functions-Footnote-1701669
-Ref: Library Functions-Footnote-2701814
-Node: Library Names701989
-Ref: Library Names-Footnote-1705760
-Ref: Library Names-Footnote-2705987
-Node: General Functions706081
-Node: Strtonum Function707351
-Node: Assert Function710433
-Node: Round Function713883
-Node: Cliff Random Function715455
-Node: Ordinal Functions716479
-Ref: Ordinal Functions-Footnote-1719582
-Ref: Ordinal Functions-Footnote-2719834
-Node: Join Function720048
-Ref: Join Function-Footnote-1721846
-Node: Getlocaltime Function722050
-Node: Readfile Function725824
-Node: Shell Quoting727853
-Node: Isnumeric Function729309
-Node: To CSV Function730745
-Node: Data File Management732837
-Node: Filetrans Function733469
-Node: Rewind Function737745
-Node: File Checking739716
-Ref: File Checking-Footnote-1741082
-Node: Empty Files741287
-Node: Ignoring Assigns743350
-Node: Getopt Function744924
-Ref: Getopt Function-Footnote-1760742
-Node: Passwd Functions760954
-Ref: Passwd Functions-Footnote-1770089
-Node: Group Functions770177
-Ref: Group Functions-Footnote-1778301
-Node: Walking Arrays778512
-Node: Library Functions Summary781558
-Node: Library Exercises782978
-Node: Sample Programs783463
-Node: Running Examples784245
-Node: Clones784997
-Node: Cut Program786265
-Node: Egrep Program796689
-Node: Id Program805994
-Node: Split Program816086
-Ref: Split Program-Footnote-1826299
-Node: Tee Program826484
-Node: Uniq Program829390
-Node: Wc Program837250
-Node: Bytes vs. Characters837645
-Node: Using extensions839245
-Node: wc program840023
-Node: Miscellaneous Programs845016
-Node: Dupword Program846241
-Node: Alarm Program848290
-Node: Translate Program853193
-Ref: Translate Program-Footnote-1857902
-Node: Labels Program858180
-Ref: Labels Program-Footnote-1861615
-Node: Word Sorting861699
-Node: History Sorting865873
-Node: Extract Program868146
-Node: Simple Sed876399
-Node: Igawk Program879609
-Ref: Igawk Program-Footnote-1894819
-Ref: Igawk Program-Footnote-2895025
-Ref: Igawk Program-Footnote-3895155
-Node: Anagram Program895282
-Node: Signature Program898368
-Node: Programs Summary899618
-Node: Programs Exercises900872
-Ref: Programs Exercises-Footnote-1905174
-Node: Advanced Features905260
-Node: Nondecimal Data907741
-Node: Boolean Typed Values909371
-Node: Array Sorting911328
-Node: Controlling Array Traversal912057
-Ref: Controlling Array Traversal-Footnote-1920560
-Node: Array Sorting Functions920682
-Ref: Array Sorting Functions-Footnote-1926779
-Node: Two-way I/O926987
-Ref: Two-way I/O-Footnote-1934958
-Ref: Two-way I/O-Footnote-2935149
-Node: TCP/IP Networking935231
-Node: Profiling938399
-Node: Persistent Memory948069
-Ref: Persistent Memory-Footnote-1957641
-Node: Extension Philosophy957772
-Node: Advanced Features Summary959299
-Node: Internationalization961565
-Node: I18N and L10N963267
-Node: Explaining gettext963962
-Ref: Explaining gettext-Footnote-1970098
-Ref: Explaining gettext-Footnote-2970291
-Node: Programmer i18n970456
-Ref: Programmer i18n-Footnote-1975568
-Node: Translator i18n975617
-Node: String Extraction976447
-Ref: String Extraction-Footnote-1977623
-Node: Printf Ordering977721
-Ref: Printf Ordering-Footnote-1980579
-Node: I18N Portability980647
-Ref: I18N Portability-Footnote-1983207
-Node: I18N Example983274
-Ref: I18N Example-Footnote-1986668
-Ref: I18N Example-Footnote-2986741
-Node: Gawk I18N986858
-Node: I18N Summary987512
-Node: Debugger988909
-Node: Debugging989929
-Node: Debugging Concepts990378
-Node: Debugging Terms992195
-Node: Awk Debugging994798
-Ref: Awk Debugging-Footnote-1995771
-Node: Sample Debugging Session995907
-Node: Debugger Invocation996457
-Node: Finding The Bug998082
-Node: List of Debugger Commands1004714
-Node: Breakpoint Control1006091
-Node: Debugger Execution Control1009913
-Node: Viewing And Changing Data1013387
-Node: Execution Stack1017121
-Node: Debugger Info1018802
-Node: Miscellaneous Debugger Commands1023097
-Node: Readline Support1028338
-Node: Limitations1029282
-Node: Debugging Summary1031906
-Node: Namespaces1033205
-Node: Global Namespace1034332
-Node: Qualified Names1035766
-Node: Default Namespace1036801
-Node: Changing The Namespace1037574
-Node: Naming Rules1039256
-Node: Internal Name Management1041211
-Node: Namespace Example1042281
-Node: Namespace And Features1044858
-Node: Namespace Summary1046313
-Node: Arbitrary Precision Arithmetic1047824
-Node: Computer Arithmetic1049343
-Ref: table-numeric-ranges1053268
-Ref: table-floating-point-ranges1053765
-Ref: Computer Arithmetic-Footnote-11054423
-Node: Math Definitions1054480
-Ref: table-ieee-formats1057512
-Node: MPFR features1058085
-Node: MPFR On Parole1058538
-Ref: MPFR On Parole-Footnote-11059379
-Node: MPFR Intro1059538
-Node: FP Math Caution1061222
-Ref: FP Math Caution-Footnote-11062294
-Node: Inexactness of computations1062667
-Node: Inexact representation1063698
-Node: Comparing FP Values1065079
-Node: Errors accumulate1066337
-Node: Strange values1067802
-Ref: Strange values-Footnote-11070456
-Node: Getting Accuracy1070561
-Node: Try To Round1073298
-Node: Setting precision1074205
-Ref: table-predefined-precision-strings1074910
-Node: Setting the rounding mode1076794
-Ref: table-gawk-rounding-modes1077176
-Ref: Setting the rounding mode-Footnote-11081228
-Node: Arbitrary Precision Integers1081411
-Ref: Arbitrary Precision Integers-Footnote-11084621
-Node: Checking for MPFR1084774
-Node: POSIX Floating Point Problems1086264
-Ref: POSIX Floating Point Problems-Footnote-11091084
-Node: Floating point summary1091122
-Node: Dynamic Extensions1093378
-Node: Extension Intro1094975
-Node: Plugin License1096277
-Node: Extension Mechanism Outline1097090
-Ref: figure-load-extension1097541
-Ref: figure-register-new-function1099119
-Ref: figure-call-new-function1100228
-Node: Extension API Description1102343
-Node: Extension API Functions Introduction1104072
-Ref: table-api-std-headers1105966
-Node: General Data Types1110407
-Ref: General Data Types-Footnote-11119553
-Node: Memory Allocation Functions1119856
-Ref: Memory Allocation Functions-Footnote-11124573
-Node: Constructor Functions1124672
-Node: API Ownership of MPFR and GMP Values1128573
-Node: Registration Functions1130126
-Node: Extension Functions1130830
-Node: Exit Callback Functions1136404
-Node: Extension Version String1137718
-Node: Input Parsers1138413
-Node: Output Wrappers1153032
-Node: Two-way processors1157874
-Node: Printing Messages1160227
-Ref: Printing Messages-Footnote-11161438
-Node: Updating ERRNO1161591
-Node: Requesting Values1162390
-Ref: table-value-types-returned1163143
-Node: Accessing Parameters1165202
-Node: Symbol Table Access1166483
-Node: Symbol table by name1166995
-Ref: Symbol table by name-Footnote-11170196
-Node: Symbol table by cookie1170328
-Ref: Symbol table by cookie-Footnote-11174597
-Node: Cached values1174661
-Ref: Cached values-Footnote-11178293
-Node: Array Manipulation1178450
-Ref: Array Manipulation-Footnote-11179549
-Node: Array Data Types1179586
-Ref: Array Data Types-Footnote-11182404
-Node: Array Functions1182500
-Node: Flattening Arrays1187529
-Node: Creating Arrays1194577
-Node: Redirection API1199419
-Node: Extension API Variables1202436
-Node: Extension Versioning1203159
-Ref: gawk-api-version1203588
-Node: Extension GMP/MPFR Versioning1205375
-Node: Extension API Informational Variables1207079
-Node: Extension API Boilerplate1208332
-Node: Changes from API V11212462
-Node: Finding Extensions1214094
-Node: Extension Example1214669
-Node: Internal File Description1215491
-Node: Internal File Ops1219783
-Ref: Internal File Ops-Footnote-11231333
-Node: Using Internal File Ops1231481
-Ref: Using Internal File Ops-Footnote-11233912
-Node: Extension Samples1234190
-Node: Extension Sample File Functions1235759
-Node: Extension Sample Fnmatch1243884
-Node: Extension Sample Fork1245479
-Node: Extension Sample Inplace1246755
-Node: Extension Sample Ord1250857
-Node: Extension Sample Readdir1251733
-Ref: table-readdir-file-types1252522
-Node: Extension Sample Revout1253878
-Node: Extension Sample Rev2way1254475
-Node: Extension Sample Read write array1255227
-Node: Extension Sample Readfile1258501
-Node: Extension Sample Time1259632
-Node: Extension Sample API Tests1261632
-Node: gawkextlib1262140
-Node: Extension summary1265172
-Node: Extension Exercises1269020
-Node: Language History1270290
-Node: V7/SVR3.11272002
-Node: SVR41274352
-Node: POSIX1275884
-Node: BTL1277309
-Node: POSIX/GNU1278076
-Ref: Gawk Extension Functions1281466
-Node: Feature History1284890
-Node: Common Extensions1304731
-Node: Ranges and Locales1306206
-Ref: Ranges and Locales-Footnote-11310991
-Ref: Ranges and Locales-Footnote-21311018
-Ref: Ranges and Locales-Footnote-31311253
-Node: Contributors1311476
-Node: History summary1317667
-Node: Installation1319109
-Node: Gawk Distribution1320073
-Node: Getting1320565
-Node: Extracting1321564
-Node: Distribution contents1323270
-Node: Unix Installation1331160
-Node: Quick Installation1331980
-Node: Compiling with MPFR1334520
-Node: Shell Startup Files1335226
-Node: Additional Configuration Options1336383
-Node: Configuration Philosophy1338766
-Node: Compiling from Git1341266
-Node: Building the Documentation1341825
-Node: Non-Unix Installation1343237
-Node: PC Installation1343713
-Node: PC Binary Installation1344582
-Node: PC Compiling1345475
-Node: PC Using1346653
-Node: Cygwin1350369
-Node: MSYS1351621
-Node: OpenVMS Installation1352247
-Node: OpenVMS Compilation1352928
-Ref: OpenVMS Compilation-Footnote-11354411
-Node: OpenVMS Dynamic Extensions1354469
-Node: OpenVMS Installation Details1356105
-Node: OpenVMS Running1358536
-Node: OpenVMS GNV1362673
-Node: Bugs1363428
-Node: Bug definition1364348
-Node: Bug address1367949
-Node: Usenet1371518
-Node: Performance bugs1372731
-Node: Asking for help1375735
-Node: Maintainers1377722
-Node: Other Versions1378749
-Node: Installation summary1388353
-Node: Notes1389735
-Node: Compatibility Mode1390545
-Node: Additions1391367
-Node: Accessing The Source1392312
-Node: Adding Code1393843
-Node: New Ports1400954
-Node: Derived Files1405457
-Ref: Derived Files-Footnote-11411268
-Ref: Derived Files-Footnote-21411303
-Ref: Derived Files-Footnote-31411914
-Node: Future Extensions1412028
-Node: Implementation Limitations1412698
-Node: Extension Design1413940
-Node: Old Extension Problems1415100
-Ref: Old Extension Problems-Footnote-11416672
-Node: Extension New Mechanism Goals1416733
-Ref: Extension New Mechanism Goals-Footnote-11420203
-Node: Extension Other Design Decisions1420404
-Node: Extension Future Growth1422601
-Node: Notes summary1423221
-Node: Basic Concepts1424431
-Node: Basic High Level1425116
-Ref: figure-general-flow1425398
-Ref: figure-process-flow1426100
-Ref: Basic High Level-Footnote-11429470
-Node: Basic Data Typing1429659
-Node: Glossary1433067
-Node: Copying1465945
-Node: GNU Free Documentation License1503503
-Node: Index1528626
+Ref: Splitting By Content-Footnote-1273292
+Node: More CSV273455
+Node: FS versus FPAT275531
+Node: Testing field creation276731
+Node: Multiple Line278505
+Node: Getline284974
+Node: Plain Getline287562
+Node: Getline/Variable290210
+Node: Getline/File291406
+Node: Getline/Variable/File292854
+Ref: Getline/Variable/File-Footnote-1294499
+Node: Getline/Pipe294595
+Node: Getline/Variable/Pipe297403
+Node: Getline/Coprocess298586
+Node: Getline/Variable/Coprocess299909
+Node: Getline Notes300675
+Node: Getline Summary304652
+Ref: table-getline-variants305096
+Node: Read Timeout306000
+Ref: Read Timeout-Footnote-1309962
+Node: Retrying Input310020
+Node: Command-line directories311287
+Node: Input Summary312225
+Node: Input Exercises315605
+Node: Printing316043
+Node: Print317986
+Node: Print Examples319487
+Node: Output Separators322332
+Node: OFMT324439
+Node: Printf326152
+Node: Basic Printf326957
+Node: Control Letters328592
+Node: Format Modifiers334038
+Node: Printf Examples340310
+Node: Redirection342851
+Node: Special FD350623
+Ref: Special FD-Footnote-1353921
+Node: Special Files353999
+Node: Other Inherited Files354628
+Node: Special Network355693
+Node: Special Caveats356581
+Node: Close Files And Pipes357564
+Ref: Close Files And Pipes-Footnote-1363688
+Node: Close Return Value363836
+Ref: table-close-pipe-return-values365107
+Ref: Close Return Value-Footnote-1365938
+Node: Noflush366094
+Node: Nonfatal367602
+Node: Output Summary370017
+Node: Output Exercises371303
+Node: Expressions371994
+Node: Values373194
+Node: Constants373872
+Node: Scalar Constants374567
+Ref: Scalar Constants-Footnote-1377143
+Ref: Scalar Constants-Footnote-2377393
+Node: Nondecimal-numbers377473
+Node: Regexp Constants380586
+Node: Using Constant Regexps381132
+Node: Standard Regexp Constants381778
+Node: Strong Regexp Constants385074
+Node: Variables388917
+Node: Using Variables389582
+Node: Assignment Options391556
+Node: Conversion394107
+Node: Strings And Numbers394639
+Ref: Strings And Numbers-Footnote-1397849
+Node: Locale influences conversions397958
+Ref: table-locale-affects400796
+Node: All Operators401438
+Node: Arithmetic Ops402079
+Node: Concatenation404902
+Ref: Concatenation-Footnote-1407838
+Node: Assignment Ops407957
+Ref: table-assign-ops413084
+Node: Increment Ops414465
+Node: Truth Values and Conditions418056
+Node: Truth Values419150
+Node: Typing and Comparison420230
+Node: Variable Typing421062
+Ref: Variable Typing-Footnote-1427706
+Ref: Variable Typing-Footnote-2427786
+Node: Comparison Operators427867
+Ref: table-relational-ops428294
+Node: POSIX String Comparison431970
+Ref: POSIX String Comparison-Footnote-1433727
+Ref: POSIX String Comparison-Footnote-2433870
+Node: Boolean Ops433954
+Ref: Boolean Ops-Footnote-1438628
+Node: Conditional Exp438724
+Node: Function Calls440504
+Node: Precedence444451
+Node: Locales448314
+Node: Expressions Summary449990
+Node: Patterns and Actions452645
+Node: Pattern Overview453781
+Node: Regexp Patterns455506
+Node: Expression Patterns456052
+Node: Ranges459957
+Node: BEGIN/END463131
+Node: Using BEGIN/END463940
+Ref: Using BEGIN/END-Footnote-1466848
+Node: I/O And BEGIN/END466958
+Node: BEGINFILE/ENDFILE469440
+Node: Empty472870
+Node: Using Shell Variables473187
+Node: Action Overview475523
+Node: Statements477959
+Node: If Statement479855
+Node: While Statement481418
+Node: Do Statement483506
+Node: For Statement484690
+Node: Switch Statement488045
+Node: Break Statement490594
+Node: Continue Statement492786
+Node: Next Statement494717
+Node: Nextfile Statement497196
+Node: Exit Statement500049
+Node: Built-in Variables502576
+Node: User-modified503753
+Node: Auto-set511960
+Ref: Auto-set-Footnote-1530044
+Ref: Auto-set-Footnote-2530262
+Node: ARGC and ARGV530318
+Node: Pattern Action Summary534747
+Node: Arrays537353
+Node: Array Basics538726
+Node: Array Intro539574
+Ref: figure-array-elements541585
+Ref: Array Intro-Footnote-1544438
+Node: Reference to Elements544570
+Node: Assigning Elements547090
+Node: Array Example547585
+Node: Scanning an Array549547
+Node: Controlling Scanning552642
+Ref: Controlling Scanning-Footnote-1559277
+Node: Numeric Array Subscripts559601
+Node: Uninitialized Subscripts561869
+Node: Delete563542
+Ref: Delete-Footnote-1566354
+Node: Multidimensional566411
+Node: Multiscanning569614
+Node: Arrays of Arrays571281
+Node: Arrays Summary575585
+Node: Functions577772
+Node: Built-in578904
+Node: Calling Built-in580093
+Node: Boolean Functions582133
+Node: Numeric Functions582695
+Ref: Numeric Functions-Footnote-1586880
+Ref: Numeric Functions-Footnote-2587563
+Ref: Numeric Functions-Footnote-3587615
+Node: String Functions587891
+Ref: String Functions-Footnote-1614342
+Ref: String Functions-Footnote-2614474
+Ref: String Functions-Footnote-3614730
+Node: Gory Details614817
+Ref: table-sub-escapes616826
+Ref: table-sub-proposed618457
+Ref: table-posix-sub619952
+Ref: table-gensub-escapes621625
+Ref: Gory Details-Footnote-1622544
+Node: I/O Functions622698
+Ref: table-system-return-values629374
+Ref: I/O Functions-Footnote-1631536
+Ref: I/O Functions-Footnote-2631684
+Node: Time Functions631804
+Ref: Time Functions-Footnote-1643516
+Ref: Time Functions-Footnote-2643584
+Ref: Time Functions-Footnote-3643746
+Ref: Time Functions-Footnote-4643857
+Ref: Time Functions-Footnote-5643973
+Ref: Time Functions-Footnote-6644200
+Node: Bitwise Functions644478
+Ref: table-bitwise-ops645076
+Ref: Bitwise Functions-Footnote-1651318
+Ref: Bitwise Functions-Footnote-2651495
+Node: Type Functions651690
+Node: I18N Functions653861
+Node: User-defined655596
+Node: Definition Syntax656342
+Ref: Definition Syntax-Footnote-1662160
+Node: Function Example662235
+Ref: Function Example-Footnote-1665214
+Node: Function Calling665236
+Node: Calling A Function665828
+Node: Variable Scope666798
+Node: Pass By Value/Reference669852
+Node: Function Caveats672580
+Ref: Function Caveats-Footnote-1674671
+Node: Return Statement674791
+Node: Dynamic Typing677823
+Node: Dynamic Typing Awk678401
+Node: Dynamic Typing Gawk680539
+Node: Indirect Calls683909
+Node: Functions Summary695046
+Node: Library Functions698012
+Ref: Library Functions-Footnote-1701560
+Ref: Library Functions-Footnote-2701705
+Node: Library Names701880
+Ref: Library Names-Footnote-1705651
+Ref: Library Names-Footnote-2705878
+Node: General Functions705972
+Node: Strtonum Function707242
+Node: Assert Function710324
+Node: Round Function713774
+Node: Cliff Random Function715346
+Node: Ordinal Functions716370
+Ref: Ordinal Functions-Footnote-1719473
+Ref: Ordinal Functions-Footnote-2719725
+Node: Join Function719939
+Ref: Join Function-Footnote-1721737
+Node: Getlocaltime Function721941
+Node: Readfile Function725715
+Node: Shell Quoting727744
+Node: Isnumeric Function729200
+Node: To CSV Function730636
+Node: Data File Management732728
+Node: Filetrans Function733360
+Node: Rewind Function737636
+Node: File Checking739607
+Ref: File Checking-Footnote-1740973
+Node: Empty Files741178
+Node: Ignoring Assigns743241
+Node: Getopt Function744815
+Ref: Getopt Function-Footnote-1760633
+Node: Passwd Functions760845
+Ref: Passwd Functions-Footnote-1769980
+Node: Group Functions770068
+Ref: Group Functions-Footnote-1778192
+Node: Walking Arrays778403
+Node: Library Functions Summary781449
+Node: Library Exercises782869
+Node: Sample Programs783354
+Node: Running Examples784136
+Node: Clones784888
+Node: Cut Program786156
+Node: Egrep Program796580
+Node: Id Program805885
+Node: Split Program815977
+Ref: Split Program-Footnote-1826190
+Node: Tee Program826375
+Node: Uniq Program829281
+Node: Wc Program837141
+Node: Bytes vs. Characters837536
+Node: Using extensions839136
+Node: wc program839914
+Node: Miscellaneous Programs844907
+Node: Dupword Program846132
+Node: Alarm Program848181
+Node: Translate Program853084
+Ref: Translate Program-Footnote-1857793
+Node: Labels Program858071
+Ref: Labels Program-Footnote-1861506
+Node: Word Sorting861590
+Node: History Sorting865764
+Node: Extract Program868037
+Node: Simple Sed876290
+Node: Igawk Program879500
+Ref: Igawk Program-Footnote-1894710
+Ref: Igawk Program-Footnote-2894916
+Ref: Igawk Program-Footnote-3895046
+Node: Anagram Program895173
+Node: Signature Program898259
+Node: Programs Summary899509
+Node: Programs Exercises900763
+Ref: Programs Exercises-Footnote-1905065
+Node: Advanced Features905151
+Node: Nondecimal Data907632
+Node: Boolean Typed Values909262
+Node: Array Sorting911219
+Node: Controlling Array Traversal911948
+Ref: Controlling Array Traversal-Footnote-1920451
+Node: Array Sorting Functions920573
+Ref: Array Sorting Functions-Footnote-1926670
+Node: Two-way I/O926878
+Ref: Two-way I/O-Footnote-1934849
+Ref: Two-way I/O-Footnote-2935040
+Node: TCP/IP Networking935122
+Node: Profiling938290
+Node: Persistent Memory947960
+Ref: Persistent Memory-Footnote-1957532
+Node: Extension Philosophy957663
+Node: Advanced Features Summary959190
+Node: Internationalization961456
+Node: I18N and L10N963158
+Node: Explaining gettext963853
+Ref: Explaining gettext-Footnote-1969989
+Ref: Explaining gettext-Footnote-2970182
+Node: Programmer i18n970347
+Ref: Programmer i18n-Footnote-1975459
+Node: Translator i18n975508
+Node: String Extraction976338
+Ref: String Extraction-Footnote-1977514
+Node: Printf Ordering977612
+Ref: Printf Ordering-Footnote-1980470
+Node: I18N Portability980538
+Ref: I18N Portability-Footnote-1983098
+Node: I18N Example983165
+Ref: I18N Example-Footnote-1986559
+Ref: I18N Example-Footnote-2986632
+Node: Gawk I18N986749
+Node: I18N Summary987403
+Node: Debugger988800
+Node: Debugging989820
+Node: Debugging Concepts990269
+Node: Debugging Terms992086
+Node: Awk Debugging994689
+Ref: Awk Debugging-Footnote-1995662
+Node: Sample Debugging Session995798
+Node: Debugger Invocation996348
+Node: Finding The Bug997973
+Node: List of Debugger Commands1004605
+Node: Breakpoint Control1005982
+Node: Debugger Execution Control1009804
+Node: Viewing And Changing Data1013278
+Node: Execution Stack1017012
+Node: Debugger Info1018693
+Node: Miscellaneous Debugger Commands1022988
+Node: Readline Support1028229
+Node: Limitations1029173
+Node: Debugging Summary1031797
+Node: Namespaces1033096
+Node: Global Namespace1034223
+Node: Qualified Names1035657
+Node: Default Namespace1036692
+Node: Changing The Namespace1037465
+Node: Naming Rules1039147
+Node: Internal Name Management1041102
+Node: Namespace Example1042172
+Node: Namespace And Features1044749
+Node: Namespace Summary1046204
+Node: Arbitrary Precision Arithmetic1047715
+Node: Computer Arithmetic1049234
+Ref: table-numeric-ranges1053159
+Ref: table-floating-point-ranges1053656
+Ref: Computer Arithmetic-Footnote-11054314
+Node: Math Definitions1054371
+Ref: table-ieee-formats1057403
+Node: MPFR features1057976
+Node: MPFR On Parole1058429
+Ref: MPFR On Parole-Footnote-11059270
+Node: MPFR Intro1059429
+Node: FP Math Caution1061113
+Ref: FP Math Caution-Footnote-11062185
+Node: Inexactness of computations1062558
+Node: Inexact representation1063589
+Node: Comparing FP Values1064970
+Node: Errors accumulate1066228
+Node: Strange values1067693
+Ref: Strange values-Footnote-11070347
+Node: Getting Accuracy1070452
+Node: Try To Round1073189
+Node: Setting precision1074096
+Ref: table-predefined-precision-strings1074801
+Node: Setting the rounding mode1076685
+Ref: table-gawk-rounding-modes1077067
+Ref: Setting the rounding mode-Footnote-11081119
+Node: Arbitrary Precision Integers1081302
+Ref: Arbitrary Precision Integers-Footnote-11084512
+Node: Checking for MPFR1084665
+Node: POSIX Floating Point Problems1086155
+Ref: POSIX Floating Point Problems-Footnote-11090975
+Node: Floating point summary1091013
+Node: Dynamic Extensions1093269
+Node: Extension Intro1094866
+Node: Plugin License1096168
+Node: Extension Mechanism Outline1096981
+Ref: figure-load-extension1097432
+Ref: figure-register-new-function1099010
+Ref: figure-call-new-function1100119
+Node: Extension API Description1102234
+Node: Extension API Functions Introduction1103963
+Ref: table-api-std-headers1105857
+Node: General Data Types1110298
+Ref: General Data Types-Footnote-11119444
+Node: Memory Allocation Functions1119747
+Ref: Memory Allocation Functions-Footnote-11124464
+Node: Constructor Functions1124563
+Node: API Ownership of MPFR and GMP Values1128464
+Node: Registration Functions1130017
+Node: Extension Functions1130721
+Node: Exit Callback Functions1136295
+Node: Extension Version String1137609
+Node: Input Parsers1138304
+Node: Output Wrappers1152923
+Node: Two-way processors1157765
+Node: Printing Messages1160118
+Ref: Printing Messages-Footnote-11161329
+Node: Updating ERRNO1161482
+Node: Requesting Values1162281
+Ref: table-value-types-returned1163034
+Node: Accessing Parameters1165093
+Node: Symbol Table Access1166374
+Node: Symbol table by name1166886
+Ref: Symbol table by name-Footnote-11170087
+Node: Symbol table by cookie1170219
+Ref: Symbol table by cookie-Footnote-11174488
+Node: Cached values1174552
+Ref: Cached values-Footnote-11178184
+Node: Array Manipulation1178341
+Ref: Array Manipulation-Footnote-11179440
+Node: Array Data Types1179477
+Ref: Array Data Types-Footnote-11182295
+Node: Array Functions1182391
+Node: Flattening Arrays1187420
+Node: Creating Arrays1194468
+Node: Redirection API1199310
+Node: Extension API Variables1202327
+Node: Extension Versioning1203050
+Ref: gawk-api-version1203479
+Node: Extension GMP/MPFR Versioning1205266
+Node: Extension API Informational Variables1206970
+Node: Extension API Boilerplate1208223
+Node: Changes from API V11212353
+Node: Finding Extensions1213985
+Node: Extension Example1214560
+Node: Internal File Description1215382
+Node: Internal File Ops1219674
+Ref: Internal File Ops-Footnote-11231224
+Node: Using Internal File Ops1231372
+Ref: Using Internal File Ops-Footnote-11233803
+Node: Extension Samples1234081
+Node: Extension Sample File Functions1235650
+Node: Extension Sample Fnmatch1243775
+Node: Extension Sample Fork1245370
+Node: Extension Sample Inplace1246646
+Node: Extension Sample Ord1250748
+Node: Extension Sample Readdir1251624
+Ref: table-readdir-file-types1252413
+Node: Extension Sample Revout1253769
+Node: Extension Sample Rev2way1254366
+Node: Extension Sample Read write array1255118
+Node: Extension Sample Readfile1258392
+Node: Extension Sample Time1259523
+Node: Extension Sample API Tests1261523
+Node: gawkextlib1262031
+Node: Extension summary1265063
+Node: Extension Exercises1268911
+Node: Language History1270181
+Node: V7/SVR3.11271893
+Node: SVR41274243
+Node: POSIX1275775
+Node: BTL1277200
+Node: POSIX/GNU1277967
+Ref: Gawk Extension Functions1281357
+Node: Feature History1284781
+Node: Common Extensions1304622
+Node: Ranges and Locales1306097
+Ref: Ranges and Locales-Footnote-11310882
+Ref: Ranges and Locales-Footnote-21310909
+Ref: Ranges and Locales-Footnote-31311144
+Node: Contributors1311367
+Node: History summary1317558
+Node: Installation1319000
+Node: Gawk Distribution1319964
+Node: Getting1320456
+Node: Extracting1321455
+Node: Distribution contents1323161
+Node: Unix Installation1331051
+Node: Quick Installation1331871
+Node: Compiling with MPFR1334411
+Node: Shell Startup Files1335117
+Node: Additional Configuration Options1336274
+Node: Configuration Philosophy1338657
+Node: Compiling from Git1341157
+Node: Building the Documentation1341716
+Node: Non-Unix Installation1343128
+Node: PC Installation1343604
+Node: PC Binary Installation1344473
+Node: PC Compiling1345366
+Node: PC Using1346544
+Node: Cygwin1350260
+Node: MSYS1351512
+Node: OpenVMS Installation1352138
+Node: OpenVMS Compilation1352819
+Ref: OpenVMS Compilation-Footnote-11354302
+Node: OpenVMS Dynamic Extensions1354360
+Node: OpenVMS Installation Details1355996
+Node: OpenVMS Running1358427
+Node: OpenVMS GNV1362564
+Node: Bugs1363319
+Node: Bug definition1364239
+Node: Bug address1367840
+Node: Usenet1371409
+Node: Performance bugs1372622
- Node: Asking for help1375638
- Node: Maintainers1377625
- Node: Other Versions1378652
- Node: Installation summary1388256
- Node: Notes1389638
- Node: Compatibility Mode1390448
- Node: Additions1391270
- Node: Accessing The Source1392215
- Node: Adding Code1393746
- Node: New Ports1400857
- Node: Derived Files1405360
- Ref: Derived Files-Footnote-11411171
- Ref: Derived Files-Footnote-21411206
- Ref: Derived Files-Footnote-31411817
- Node: Future Extensions1411931
- Node: Implementation Limitations1412601
- Node: Extension Design1413843
- Node: Old Extension Problems1415003
- Ref: Old Extension Problems-Footnote-11416575
- Node: Extension New Mechanism Goals1416636
- Ref: Extension New Mechanism Goals-Footnote-11420106
- Node: Extension Other Design Decisions1420307
- Node: Extension Future Growth1422504
- Node: Notes summary1423124
- Node: Basic Concepts1424334
- Node: Basic High Level1425019
- Ref: figure-general-flow1425301
- Ref: figure-process-flow1426003
- Ref: Basic High Level-Footnote-11429373
- Node: Basic Data Typing1429562
- Node: Glossary1432970
- Node: Copying1465848
- Node: GNU Free Documentation License1503406
- Node: Index1528529
++Node: Asking for help1375626
++Node: Maintainers1377613
++Node: Other Versions1378640
++Node: Installation summary1388244
++Node: Notes1389626
++Node: Compatibility Mode1390436
++Node: Additions1391258
++Node: Accessing The Source1392203
++Node: Adding Code1393734
++Node: New Ports1400845
++Node: Derived Files1405348
++Ref: Derived Files-Footnote-11411159
++Ref: Derived Files-Footnote-21411194
++Ref: Derived Files-Footnote-31411805
++Node: Future Extensions1411919
++Node: Implementation Limitations1412589
++Node: Extension Design1413831
++Node: Old Extension Problems1414991
++Ref: Old Extension Problems-Footnote-11416563
++Node: Extension New Mechanism Goals1416624
++Ref: Extension New Mechanism Goals-Footnote-11420094
++Node: Extension Other Design Decisions1420295
++Node: Extension Future Growth1422492
++Node: Notes summary1423112
++Node: Basic Concepts1424322
++Node: Basic High Level1425007
++Ref: figure-general-flow1425289
++Ref: figure-process-flow1425991
++Ref: Basic High Level-Footnote-11429361
++Node: Basic Data Typing1429550
++Node: Glossary1432958
++Node: Copying1465836
++Node: GNU Free Documentation License1503394
++Node: Index1528517
End Tag Table
http://git.sv.gnu.org/cgit/gawk.git/commit/?id=8f0bc2a564b1fd83cc4eee8c6e75dd0a9dd1456f
commit 8f0bc2a564b1fd83cc4eee8c6e75dd0a9dd1456f
Author: Arnold D. Robbins <arnold@skeeve.com>
Date: Mon Aug 5 20:40:10 2024 +0300
Rework doc on FPAT and CSV.
diff --git a/doc/ChangeLog b/doc/ChangeLog
index 33e3a2b1..de56f7b6 100644
--- a/doc/ChangeLog
+++ b/doc/ChangeLog
@@ -1,3 +1,7 @@
+2024-08-05 Stuart Ferguson <stuart.fergs@gmail.com>
+
+ * gawk.texi (Splitting By Content, More CSV): Reworked.
+
2024-07-30 Arnold D. Robbins <arnold@skeeve.com>
* gawk.texi: Small style edits.
diff --git a/doc/gawk.info b/doc/gawk.info
index f996c356..fd9d8529 100644
--- a/doc/gawk.info
+++ b/doc/gawk.info
@@ -5791,37 +5791,41 @@ File: gawk.info, Node: Splitting By Content, Next:
Testing field creation, Pr
4.7 Defining Fields by Content
==============================
- NOTE: This whole section needs rewriting now that âgawkâ has
- built-in CSV parsing. Sigh.
-
* Menu:
* More CSV:: More on CSV files.
* FS versus FPAT:: A subtle difference.
- This minor node discusses an advanced feature of âgawkâ. If you are
-a novice âawkâ user, you might want to skip it on the first reading.
+This minor node discusses an advanced feature of âgawkâ. If you are a
+novice âawkâ user, you might want to skip it on the first reading.
Normally, when using âFSâ, âgawkâ defines the fields as the parts of
the record that occur in between each field separator. In other words,
âFSâ defines what a field _is not_, instead of what a field _is_.
-However, there are times when you really want to define the fields by
+However, there are times when we really want to define the fields by
what they are, and not by what they are not.
- The most notorious such case is comma-separated values (CSV) data.
-Many spreadsheet programs, for example, can export their data into text
-files, where each record is terminated with a newline, and fields are
-separated by commas. If commas only separated the data, there wouldn't
-be an issue. The problem comes when one of the fields contains an
-_embedded_ comma. In such cases, most programs embed the field in
-double quotes.(1) So, we might have data like this:
-
- Robbins,Arnold,"1234 A Pretty Street, NE",MyTown,MyState,12345-6789,USA
-
The âFPATâ variable offers a solution for cases like this. The value
of âFPATâ should be a string that provides a regular expression. This
regular expression describes the contents of each field.
+ We can explore the strengths, and some limitations, of âFPATâ using
+the case of comma-separated values (CSV) data. This case is rather
+academic as âgawkâ now has built-in CSV parsing (*note Comma Separated
+Fields::), Nonetheless, it remains useful as an example of what
+âFPATâ-based field parsing can do. It is also useful for versions of
+âgawkâ prior to version 5.3.
+
+ Many spreadsheet programs, for example, can export their data into
+text files, where each record is terminated with a newline, and fields
+are separated by commas. If commas only separated the data, there
+wouldnât be an issue with using âFS = ","â to split the data into
+fields. The problem comes when one of the fields contains an _embedded_
+comma. In such cases, most programs embed the field in double
+quotes.(1) So, we might have data like this:
+
+ Robbins,Arnold,"1234 A Pretty Street, NE",MyTown,MyState,12345-6789,USA
+
In the case of CSV data as presented here, each field is either
"anything that is not a comma," or "a double quote, anything that is not
a double quote, and a closing double quote." (There are more
@@ -5848,33 +5852,25 @@ the double quotes, leading to:
When run, we get the following:
$ gawk -f simple-csv.awk addresses.csv
- NF = 7
- $1 = <Robbins>
- $2 = <Arnold>
- $3 = <"1234 A Pretty Street, NE">
- $4 = <MyTown>
- $5 = <MyState>
- $6 = <12345-6789>
- $7 = <USA>
+ ⣠NF = 7
+ ⣠$1 = <Robbins>
+ ⣠$2 = <Arnold>
+ ⣠$3 = <"1234 A Pretty Street, NE">
+ ⣠$4 = <MyTown>
+ ⣠$5 = <MyState>
+ ⣠$6 = <12345-6789>
+ ⣠$7 = <USA>
Note the embedded comma in the value of â$3â.
A straightforward improvement when processing CSV data of this sort
-would be to remove the double quotes when they occur, with something
-like this:
+would be to remove the quotes when they occur, with something like this:
if (substr($i, 1, 1) == "\"") {
len = length($i)
- $i = substr($i, 2, len - 2) # Get text within the two double quotes
+ $i = substr($i, 2, len - 2) # Get text within the two quotes
}
- NOTE: Some programs export CSV data that contains embedded newlines
- between the double quotes. âgawkâ provides no way to deal with
- this. Even though a formal specification for CSV data exists,
- there isn't much more to be done; the âFPATâ mechanism provides an
- elegant solution for the majority of cases, and the âgawkâ
- developers are satisfied with that.
-
As written, the regexp used for âFPATâ requires that each field
contain at least one character. A straightforward modification
(changing the first â+â to â*â) allows fields to be empty:
@@ -5890,13 +5886,6 @@ with âFIELDWIDTHSâ.
Finally, the âpatsplit()â function makes the same functionality
available for splitting regular strings (*note String Functions::).
- NOTE: Given that âgawkâ now has built-in CSV parsing (*note Comma
- Separated Fields::), the examples presented here are obsolete,
- since you can use the â--csvâ option (in which case âFPATâ field
- parsing doesn't take effect). Nonetheless, it remains useful as an
- example of what âFPATâ-based field parsing can do, or if you must
- use a version of âgawkâ prior to 5.3.
-
---------- Footnotes ----------
(1) The CSV format lacked a formal standard definition for many
@@ -5906,13 +5895,13 @@ most common practices.
File: gawk.info, Node: More CSV, Next: FS versus FPAT, Up: Splitting By
Content
-4.7.1 More on CSV Files
------------------------
+4.7.1 More on Using âFPATâ with CSV Files
+-----------------------------------------
Manuel Collado notes that in addition to commas, a CSV field can also
-contain double quotes, that have to be escaped by doubling them. The
+contains quotes, that have to be escaped by doubling them. The
previously described regexps fail to accept quoted fields with both
-commas and double quotes inside. He suggests that the simplest âFPATâ
+commas and quotes inside. He suggests that the simplest âFPATâ
expression that recognizes this kind of fields is
â/([^,]*)|("([^"]|"")+")/â. He provides the following input data to
test these variants:
@@ -5923,7 +5912,7 @@ test these variants:
p,"",s
p,,s
-And here is his test program:
+ And here is his test program:
BEGIN {
fp[0] = "([^,]+)|(\"[^\"]+\")"
@@ -5955,10 +5944,19 @@ And here is his test program:
⣠<p,,s>
⣠NF = 3 <p><><s>
- In general, using âFPATâ to do your own CSV parsing is like having a
-bed with a blanket that's not quite big enough. There's always a corner
-that isn't covered. We recommend, instead, that you use Manuel
-Collado's âCSVMODEâ library for âgawkâ (http://mcollado.z15.es/xgawk/).
+ Some programs export CSV data that contains _embedded newlines_
+between the double quotes, and here we run into a limitation of âFPATâ:
+it provides no way to deal with this.
+
+ Using âFPATâ to do your own CSV parsing is an elegant approach for
+the majority of cases, but not all. It is rather like having a bed with
+a blanket thatâs not quite big enough: thereâs always a corner that
+isnât covered.
+
+ For a more general solution to working with CSV data, see *note Comma
+Separated Fields::. If your version of âgawkâ is prior to version 5.3,
+we recommend that you use Manuel Collado's âCSVMODEâ library for âgawkâ
+(http://mcollado.z15.es/xgawk/).
File: gawk.info, Node: FS versus FPAT, Prev: More CSV, Up: Splitting By
Content
@@ -36534,7 +36532,7 @@ Index
* advanced features, processes, communicating with: Two-way I/O.
(line 6)
* advanced features, specifying field content: Splitting By Content.
- (line 17)
+ (line 14)
* Aho, Alfred: History. (line 21)
* Aho, Alfred <1>: Contributors. (line 12)
* Aho, Alfred <2>: Other Versions. (line 35)
@@ -37061,7 +37059,7 @@ Index
* close() function, two-way pipes and: Two-way I/O. (line 60)
* Collado, Manuel: Acknowledgments. (line 60)
* Collado, Manuel <1>: More CSV. (line 6)
-* Collado, Manuel <2>: More CSV. (line 52)
+* Collado, Manuel <2>: More CSV. (line 61)
* collating elements: Bracket Expressions. (line 90)
* collating symbols: Bracket Expressions. (line 97)
* Colombo, Antonio: Acknowledgments. (line 60)
@@ -37076,9 +37074,9 @@ Index
* comma separated values (CSV) data, generating CSV data: To CSV Function.
(line 6)
* Comma separated values (CSV) data, parsing with FPAT: Splitting By Content.
- (line 23)
+ (line 24)
* Comma separated values (CSV) data, parsing with FPAT library: More CSV.
- (line 52)
+ (line 61)
* comma separated values (CSV) data, records and fields: Comma Separated
Fields.
(line 6)
* command completion, in debugger: Readline Support. (line 6)
@@ -37203,12 +37201,12 @@ Index
* CSV (comma separated values) data, generating CSV data: To CSV Function.
(line 6)
* CSV (comma separated values) data, parsing with CSVMODE library: More CSV.
- (line 52)
+ (line 61)
* CSV (comma separated values) data, parsing with FPAT: Splitting By Content.
- (line 23)
+ (line 24)
* CSV (comma separated values) data, records and fields: Comma Separated
Fields.
(line 6)
-* CSVMODE library for gawk: More CSV. (line 52)
+* CSVMODE library for gawk: More CSV. (line 61)
* ctime() user-defined function: Function Example. (line 74)
* Curreli, Marco: Contributors. (line 147)
* currency symbols, localization: Explaining gettext. (line 104)
@@ -37986,7 +37984,7 @@ Index
* forward slash (/), patterns and: Expression Patterns. (line 24)
* forward slash (/), to enclose regular expressions: Regexp. (line 10)
* FPAT variable: Splitting By Content.
- (line 33)
+ (line 20)
* FPAT variable <1>: User-modified. (line 46)
* frame debugger command: Execution Stack. (line 27)
* frawk: Other Versions. (line 123)
@@ -38103,7 +38101,7 @@ Index
* gawk, format-control characters: Control Letters. (line 33)
* gawk, format-control characters <1>: Control Letters. (line 108)
* gawk, FPAT variable in: Splitting By Content.
- (line 33)
+ (line 20)
* gawk, FPAT variable in <1>: User-modified. (line 46)
* gawk, FUNCTAB array in: Auto-set. (line 134)
* gawk, function arguments and: Calling Built-in. (line 16)
@@ -39994,526 +39992,526 @@ Node: Skipping intervening265884
Node: Allowing trailing data266686
Node: Fields with fixed data267747
Node: Splitting By Content269369
-Ref: Splitting By Content-Footnote-1273819
-Node: More CSV273982
-Node: FS versus FPAT275640
-Node: Testing field creation276840
-Node: Multiple Line278614
-Node: Getline285083
-Node: Plain Getline287671
-Node: Getline/Variable290319
-Node: Getline/File291515
-Node: Getline/Variable/File292963
-Ref: Getline/Variable/File-Footnote-1294608
-Node: Getline/Pipe294704
-Node: Getline/Variable/Pipe297512
-Node: Getline/Coprocess298695
-Node: Getline/Variable/Coprocess300018
-Node: Getline Notes300784
-Node: Getline Summary304761
-Ref: table-getline-variants305205
-Node: Read Timeout306109
-Ref: Read Timeout-Footnote-1310071
-Node: Retrying Input310129
-Node: Command-line directories311396
-Node: Input Summary312334
-Node: Input Exercises315714
-Node: Printing316152
-Node: Print318095
-Node: Print Examples319596
-Node: Output Separators322441
-Node: OFMT324548
-Node: Printf326261
-Node: Basic Printf327066
-Node: Control Letters328701
-Node: Format Modifiers334147
-Node: Printf Examples340419
-Node: Redirection342960
-Node: Special FD350732
-Ref: Special FD-Footnote-1354030
-Node: Special Files354108
-Node: Other Inherited Files354737
-Node: Special Network355802
-Node: Special Caveats356690
-Node: Close Files And Pipes357673
-Ref: Close Files And Pipes-Footnote-1363797
-Node: Close Return Value363945
-Ref: table-close-pipe-return-values365216
-Ref: Close Return Value-Footnote-1366047
-Node: Noflush366203
-Node: Nonfatal367711
-Node: Output Summary370126
-Node: Output Exercises371412
-Node: Expressions372103
-Node: Values373303
-Node: Constants373981
-Node: Scalar Constants374676
-Ref: Scalar Constants-Footnote-1377252
-Ref: Scalar Constants-Footnote-2377502
-Node: Nondecimal-numbers377582
-Node: Regexp Constants380695
-Node: Using Constant Regexps381241
-Node: Standard Regexp Constants381887
-Node: Strong Regexp Constants385183
-Node: Variables389026
-Node: Using Variables389691
-Node: Assignment Options391665
-Node: Conversion394216
-Node: Strings And Numbers394748
-Ref: Strings And Numbers-Footnote-1397958
-Node: Locale influences conversions398067
-Ref: table-locale-affects400905
-Node: All Operators401547
-Node: Arithmetic Ops402188
-Node: Concatenation405011
-Ref: Concatenation-Footnote-1407947
-Node: Assignment Ops408066
-Ref: table-assign-ops413193
-Node: Increment Ops414574
-Node: Truth Values and Conditions418165
-Node: Truth Values419259
-Node: Typing and Comparison420339
-Node: Variable Typing421171
-Ref: Variable Typing-Footnote-1427815
-Ref: Variable Typing-Footnote-2427895
-Node: Comparison Operators427976
-Ref: table-relational-ops428403
-Node: POSIX String Comparison432079
-Ref: POSIX String Comparison-Footnote-1433836
-Ref: POSIX String Comparison-Footnote-2433979
-Node: Boolean Ops434063
-Ref: Boolean Ops-Footnote-1438737
-Node: Conditional Exp438833
-Node: Function Calls440613
-Node: Precedence444560
-Node: Locales448423
-Node: Expressions Summary450099
-Node: Patterns and Actions452754
-Node: Pattern Overview453890
-Node: Regexp Patterns455615
-Node: Expression Patterns456161
-Node: Ranges460066
-Node: BEGIN/END463240
-Node: Using BEGIN/END464049
-Ref: Using BEGIN/END-Footnote-1466957
-Node: I/O And BEGIN/END467067
-Node: BEGINFILE/ENDFILE469549
-Node: Empty472979
-Node: Using Shell Variables473296
-Node: Action Overview475632
-Node: Statements478068
-Node: If Statement479964
-Node: While Statement481527
-Node: Do Statement483615
-Node: For Statement484799
-Node: Switch Statement488154
-Node: Break Statement490703
-Node: Continue Statement492895
-Node: Next Statement494826
-Node: Nextfile Statement497305
-Node: Exit Statement500158
-Node: Built-in Variables502685
-Node: User-modified503862
-Node: Auto-set512069
-Ref: Auto-set-Footnote-1530153
-Ref: Auto-set-Footnote-2530371
-Node: ARGC and ARGV530427
-Node: Pattern Action Summary534856
-Node: Arrays537462
-Node: Array Basics538835
-Node: Array Intro539683
-Ref: figure-array-elements541694
-Ref: Array Intro-Footnote-1544547
-Node: Reference to Elements544679
-Node: Assigning Elements547199
-Node: Array Example547694
-Node: Scanning an Array549656
-Node: Controlling Scanning552751
-Ref: Controlling Scanning-Footnote-1559386
-Node: Numeric Array Subscripts559710
-Node: Uninitialized Subscripts561978
-Node: Delete563651
-Ref: Delete-Footnote-1566463
-Node: Multidimensional566520
-Node: Multiscanning569723
-Node: Arrays of Arrays571390
-Node: Arrays Summary575694
-Node: Functions577881
-Node: Built-in579013
-Node: Calling Built-in580202
-Node: Boolean Functions582242
-Node: Numeric Functions582804
-Ref: Numeric Functions-Footnote-1586989
-Ref: Numeric Functions-Footnote-2587672
-Ref: Numeric Functions-Footnote-3587724
-Node: String Functions588000
-Ref: String Functions-Footnote-1614451
-Ref: String Functions-Footnote-2614583
-Ref: String Functions-Footnote-3614839
-Node: Gory Details614926
-Ref: table-sub-escapes616935
-Ref: table-sub-proposed618566
-Ref: table-posix-sub620061
-Ref: table-gensub-escapes621734
-Ref: Gory Details-Footnote-1622653
-Node: I/O Functions622807
-Ref: table-system-return-values629483
-Ref: I/O Functions-Footnote-1631645
-Ref: I/O Functions-Footnote-2631793
-Node: Time Functions631913
-Ref: Time Functions-Footnote-1643625
-Ref: Time Functions-Footnote-2643693
-Ref: Time Functions-Footnote-3643855
-Ref: Time Functions-Footnote-4643966
-Ref: Time Functions-Footnote-5644082
-Ref: Time Functions-Footnote-6644309
-Node: Bitwise Functions644587
-Ref: table-bitwise-ops645185
-Ref: Bitwise Functions-Footnote-1651427
-Ref: Bitwise Functions-Footnote-2651604
-Node: Type Functions651799
-Node: I18N Functions653970
-Node: User-defined655705
-Node: Definition Syntax656451
-Ref: Definition Syntax-Footnote-1662269
-Node: Function Example662344
-Ref: Function Example-Footnote-1665323
-Node: Function Calling665345
-Node: Calling A Function665937
-Node: Variable Scope666907
-Node: Pass By Value/Reference669961
-Node: Function Caveats672689
-Ref: Function Caveats-Footnote-1674780
-Node: Return Statement674900
-Node: Dynamic Typing677932
-Node: Dynamic Typing Awk678510
-Node: Dynamic Typing Gawk680648
-Node: Indirect Calls684018
-Node: Functions Summary695155
-Node: Library Functions698121
-Ref: Library Functions-Footnote-1701669
-Ref: Library Functions-Footnote-2701814
-Node: Library Names701989
-Ref: Library Names-Footnote-1705760
-Ref: Library Names-Footnote-2705987
-Node: General Functions706081
-Node: Strtonum Function707351
-Node: Assert Function710433
-Node: Round Function713883
-Node: Cliff Random Function715455
-Node: Ordinal Functions716479
-Ref: Ordinal Functions-Footnote-1719582
-Ref: Ordinal Functions-Footnote-2719834
-Node: Join Function720048
-Ref: Join Function-Footnote-1721846
-Node: Getlocaltime Function722050
-Node: Readfile Function725824
-Node: Shell Quoting727853
-Node: Isnumeric Function729309
-Node: To CSV Function730745
-Node: Data File Management732837
-Node: Filetrans Function733469
-Node: Rewind Function737745
-Node: File Checking739716
-Ref: File Checking-Footnote-1741082
-Node: Empty Files741287
-Node: Ignoring Assigns743350
-Node: Getopt Function744924
-Ref: Getopt Function-Footnote-1760742
-Node: Passwd Functions760954
-Ref: Passwd Functions-Footnote-1770089
-Node: Group Functions770177
-Ref: Group Functions-Footnote-1778301
-Node: Walking Arrays778512
-Node: Library Functions Summary781558
-Node: Library Exercises782978
-Node: Sample Programs783463
-Node: Running Examples784245
-Node: Clones784997
-Node: Cut Program786265
-Node: Egrep Program796689
-Node: Id Program805994
-Node: Split Program816086
-Ref: Split Program-Footnote-1826299
-Node: Tee Program826484
-Node: Uniq Program829390
-Node: Wc Program837250
-Node: Bytes vs. Characters837645
-Node: Using extensions839245
-Node: wc program840023
-Node: Miscellaneous Programs845016
-Node: Dupword Program846241
-Node: Alarm Program848290
-Node: Translate Program853193
-Ref: Translate Program-Footnote-1857902
-Node: Labels Program858180
-Ref: Labels Program-Footnote-1861615
-Node: Word Sorting861699
-Node: History Sorting865873
-Node: Extract Program868146
-Node: Simple Sed876399
-Node: Igawk Program879609
-Ref: Igawk Program-Footnote-1894819
-Ref: Igawk Program-Footnote-2895025
-Ref: Igawk Program-Footnote-3895155
-Node: Anagram Program895282
-Node: Signature Program898368
-Node: Programs Summary899618
-Node: Programs Exercises900872
-Ref: Programs Exercises-Footnote-1905174
-Node: Advanced Features905260
-Node: Nondecimal Data907741
-Node: Boolean Typed Values909371
-Node: Array Sorting911328
-Node: Controlling Array Traversal912057
-Ref: Controlling Array Traversal-Footnote-1920560
-Node: Array Sorting Functions920682
-Ref: Array Sorting Functions-Footnote-1926779
-Node: Two-way I/O926987
-Ref: Two-way I/O-Footnote-1934958
-Ref: Two-way I/O-Footnote-2935149
-Node: TCP/IP Networking935231
-Node: Profiling938399
-Node: Persistent Memory948069
-Ref: Persistent Memory-Footnote-1957641
-Node: Extension Philosophy957772
-Node: Advanced Features Summary959299
-Node: Internationalization961565
-Node: I18N and L10N963267
-Node: Explaining gettext963962
-Ref: Explaining gettext-Footnote-1970098
-Ref: Explaining gettext-Footnote-2970291
-Node: Programmer i18n970456
-Ref: Programmer i18n-Footnote-1975568
-Node: Translator i18n975617
-Node: String Extraction976447
-Ref: String Extraction-Footnote-1977623
-Node: Printf Ordering977721
-Ref: Printf Ordering-Footnote-1980579
-Node: I18N Portability980647
-Ref: I18N Portability-Footnote-1983207
-Node: I18N Example983274
-Ref: I18N Example-Footnote-1986668
-Ref: I18N Example-Footnote-2986741
-Node: Gawk I18N986858
-Node: I18N Summary987512
-Node: Debugger988909
-Node: Debugging989929
-Node: Debugging Concepts990378
-Node: Debugging Terms992195
-Node: Awk Debugging994798
-Ref: Awk Debugging-Footnote-1995771
-Node: Sample Debugging Session995907
-Node: Debugger Invocation996457
-Node: Finding The Bug998082
-Node: List of Debugger Commands1004714
-Node: Breakpoint Control1006091
-Node: Debugger Execution Control1009913
-Node: Viewing And Changing Data1013387
-Node: Execution Stack1017121
-Node: Debugger Info1018802
-Node: Miscellaneous Debugger Commands1023097
-Node: Readline Support1028338
-Node: Limitations1029282
-Node: Debugging Summary1031906
-Node: Namespaces1033205
-Node: Global Namespace1034332
-Node: Qualified Names1035766
-Node: Default Namespace1036801
-Node: Changing The Namespace1037574
-Node: Naming Rules1039256
-Node: Internal Name Management1041211
-Node: Namespace Example1042281
-Node: Namespace And Features1044858
-Node: Namespace Summary1046313
-Node: Arbitrary Precision Arithmetic1047824
-Node: Computer Arithmetic1049343
-Ref: table-numeric-ranges1053268
-Ref: table-floating-point-ranges1053765
-Ref: Computer Arithmetic-Footnote-11054423
-Node: Math Definitions1054480
-Ref: table-ieee-formats1057512
-Node: MPFR features1058085
-Node: MPFR On Parole1058538
-Ref: MPFR On Parole-Footnote-11059379
-Node: MPFR Intro1059538
-Node: FP Math Caution1061222
-Ref: FP Math Caution-Footnote-11062294
-Node: Inexactness of computations1062667
-Node: Inexact representation1063698
-Node: Comparing FP Values1065079
-Node: Errors accumulate1066337
-Node: Strange values1067802
-Ref: Strange values-Footnote-11070456
-Node: Getting Accuracy1070561
-Node: Try To Round1073298
-Node: Setting precision1074205
-Ref: table-predefined-precision-strings1074910
-Node: Setting the rounding mode1076794
-Ref: table-gawk-rounding-modes1077176
-Ref: Setting the rounding mode-Footnote-11081228
-Node: Arbitrary Precision Integers1081411
-Ref: Arbitrary Precision Integers-Footnote-11084621
-Node: Checking for MPFR1084774
-Node: POSIX Floating Point Problems1086264
-Ref: POSIX Floating Point Problems-Footnote-11091084
-Node: Floating point summary1091122
-Node: Dynamic Extensions1093378
-Node: Extension Intro1094975
-Node: Plugin License1096277
-Node: Extension Mechanism Outline1097090
-Ref: figure-load-extension1097541
-Ref: figure-register-new-function1099119
-Ref: figure-call-new-function1100228
-Node: Extension API Description1102343
-Node: Extension API Functions Introduction1104072
-Ref: table-api-std-headers1105966
-Node: General Data Types1110407
-Ref: General Data Types-Footnote-11119553
-Node: Memory Allocation Functions1119856
-Ref: Memory Allocation Functions-Footnote-11124573
-Node: Constructor Functions1124672
-Node: API Ownership of MPFR and GMP Values1128573
-Node: Registration Functions1130126
-Node: Extension Functions1130830
-Node: Exit Callback Functions1136404
-Node: Extension Version String1137718
-Node: Input Parsers1138413
-Node: Output Wrappers1153032
-Node: Two-way processors1157874
-Node: Printing Messages1160227
-Ref: Printing Messages-Footnote-11161438
-Node: Updating ERRNO1161591
-Node: Requesting Values1162390
-Ref: table-value-types-returned1163143
-Node: Accessing Parameters1165202
-Node: Symbol Table Access1166483
-Node: Symbol table by name1166995
-Ref: Symbol table by name-Footnote-11170196
-Node: Symbol table by cookie1170328
-Ref: Symbol table by cookie-Footnote-11174597
-Node: Cached values1174661
-Ref: Cached values-Footnote-11178293
-Node: Array Manipulation1178450
-Ref: Array Manipulation-Footnote-11179549
-Node: Array Data Types1179586
-Ref: Array Data Types-Footnote-11182404
-Node: Array Functions1182500
-Node: Flattening Arrays1187529
-Node: Creating Arrays1194577
-Node: Redirection API1199419
-Node: Extension API Variables1202436
-Node: Extension Versioning1203159
-Ref: gawk-api-version1203588
-Node: Extension GMP/MPFR Versioning1205375
-Node: Extension API Informational Variables1207079
-Node: Extension API Boilerplate1208332
-Node: Changes from API V11212462
-Node: Finding Extensions1214094
-Node: Extension Example1214669
-Node: Internal File Description1215491
-Node: Internal File Ops1219783
-Ref: Internal File Ops-Footnote-11231333
-Node: Using Internal File Ops1231481
-Ref: Using Internal File Ops-Footnote-11233912
-Node: Extension Samples1234190
-Node: Extension Sample File Functions1235759
-Node: Extension Sample Fnmatch1243884
-Node: Extension Sample Fork1245479
-Node: Extension Sample Inplace1246755
-Node: Extension Sample Ord1250857
-Node: Extension Sample Readdir1251733
-Ref: table-readdir-file-types1252522
-Node: Extension Sample Revout1253878
-Node: Extension Sample Rev2way1254475
-Node: Extension Sample Read write array1255227
-Node: Extension Sample Readfile1258501
-Node: Extension Sample Time1259632
-Node: Extension Sample API Tests1261632
-Node: gawkextlib1262140
-Node: Extension summary1265172
-Node: Extension Exercises1269020
-Node: Language History1270290
-Node: V7/SVR3.11272002
-Node: SVR41274352
-Node: POSIX1275884
-Node: BTL1277309
-Node: POSIX/GNU1278076
-Ref: Gawk Extension Functions1281466
-Node: Feature History1284890
-Node: Common Extensions1304731
-Node: Ranges and Locales1306206
-Ref: Ranges and Locales-Footnote-11310991
-Ref: Ranges and Locales-Footnote-21311018
-Ref: Ranges and Locales-Footnote-31311253
-Node: Contributors1311476
-Node: History summary1317667
-Node: Installation1319109
-Node: Gawk Distribution1320073
-Node: Getting1320565
-Node: Extracting1321564
-Node: Distribution contents1323270
-Node: Unix Installation1331160
-Node: Quick Installation1331980
-Node: Compiling with MPFR1334520
-Node: Shell Startup Files1335226
-Node: Additional Configuration Options1336383
-Node: Configuration Philosophy1338766
-Node: Compiling from Git1341266
-Node: Building the Documentation1341825
-Node: Non-Unix Installation1343237
-Node: PC Installation1343713
-Node: PC Binary Installation1344582
-Node: PC Compiling1345475
-Node: PC Using1346653
-Node: Cygwin1350369
-Node: MSYS1351621
-Node: OpenVMS Installation1352247
-Node: OpenVMS Compilation1352928
-Ref: OpenVMS Compilation-Footnote-11354411
-Node: OpenVMS Dynamic Extensions1354469
-Node: OpenVMS Installation Details1356105
-Node: OpenVMS Running1358536
-Node: OpenVMS GNV1362673
-Node: Bugs1363428
-Node: Bug definition1364348
-Node: Bug address1367949
-Node: Usenet1371518
-Node: Performance bugs1372731
-Node: Asking for help1375747
-Node: Maintainers1377734
-Node: Other Versions1378761
-Node: Installation summary1388365
-Node: Notes1389747
-Node: Compatibility Mode1390557
-Node: Additions1391379
-Node: Accessing The Source1392324
-Node: Adding Code1393855
-Node: New Ports1400966
-Node: Derived Files1405469
-Ref: Derived Files-Footnote-11411280
-Ref: Derived Files-Footnote-21411315
-Ref: Derived Files-Footnote-31411926
-Node: Future Extensions1412040
-Node: Implementation Limitations1412710
-Node: Extension Design1413952
-Node: Old Extension Problems1415112
-Ref: Old Extension Problems-Footnote-11416684
-Node: Extension New Mechanism Goals1416745
-Ref: Extension New Mechanism Goals-Footnote-11420215
-Node: Extension Other Design Decisions1420416
-Node: Extension Future Growth1422613
-Node: Notes summary1423233
-Node: Basic Concepts1424443
-Node: Basic High Level1425128
-Ref: figure-general-flow1425410
-Ref: figure-process-flow1426112
-Ref: Basic High Level-Footnote-11429482
-Node: Basic Data Typing1429671
-Node: Glossary1433079
-Node: Copying1465957
-Node: GNU Free Documentation License1503515
-Node: Index1528638
+Ref: Splitting By Content-Footnote-1273292
+Node: More CSV273455
+Node: FS versus FPAT275531
+Node: Testing field creation276731
+Node: Multiple Line278505
+Node: Getline284974
+Node: Plain Getline287562
+Node: Getline/Variable290210
+Node: Getline/File291406
+Node: Getline/Variable/File292854
+Ref: Getline/Variable/File-Footnote-1294499
+Node: Getline/Pipe294595
+Node: Getline/Variable/Pipe297403
+Node: Getline/Coprocess298586
+Node: Getline/Variable/Coprocess299909
+Node: Getline Notes300675
+Node: Getline Summary304652
+Ref: table-getline-variants305096
+Node: Read Timeout306000
+Ref: Read Timeout-Footnote-1309962
+Node: Retrying Input310020
+Node: Command-line directories311287
+Node: Input Summary312225
+Node: Input Exercises315605
+Node: Printing316043
+Node: Print317986
+Node: Print Examples319487
+Node: Output Separators322332
+Node: OFMT324439
+Node: Printf326152
+Node: Basic Printf326957
+Node: Control Letters328592
+Node: Format Modifiers334038
+Node: Printf Examples340310
+Node: Redirection342851
+Node: Special FD350623
+Ref: Special FD-Footnote-1353921
+Node: Special Files353999
+Node: Other Inherited Files354628
+Node: Special Network355693
+Node: Special Caveats356581
+Node: Close Files And Pipes357564
+Ref: Close Files And Pipes-Footnote-1363688
+Node: Close Return Value363836
+Ref: table-close-pipe-return-values365107
+Ref: Close Return Value-Footnote-1365938
+Node: Noflush366094
+Node: Nonfatal367602
+Node: Output Summary370017
+Node: Output Exercises371303
+Node: Expressions371994
+Node: Values373194
+Node: Constants373872
+Node: Scalar Constants374567
+Ref: Scalar Constants-Footnote-1377143
+Ref: Scalar Constants-Footnote-2377393
+Node: Nondecimal-numbers377473
+Node: Regexp Constants380586
+Node: Using Constant Regexps381132
+Node: Standard Regexp Constants381778
+Node: Strong Regexp Constants385074
+Node: Variables388917
+Node: Using Variables389582
+Node: Assignment Options391556
+Node: Conversion394107
+Node: Strings And Numbers394639
+Ref: Strings And Numbers-Footnote-1397849
+Node: Locale influences conversions397958
+Ref: table-locale-affects400796
+Node: All Operators401438
+Node: Arithmetic Ops402079
+Node: Concatenation404902
+Ref: Concatenation-Footnote-1407838
+Node: Assignment Ops407957
+Ref: table-assign-ops413084
+Node: Increment Ops414465
+Node: Truth Values and Conditions418056
+Node: Truth Values419150
+Node: Typing and Comparison420230
+Node: Variable Typing421062
+Ref: Variable Typing-Footnote-1427706
+Ref: Variable Typing-Footnote-2427786
+Node: Comparison Operators427867
+Ref: table-relational-ops428294
+Node: POSIX String Comparison431970
+Ref: POSIX String Comparison-Footnote-1433727
+Ref: POSIX String Comparison-Footnote-2433870
+Node: Boolean Ops433954
+Ref: Boolean Ops-Footnote-1438628
+Node: Conditional Exp438724
+Node: Function Calls440504
+Node: Precedence444451
+Node: Locales448314
+Node: Expressions Summary449990
+Node: Patterns and Actions452645
+Node: Pattern Overview453781
+Node: Regexp Patterns455506
+Node: Expression Patterns456052
+Node: Ranges459957
+Node: BEGIN/END463131
+Node: Using BEGIN/END463940
+Ref: Using BEGIN/END-Footnote-1466848
+Node: I/O And BEGIN/END466958
+Node: BEGINFILE/ENDFILE469440
+Node: Empty472870
+Node: Using Shell Variables473187
+Node: Action Overview475523
+Node: Statements477959
+Node: If Statement479855
+Node: While Statement481418
+Node: Do Statement483506
+Node: For Statement484690
+Node: Switch Statement488045
+Node: Break Statement490594
+Node: Continue Statement492786
+Node: Next Statement494717
+Node: Nextfile Statement497196
+Node: Exit Statement500049
+Node: Built-in Variables502576
+Node: User-modified503753
+Node: Auto-set511960
+Ref: Auto-set-Footnote-1530044
+Ref: Auto-set-Footnote-2530262
+Node: ARGC and ARGV530318
+Node: Pattern Action Summary534747
+Node: Arrays537353
+Node: Array Basics538726
+Node: Array Intro539574
+Ref: figure-array-elements541585
+Ref: Array Intro-Footnote-1544438
+Node: Reference to Elements544570
+Node: Assigning Elements547090
+Node: Array Example547585
+Node: Scanning an Array549547
+Node: Controlling Scanning552642
+Ref: Controlling Scanning-Footnote-1559277
+Node: Numeric Array Subscripts559601
+Node: Uninitialized Subscripts561869
+Node: Delete563542
+Ref: Delete-Footnote-1566354
+Node: Multidimensional566411
+Node: Multiscanning569614
+Node: Arrays of Arrays571281
+Node: Arrays Summary575585
+Node: Functions577772
+Node: Built-in578904
+Node: Calling Built-in580093
+Node: Boolean Functions582133
+Node: Numeric Functions582695
+Ref: Numeric Functions-Footnote-1586880
+Ref: Numeric Functions-Footnote-2587563
+Ref: Numeric Functions-Footnote-3587615
+Node: String Functions587891
+Ref: String Functions-Footnote-1614342
+Ref: String Functions-Footnote-2614474
+Ref: String Functions-Footnote-3614730
+Node: Gory Details614817
+Ref: table-sub-escapes616826
+Ref: table-sub-proposed618457
+Ref: table-posix-sub619952
+Ref: table-gensub-escapes621625
+Ref: Gory Details-Footnote-1622544
+Node: I/O Functions622698
+Ref: table-system-return-values629374
+Ref: I/O Functions-Footnote-1631536
+Ref: I/O Functions-Footnote-2631684
+Node: Time Functions631804
+Ref: Time Functions-Footnote-1643516
+Ref: Time Functions-Footnote-2643584
+Ref: Time Functions-Footnote-3643746
+Ref: Time Functions-Footnote-4643857
+Ref: Time Functions-Footnote-5643973
+Ref: Time Functions-Footnote-6644200
+Node: Bitwise Functions644478
+Ref: table-bitwise-ops645076
+Ref: Bitwise Functions-Footnote-1651318
+Ref: Bitwise Functions-Footnote-2651495
+Node: Type Functions651690
+Node: I18N Functions653861
+Node: User-defined655596
+Node: Definition Syntax656342
+Ref: Definition Syntax-Footnote-1662160
+Node: Function Example662235
+Ref: Function Example-Footnote-1665214
+Node: Function Calling665236
+Node: Calling A Function665828
+Node: Variable Scope666798
+Node: Pass By Value/Reference669852
+Node: Function Caveats672580
+Ref: Function Caveats-Footnote-1674671
+Node: Return Statement674791
+Node: Dynamic Typing677823
+Node: Dynamic Typing Awk678401
+Node: Dynamic Typing Gawk680539
+Node: Indirect Calls683909
+Node: Functions Summary695046
+Node: Library Functions698012
+Ref: Library Functions-Footnote-1701560
+Ref: Library Functions-Footnote-2701705
+Node: Library Names701880
+Ref: Library Names-Footnote-1705651
+Ref: Library Names-Footnote-2705878
+Node: General Functions705972
+Node: Strtonum Function707242
+Node: Assert Function710324
+Node: Round Function713774
+Node: Cliff Random Function715346
+Node: Ordinal Functions716370
+Ref: Ordinal Functions-Footnote-1719473
+Ref: Ordinal Functions-Footnote-2719725
+Node: Join Function719939
+Ref: Join Function-Footnote-1721737
+Node: Getlocaltime Function721941
+Node: Readfile Function725715
+Node: Shell Quoting727744
+Node: Isnumeric Function729200
+Node: To CSV Function730636
+Node: Data File Management732728
+Node: Filetrans Function733360
+Node: Rewind Function737636
+Node: File Checking739607
+Ref: File Checking-Footnote-1740973
+Node: Empty Files741178
+Node: Ignoring Assigns743241
+Node: Getopt Function744815
+Ref: Getopt Function-Footnote-1760633
+Node: Passwd Functions760845
+Ref: Passwd Functions-Footnote-1769980
+Node: Group Functions770068
+Ref: Group Functions-Footnote-1778192
+Node: Walking Arrays778403
+Node: Library Functions Summary781449
+Node: Library Exercises782869
+Node: Sample Programs783354
+Node: Running Examples784136
+Node: Clones784888
+Node: Cut Program786156
+Node: Egrep Program796580
+Node: Id Program805885
+Node: Split Program815977
+Ref: Split Program-Footnote-1826190
+Node: Tee Program826375
+Node: Uniq Program829281
+Node: Wc Program837141
+Node: Bytes vs. Characters837536
+Node: Using extensions839136
+Node: wc program839914
+Node: Miscellaneous Programs844907
+Node: Dupword Program846132
+Node: Alarm Program848181
+Node: Translate Program853084
+Ref: Translate Program-Footnote-1857793
+Node: Labels Program858071
+Ref: Labels Program-Footnote-1861506
+Node: Word Sorting861590
+Node: History Sorting865764
+Node: Extract Program868037
+Node: Simple Sed876290
+Node: Igawk Program879500
+Ref: Igawk Program-Footnote-1894710
+Ref: Igawk Program-Footnote-2894916
+Ref: Igawk Program-Footnote-3895046
+Node: Anagram Program895173
+Node: Signature Program898259
+Node: Programs Summary899509
+Node: Programs Exercises900763
+Ref: Programs Exercises-Footnote-1905065
+Node: Advanced Features905151
+Node: Nondecimal Data907632
+Node: Boolean Typed Values909262
+Node: Array Sorting911219
+Node: Controlling Array Traversal911948
+Ref: Controlling Array Traversal-Footnote-1920451
+Node: Array Sorting Functions920573
+Ref: Array Sorting Functions-Footnote-1926670
+Node: Two-way I/O926878
+Ref: Two-way I/O-Footnote-1934849
+Ref: Two-way I/O-Footnote-2935040
+Node: TCP/IP Networking935122
+Node: Profiling938290
+Node: Persistent Memory947960
+Ref: Persistent Memory-Footnote-1957532
+Node: Extension Philosophy957663
+Node: Advanced Features Summary959190
+Node: Internationalization961456
+Node: I18N and L10N963158
+Node: Explaining gettext963853
+Ref: Explaining gettext-Footnote-1969989
+Ref: Explaining gettext-Footnote-2970182
+Node: Programmer i18n970347
+Ref: Programmer i18n-Footnote-1975459
+Node: Translator i18n975508
+Node: String Extraction976338
+Ref: String Extraction-Footnote-1977514
+Node: Printf Ordering977612
+Ref: Printf Ordering-Footnote-1980470
+Node: I18N Portability980538
+Ref: I18N Portability-Footnote-1983098
+Node: I18N Example983165
+Ref: I18N Example-Footnote-1986559
+Ref: I18N Example-Footnote-2986632
+Node: Gawk I18N986749
+Node: I18N Summary987403
+Node: Debugger988800
+Node: Debugging989820
+Node: Debugging Concepts990269
+Node: Debugging Terms992086
+Node: Awk Debugging994689
+Ref: Awk Debugging-Footnote-1995662
+Node: Sample Debugging Session995798
+Node: Debugger Invocation996348
+Node: Finding The Bug997973
+Node: List of Debugger Commands1004605
+Node: Breakpoint Control1005982
+Node: Debugger Execution Control1009804
+Node: Viewing And Changing Data1013278
+Node: Execution Stack1017012
+Node: Debugger Info1018693
+Node: Miscellaneous Debugger Commands1022988
+Node: Readline Support1028229
+Node: Limitations1029173
+Node: Debugging Summary1031797
+Node: Namespaces1033096
+Node: Global Namespace1034223
+Node: Qualified Names1035657
+Node: Default Namespace1036692
+Node: Changing The Namespace1037465
+Node: Naming Rules1039147
+Node: Internal Name Management1041102
+Node: Namespace Example1042172
+Node: Namespace And Features1044749
+Node: Namespace Summary1046204
+Node: Arbitrary Precision Arithmetic1047715
+Node: Computer Arithmetic1049234
+Ref: table-numeric-ranges1053159
+Ref: table-floating-point-ranges1053656
+Ref: Computer Arithmetic-Footnote-11054314
+Node: Math Definitions1054371
+Ref: table-ieee-formats1057403
+Node: MPFR features1057976
+Node: MPFR On Parole1058429
+Ref: MPFR On Parole-Footnote-11059270
+Node: MPFR Intro1059429
+Node: FP Math Caution1061113
+Ref: FP Math Caution-Footnote-11062185
+Node: Inexactness of computations1062558
+Node: Inexact representation1063589
+Node: Comparing FP Values1064970
+Node: Errors accumulate1066228
+Node: Strange values1067693
+Ref: Strange values-Footnote-11070347
+Node: Getting Accuracy1070452
+Node: Try To Round1073189
+Node: Setting precision1074096
+Ref: table-predefined-precision-strings1074801
+Node: Setting the rounding mode1076685
+Ref: table-gawk-rounding-modes1077067
+Ref: Setting the rounding mode-Footnote-11081119
+Node: Arbitrary Precision Integers1081302
+Ref: Arbitrary Precision Integers-Footnote-11084512
+Node: Checking for MPFR1084665
+Node: POSIX Floating Point Problems1086155
+Ref: POSIX Floating Point Problems-Footnote-11090975
+Node: Floating point summary1091013
+Node: Dynamic Extensions1093269
+Node: Extension Intro1094866
+Node: Plugin License1096168
+Node: Extension Mechanism Outline1096981
+Ref: figure-load-extension1097432
+Ref: figure-register-new-function1099010
+Ref: figure-call-new-function1100119
+Node: Extension API Description1102234
+Node: Extension API Functions Introduction1103963
+Ref: table-api-std-headers1105857
+Node: General Data Types1110298
+Ref: General Data Types-Footnote-11119444
+Node: Memory Allocation Functions1119747
+Ref: Memory Allocation Functions-Footnote-11124464
+Node: Constructor Functions1124563
+Node: API Ownership of MPFR and GMP Values1128464
+Node: Registration Functions1130017
+Node: Extension Functions1130721
+Node: Exit Callback Functions1136295
+Node: Extension Version String1137609
+Node: Input Parsers1138304
+Node: Output Wrappers1152923
+Node: Two-way processors1157765
+Node: Printing Messages1160118
+Ref: Printing Messages-Footnote-11161329
+Node: Updating ERRNO1161482
+Node: Requesting Values1162281
+Ref: table-value-types-returned1163034
+Node: Accessing Parameters1165093
+Node: Symbol Table Access1166374
+Node: Symbol table by name1166886
+Ref: Symbol table by name-Footnote-11170087
+Node: Symbol table by cookie1170219
+Ref: Symbol table by cookie-Footnote-11174488
+Node: Cached values1174552
+Ref: Cached values-Footnote-11178184
+Node: Array Manipulation1178341
+Ref: Array Manipulation-Footnote-11179440
+Node: Array Data Types1179477
+Ref: Array Data Types-Footnote-11182295
+Node: Array Functions1182391
+Node: Flattening Arrays1187420
+Node: Creating Arrays1194468
+Node: Redirection API1199310
+Node: Extension API Variables1202327
+Node: Extension Versioning1203050
+Ref: gawk-api-version1203479
+Node: Extension GMP/MPFR Versioning1205266
+Node: Extension API Informational Variables1206970
+Node: Extension API Boilerplate1208223
+Node: Changes from API V11212353
+Node: Finding Extensions1213985
+Node: Extension Example1214560
+Node: Internal File Description1215382
+Node: Internal File Ops1219674
+Ref: Internal File Ops-Footnote-11231224
+Node: Using Internal File Ops1231372
+Ref: Using Internal File Ops-Footnote-11233803
+Node: Extension Samples1234081
+Node: Extension Sample File Functions1235650
+Node: Extension Sample Fnmatch1243775
+Node: Extension Sample Fork1245370
+Node: Extension Sample Inplace1246646
+Node: Extension Sample Ord1250748
+Node: Extension Sample Readdir1251624
+Ref: table-readdir-file-types1252413
+Node: Extension Sample Revout1253769
+Node: Extension Sample Rev2way1254366
+Node: Extension Sample Read write array1255118
+Node: Extension Sample Readfile1258392
+Node: Extension Sample Time1259523
+Node: Extension Sample API Tests1261523
+Node: gawkextlib1262031
+Node: Extension summary1265063
+Node: Extension Exercises1268911
+Node: Language History1270181
+Node: V7/SVR3.11271893
+Node: SVR41274243
+Node: POSIX1275775
+Node: BTL1277200
+Node: POSIX/GNU1277967
+Ref: Gawk Extension Functions1281357
+Node: Feature History1284781
+Node: Common Extensions1304622
+Node: Ranges and Locales1306097
+Ref: Ranges and Locales-Footnote-11310882
+Ref: Ranges and Locales-Footnote-21310909
+Ref: Ranges and Locales-Footnote-31311144
+Node: Contributors1311367
+Node: History summary1317558
+Node: Installation1319000
+Node: Gawk Distribution1319964
+Node: Getting1320456
+Node: Extracting1321455
+Node: Distribution contents1323161
+Node: Unix Installation1331051
+Node: Quick Installation1331871
+Node: Compiling with MPFR1334411
+Node: Shell Startup Files1335117
+Node: Additional Configuration Options1336274
+Node: Configuration Philosophy1338657
+Node: Compiling from Git1341157
+Node: Building the Documentation1341716
+Node: Non-Unix Installation1343128
+Node: PC Installation1343604
+Node: PC Binary Installation1344473
+Node: PC Compiling1345366
+Node: PC Using1346544
+Node: Cygwin1350260
+Node: MSYS1351512
+Node: OpenVMS Installation1352138
+Node: OpenVMS Compilation1352819
+Ref: OpenVMS Compilation-Footnote-11354302
+Node: OpenVMS Dynamic Extensions1354360
+Node: OpenVMS Installation Details1355996
+Node: OpenVMS Running1358427
+Node: OpenVMS GNV1362564
+Node: Bugs1363319
+Node: Bug definition1364239
+Node: Bug address1367840
+Node: Usenet1371409
+Node: Performance bugs1372622
+Node: Asking for help1375638
+Node: Maintainers1377625
+Node: Other Versions1378652
+Node: Installation summary1388256
+Node: Notes1389638
+Node: Compatibility Mode1390448
+Node: Additions1391270
+Node: Accessing The Source1392215
+Node: Adding Code1393746
+Node: New Ports1400857
+Node: Derived Files1405360
+Ref: Derived Files-Footnote-11411171
+Ref: Derived Files-Footnote-21411206
+Ref: Derived Files-Footnote-31411817
+Node: Future Extensions1411931
+Node: Implementation Limitations1412601
+Node: Extension Design1413843
+Node: Old Extension Problems1415003
+Ref: Old Extension Problems-Footnote-11416575
+Node: Extension New Mechanism Goals1416636
+Ref: Extension New Mechanism Goals-Footnote-11420106
+Node: Extension Other Design Decisions1420307
+Node: Extension Future Growth1422504
+Node: Notes summary1423124
+Node: Basic Concepts1424334
+Node: Basic High Level1425019
+Ref: figure-general-flow1425301
+Ref: figure-process-flow1426003
+Ref: Basic High Level-Footnote-11429373
+Node: Basic Data Typing1429562
+Node: Glossary1432970
+Node: Copying1465848
+Node: GNU Free Documentation License1503406
+Node: Index1528529
End Tag Table
diff --git a/doc/gawk.texi b/doc/gawk.texi
index 3b2d1d98..a5be9a3c 100644
--- a/doc/gawk.texi
+++ b/doc/gawk.texi
@@ -8253,10 +8253,8 @@ four, and @code{$4} has the value @code{"ddd"}.
@node Splitting By Content
@section Defining Fields by Content
-@quotation NOTE
-This whole section needs rewriting now
-that @command{gawk} has built-in CSV parsing. Sigh.
-@end quotation
+@c August 2024. This section and the first subsection rewritten
+@c by Stuart Ferguson <stuart.fergs@gmail.com>.
@menu
* More CSV:: More on CSV files.
@@ -8264,27 +8262,39 @@ that @command{gawk} has built-in CSV parsing. Sigh.
@end menu
@c O'Reilly doesn't like it as a note the first thing in the section.
-This @value{SECTION} discusses an advanced
-feature of @command{gawk}. If you are a novice @command{awk} user,
-you might want to skip it on the first reading.
+This @value{SECTION} discusses an advanced feature of @command{gawk}. If you
are a novice
+@command{awk} user, you might want to skip it on the first reading.
@cindex advanced features @subentry specifying field content
-Normally, when using @code{FS}, @command{gawk} defines the fields as the
-parts of the record that occur in between each field separator. In other
-words, @code{FS} defines what a field @emph{is not}, instead of what a field
-@emph{is}.
-However, there are times when you really want to define the fields by
-what they are, and not by what they are not.
+Normally, when using @code{FS}, @command{gawk} defines the fields as the parts
of
+the record that occur in between each field separator. In other words,
+@code{FS} defines what a field @emph{is not}, instead of what a field
@emph{is}. However,
+there are times when we really want to define the fields by what they are,
+and not by what they are not.
+
+@cindex @command{gawk} @subentry @code{FPAT} variable in
+@cindex @code{FPAT} variable
+The @code{FPAT} variable offers a solution for cases like this. The value
+of @code{FPAT} should be a string that provides a regular expression. This
+regular expression describes the contents of each field.
@cindex CSV (comma separated values) data @subentry parsing with @code{FPAT}
@cindex Comma separated values (CSV) data @subentry parsing with @code{FPAT}
-The most notorious such case
-is comma-separated values (CSV) data. Many spreadsheet programs,
-for example, can export their data into text files, where each record is
-terminated with a newline, and fields are separated by commas. If
-commas only separated the data, there wouldn't be an issue. The problem comes
when
-one of the fields contains an @emph{embedded} comma.
-In such cases, most programs embed the field in double quotes.@footnote{The
+We can explore the strengths, and some limitations, of
+@code{FPAT} using the case of comma-separated values (CSV)
+data. This case is rather academic as @command{gawk} now has
+built-in CSV parsing
+(@pxref{Comma Separated Fields}),
+Nonetheless, it remains useful as an example of what @code{FPAT}-based field
+parsing can do. It is also useful for versions of
+@command{gawk} prior to version 5.3.
+
+Many spreadsheet programs, for example, can export their data into text
+files, where each record is terminated with a newline, and fields are
+separated by commas. If commas only separated the data, there wouldnât
+be an issue with using @samp{FS = ","} to split the data into fields. The
+problem comes when one of the fields contains an @emph{embedded} comma. In
+such cases, most programs embed the field in double quotes.@footnote{The
CSV format lacked a formal standard definition for many years.
@uref{http://www.ietf.org/rfc/rfc4180.txt, RFC 4180}
standardizes the most common practices.}
@@ -8296,20 +8306,14 @@ Robbins,Arnold,"1234 A Pretty Street,
NE",MyTown,MyState,12345-6789,USA
@c endfile
@end example
-@cindex @command{gawk} @subentry @code{FPAT} variable in
-@cindex @code{FPAT} variable
-The @code{FPAT} variable offers a solution for cases like this.
-The value of @code{FPAT} should be a string that provides a regular expression.
-This regular expression describes the contents of each field.
-
-In the case of CSV data as presented here, each field is either ``anything that
-is not a comma,'' or ``a double quote, anything that is not a double quote,
and a
-closing double quote.'' (There are more complicated definitions of CSV data,
-treated shortly.)
-If written as a regular expression constant
+In the case of CSV data as presented here, each field is
+either ``anything that is not a comma,'' or ``a double quote,
+anything that is not a double quote, and a closing double
+quote.'' (There are more complicated definitions of CSV data, treated
+shortly.) If written as a regular expression constant
(@pxref{Regexp}),
-we would have @code{/([^,]+)|("[^"]+")/}.
-Writing this as a string requires us to escape the double quotes, leading to:
+we would have @code{/([^,]+)|("[^"]+")/}. Writing this as a string requires
+us to escape the double quotes, leading to:
@example
FPAT = "([^,]+)|(\"[^\"]+\")"
@@ -8340,40 +8344,31 @@ When run, we get the following:
@example
$ @kbd{gawk -f simple-csv.awk addresses.csv}
-NF = 7
-$1 = <Robbins>
-$2 = <Arnold>
-$3 = <"1234 A Pretty Street, NE">
-$4 = <MyTown>
-$5 = <MyState>
-$6 = <12345-6789>
-$7 = <USA>
+@print{} NF = 7
+@print{} $1 = <Robbins>
+@print{} $2 = <Arnold>
+@print{} $3 = <"1234 A Pretty Street, NE">
+@print{} $4 = <MyTown>
+@print{} $5 = <MyState>
+@print{} $6 = <12345-6789>
+@print{} $7 = <USA>
@end example
Note the embedded comma in the value of @code{$3}.
A straightforward improvement when processing CSV data of this sort
-would be to remove the double quotes when they occur, with something like this:
+would be to remove the quotes when they occur, with something like this:
@example
if (substr($i, 1, 1) == "\"") @{
len = length($i)
- $i = substr($i, 2, len - 2) # Get text within the two double quotes
+ $i = substr($i, 2, len - 2) # Get text within the two quotes
@}
@end example
-@quotation NOTE
-Some programs export CSV data that contains embedded newlines between
-the double quotes. @command{gawk} provides no way to deal with this.
-Even though a formal specification for CSV data exists, there isn't much
-more to be done;
-the @code{FPAT} mechanism provides an elegant solution for the majority
-of cases, and the @command{gawk} developers are satisfied with that.
-@end quotation
-
-As written, the regexp used for @code{FPAT} requires that each field
-contain at least one character. A straightforward modification
-(changing the first @samp{+} to @samp{*}) allows fields to be empty:
+As written, the regexp used for @code{FPAT} requires that each field contain
+at least one character. A straightforward modification (changing the first
+@samp{+} to @samp{*}) allows fields to be empty:
@example
FPAT = "([^,]*)|(\"[^\"]+\")"
@@ -8388,33 +8383,24 @@ FPAT = "([^,]*)|(\"[^\"]+\")"
@c This is too much work. FPAT and CSV files are very flaky and
@c fragile. Doing something like this is merely inviting trouble.
-As with @code{FS}, the @code{IGNORECASE} variable (@pxref{User-modified})
+As with @code{FS}, the @code{IGNORECASE}
+variable (@pxref{User-modified})
affects field splitting with @code{FPAT}.
-Assigning a value to @code{FPAT} overrides field splitting
-with @code{FS} and with @code{FIELDWIDTHS}.
+Assigning a value to @code{FPAT} overrides field splitting with @code{FS} and
with
+@code{FIELDWIDTHS}.
Finally, the @code{patsplit()} function makes the same functionality
available for splitting regular strings (@pxref{String Functions}).
-@quotation NOTE
-Given that @command{gawk} now has built-in CSV parsing
-(@pxref{Comma Separated Fields}), the examples presented here are obsolete,
-since you can use the @option{--csv} option (in which case
-@code{FPAT} field parsing doesn't take effect).
-Nonetheless, it remains useful as an example of what @code{FPAT}-based
-field parsing can do, or if you must use a version of @command{gawk}
-prior to 5.3.
-@end quotation
-
@node More CSV
-@subsection More on CSV Files
+@subsection More on Using @code{FPAT} with CSV Files
@cindex Collado, Manuel
Manuel Collado notes that in addition to commas, a CSV field can also
-contain double quotes, that have to be escaped by doubling them. The previously
+contains quotes, that have to be escaped by doubling them. The previously
described regexps fail to accept quoted fields with both commas and
-double quotes inside. He suggests that the simplest @code{FPAT} expression that
+quotes inside. He suggests that the simplest @code{FPAT} expression that
recognizes this kind of fields is @code{/([^,]*)|("([^"]|"")+")/}. He
provides the following input data to test these variants:
@@ -8428,7 +8414,6 @@ p,,s
@c endfile
@end example
-@noindent
And here is his test program:
@example
@@ -8471,14 +8456,24 @@ $ @kbd{gawk -v fpat=2 -f test-csv.awk sample.csv}
@print{} NF = 3 <p><><s>
@end example
+Some programs export CSV data that contains @emph{embedded newlines} between
+the double quotes, and here we run into a limitation of @code{FPAT}: it
+provides no way to deal with this.
+
+Using @code{FPAT} to do your own CSV parsing is an elegant approach for the
+majority of cases, but not all. It is rather like having a bed with a
+blanket thatâs not quite big enough: thereâs always a corner that
+isnât covered.
+
@cindex Collado, Manuel
@cindex @code{CSVMODE} library for @command{gawk}
@cindex CSV (comma separated values) data @subentry parsing with
@code{CSVMODE} library
@cindex Comma separated values (CSV) data @subentry parsing with @code{FPAT}
library
-In general, using @code{FPAT} to do your own CSV parsing is like having
-a bed with a blanket that's not quite big enough. There's always a corner
-that isn't covered. We recommend, instead, that you use Manuel Collado's
-@uref{http://mcollado.z15.es/xgawk/, @code{CSVMODE} library for
@command{gawk}}.
+For a more general solution to working with CSV data, see
+@ref{Comma Separated Fields}. If your version of @command{gawk}
+is prior to version 5.3, we recommend that you use Manuel Collado's
+@uref{http://mcollado.z15.es/xgawk/, @code{CSVMODE} library for
+@command{gawk}}.
@node FS versus FPAT
@subsection @code{FS} Versus @code{FPAT}: A Subtle Difference
-----------------------------------------------------------------------
Summary of changes:
awklib/eg/misc/addresses.csv | 2 +-
awklib/eg/misc/quoted-csv.awk | 16 +
awklib/eg/misc/sample.csv | 1 +
awklib/eg/misc/simple-csv.awk | 2 +-
awklib/eg/misc/test-csv.awk | 15 -
doc/ChangeLog | 24 +
doc/gawk.info | 1568 ++++++++++++++++++++---------------------
doc/gawk.texi | 292 ++++----
8 files changed, 982 insertions(+), 938 deletions(-)
create mode 100644 awklib/eg/misc/quoted-csv.awk
delete mode 100644 awklib/eg/misc/test-csv.awk
hooks/post-receive
--
gawk
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [SCM] gawk branch, gawk-5.3-stable, updated. gawk-4.1.0-5576-g374b32f6,
Arnold Robbins <=