[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[SCM] gawk branch, feature/bwk-csv, updated. gawk-4.1.0-4898-g5ac109c8
From: |
Arnold Robbins |
Subject: |
[SCM] gawk branch, feature/bwk-csv, updated. gawk-4.1.0-4898-g5ac109c8 |
Date: |
Tue, 30 Aug 2022 14:40:20 -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, feature/bwk-csv has been updated
via 5ac109c8c0f0fdee75fd3d6982a60e8cf2802f7c (commit)
from 2571e2d55f4871bad41e4237e47442631cb2ebe0 (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=5ac109c8c0f0fdee75fd3d6982a60e8cf2802f7c
commit 5ac109c8c0f0fdee75fd3d6982a60e8cf2802f7c
Author: Arnold D. Robbins <arnold@skeeve.com>
Date: Tue Aug 30 21:40:01 2022 +0300
Add new section on CSV parsing.
diff --git a/doc/ChangeLog b/doc/ChangeLog
index 54e680c1..7977f42c 100644
--- a/doc/ChangeLog
+++ b/doc/ChangeLog
@@ -1,3 +1,11 @@
+2022-08-30 Arnold D. Robbins <arnold@skeeve.com>
+
+ * gawktexi.in (Comma Separated Fields): New node on CSV parsing.
+ (Field Splitting Summary): Add entry about FS = ",".
+
+ Note to self, FS = "," invalidates earlier examples in the
+ manual. Dang!!!
+
2022-08-25 Arnold D. Robbins <arnold@skeeve.com>
* gawktexi.in (Bug definition): Add a note about fuzzers.
diff --git a/doc/gawk.info b/doc/gawk.info
index e292f253..c9144e48 100644
--- a/doc/gawk.info
+++ b/doc/gawk.info
@@ -193,6 +193,7 @@ in (a) below. A copy of the license is included in the
section entitled
* Regexp Field Splitting:: Using regexps as the field separator.
* Single Character Fields:: Making each character a separate
field.
+* Comma Separated Fields:: Working with CSV files.
* Command Line Field Separator:: Setting 'FS' from the command
line.
* Full Line Fields:: Making the full line be a single
@@ -5049,6 +5050,7 @@ File: gawk.info, Node: Field Separators, Next: Constant
Size, Prev: Changing
* Default Field Splitting:: How fields are normally separated.
* Regexp Field Splitting:: Using regexps as the field separator.
* Single Character Fields:: Making each character a separate field.
+* Comma Separated Fields:: Working with CSV files.
* Command Line Field Separator:: Setting 'FS' from the command line.
* Full Line Fields:: Making the full line be a single field.
* Field Splitting Summary:: Some final points and a summary table.
@@ -5208,7 +5210,7 @@ string; field splitting does not. Thus, for example 'FS
= "()"' does
_not_ split fields between characters.
-File: gawk.info, Node: Single Character Fields, Next: Command Line Field
Separator, Prev: Regexp Field Splitting, Up: Field Separators
+File: gawk.info, Node: Single Character Fields, Next: Comma Separated
Fields, Prev: Regexp Field Splitting, Up: Field Separators
4.5.3 Making Each Character a Separate Field
--------------------------------------------
@@ -5234,9 +5236,51 @@ Options::), if 'FS' is the null string, then 'gawk' also
behaves this
way.
-File: gawk.info, Node: Command Line Field Separator, Next: Full Line Fields,
Prev: Single Character Fields, Up: Field Separators
+File: gawk.info, Node: Comma Separated Fields, Next: Command Line Field
Separator, Prev: Single Character Fields, Up: Field Separators
-4.5.4 Setting 'FS' from the Command Line
+4.5.4 Working With Comma Separated Value Files
+----------------------------------------------
+
+Many commonly-used tools use a comma to separate fields, instead of
+whitespace. This is particularly true of popular spreadsheet programs.
+There is no universally accepted standard for the format of these files,
+although RFC 4180 (http://www.ietf.org/rfc/rfc4180.txt) lists the common
+practices.
+
+ For decades, anyone wishing to work with CSV files and 'awk' had to
+"roll their own" solution. (For example, *note Splitting By Content::).
+In 2023, Brian Kernighan decided to add basic CSV support to his version
+of 'awk'. In order to keep up, 'gawk' too provides the same support as
+his version. To use CSV data, set 'FS' equal to a string with a single
+comma, like so: 'FS = ","'.
+
+ Fields in CSV files are separated by commas. In order to allow a
+comma to appear inside a field (i.e., as data), the field may be quoted
+by beginning and ending it with double quotes. In order to allow a
+double quote inside a double-quoted field, two double quotes are used.
+*note Table 4.1: table-csv-examples. shows some examples.
+
+
+Input Field Contents
+----------------------------------------------
+'abc def' 'abc def'
+'"quoted data"' 'quoted data'
+'"quoted, data"' 'quoted, data'
+'"She said 'She said "Stop!".'
+""Stop!""."'
+'She said "Stop!".' 'She said "Stop!".'
+
+Table 4.1: Examples of CSV data
+
+ The double-quote that starts a quoted field must be the first
+character after the comma.
+
+ This featue is disabled in POSIX mode.
+
+
+File: gawk.info, Node: Command Line Field Separator, Next: Full Line Fields,
Prev: Comma Separated Fields, Up: Field Separators
+
+4.5.5 Setting 'FS' from the Command Line
----------------------------------------
'FS' can be set on the command line. Use the '-F' option to do so. For
@@ -5314,7 +5358,7 @@ the entries for users whose full name is not indicated:
File: gawk.info, Node: Full Line Fields, Next: Field Splitting Summary,
Prev: Command Line Field Separator, Up: Field Separators
-4.5.5 Making the Full Line Be a Single Field
+4.5.6 Making the Full Line Be a Single Field
--------------------------------------------
Occasionally, it's useful to treat the whole input line as a single
@@ -5362,7 +5406,7 @@ defined by the POSIX standard.
File: gawk.info, Node: Field Splitting Summary, Prev: Full Line Fields, Up:
Field Separators
-4.5.6 Field-Splitting Summary
+4.5.7 Field-Splitting Summary
-----------------------------
It is important to remember that when you assign a string constant as
@@ -5380,6 +5424,10 @@ value of 'FS' ('==' means "is equal to"):
Fields are separated by runs of whitespace. Leading and trailing
whitespace are ignored. This is the default.
+'FS == ","'
+ Fields are separated by commas, with quoting of fields and special
+ rules involved.
+
'FS == ANY OTHER SINGLE CHARACTER'
Fields are separated by each occurrence of the character. Multiple
successive occurrences delimit empty fields, as do leading and
@@ -6421,7 +6469,7 @@ File: gawk.info, Node: Getline Summary, Prev: Getline
Notes, Up: Getline
4.10.10 Summary of 'getline' Variants
-------------------------------------
-*note Table 4.1: table-getline-variants. summarizes the eight variants
+*note Table 4.2: table-getline-variants. summarizes the eight variants
of 'getline', listing which predefined variables are set by each one,
and whether the variant is standard or a 'gawk' extension. Note: for
each variant, 'gawk' sets the 'RT' predefined variable.
@@ -6442,7 +6490,7 @@ COMMAND '|& getline' Sets '$0', 'NF', and 'RT'
'gawk'
COMMAND '|& getline' Sets VAR and 'RT' 'gawk'
VAR
-Table 4.1: 'getline' variants and what they set
+Table 4.2: 'getline' variants and what they set
File: gawk.info, Node: Read Timeout, Next: Retrying Input, Prev: Getline,
Up: Reading Files
@@ -36244,7 +36292,7 @@ Index
* Beebe, Nelson H.F.: Acknowledgments. (line 60)
* Beebe, Nelson H.F. <1>: Numeric Functions. (line 32)
* Beebe, Nelson H.F. <2>: Other Versions. (line 82)
-* BEGIN pattern: Field Separators. (line 44)
+* BEGIN pattern: Field Separators. (line 45)
* BEGIN pattern, getline and: Getline Notes. (line 19)
* BEGIN pattern, headings, adding: Print Examples. (line 42)
* BEGIN pattern, OFS/ORS variables, assigning values to: Output Separators.
@@ -37222,9 +37270,9 @@ Index
* field numbers: Nonconstant Fields. (line 6)
* field operator $: Fields. (line 19)
* field operators, dollar sign as: Fields. (line 19)
-* field separator: Field Separators. (line 15)
-* field separator, choice of: Field Separators. (line 50)
-* field separator, regular expression as: Field Separators. (line 50)
+* field separator: Field Separators. (line 16)
+* field separator, choice of: Field Separators. (line 51)
+* field separator, regular expression as: Field Separators. (line 51)
* field separator, whitespace as: Default Field Splitting.
(line 6)
* field separator, FS variable and: Default Field Splitting.
@@ -37249,8 +37297,8 @@ Index
* fields, numbers: Nonconstant Fields. (line 6)
* fields, changing contents of: Changing Fields. (line 6)
* fields, adding: Changing Fields. (line 53)
-* fields, separating: Field Separators. (line 15)
-* fields, separating <1>: Field Separators. (line 15)
+* fields, separating: Field Separators. (line 16)
+* fields, separating <1>: Field Separators. (line 16)
* fields, single-character: Single Character Fields.
(line 6)
* fields, printing: Print Examples. (line 20)
@@ -37377,8 +37425,8 @@ Index
* FreeBSD: Glossary. (line 747)
* FS variable, --field-separator option and: Options. (line 21)
* FS variable, TAB character as: Options. (line 311)
-* FS variable: Field Separators. (line 15)
-* FS variable, changing value of: Field Separators. (line 34)
+* FS variable: Field Separators. (line 16)
+* FS variable, changing value of: Field Separators. (line 35)
* FS variable, containing ^: Regexp Field Splitting.
(line 58)
* FS variable, null string as: Single Character Fields.
@@ -38576,7 +38624,7 @@ Index
* regular expressions, case sensitivity: Case-sensitivity. (line 6)
* regular expressions, as record separators: awk split records.
(line 118)
-* regular expressions, as field separators: Field Separators. (line 50)
+* regular expressions, as field separators: Field Separators. (line 51)
* regular expressions, as field separators <1>: Regexp Field Splitting.
(line 6)
* regular expressions, as patterns <1>: Regexp Patterns. (line 6)
@@ -38772,7 +38820,7 @@ Index
* sidebar, Changing FS Does Not Affect the Fields: Full Line Fields.
(line 14)
* sidebar, FS and IGNORECASE: Field Splitting Summary.
- (line 37)
+ (line 41)
* sidebar, Piping into sh: Redirection. (line 134)
* sidebar, Using close()'s Return Value: Close Files And Pipes.
(line 130)
@@ -39022,7 +39070,7 @@ Index
(line 108)
* troubleshooting, regexp constants vs. string constants: Computed Regexps.
(line 40)
-* troubleshooting, awk uses FS not IFS: Field Separators. (line 29)
+* troubleshooting, awk uses FS not IFS: Field Separators. (line 30)
* troubleshooting, fatal errors, field widths, specifying: Fixed width data.
(line 17)
* troubleshooting, print statement, omitting commas: Print Examples.
@@ -39242,618 +39290,620 @@ Index
Tag Table:
Node: Top1200
-Node: Foreword345790
-Node: Foreword450232
-Node: Preface51764
-Ref: Preface-Footnote-154623
-Ref: Preface-Footnote-254732
-Ref: Preface-Footnote-354966
-Node: History55108
-Node: Names57460
-Ref: Names-Footnote-158564
-Node: This Manual58711
-Ref: This Manual-Footnote-165350
-Node: Conventions65450
-Node: Manual History67819
-Ref: Manual History-Footnote-170816
-Ref: Manual History-Footnote-270857
-Node: How To Contribute70931
-Node: Acknowledgments71853
-Node: Getting Started76790
-Node: Running gawk79229
-Node: One-shot80419
-Node: Read Terminal81682
-Node: Long83675
-Node: Executable Scripts85188
-Ref: Executable Scripts-Footnote-187821
-Node: Comments87924
-Node: Quoting90408
-Node: DOS Quoting95934
-Node: Sample Data Files97990
-Node: Very Simple100585
-Node: Two Rules106687
-Node: More Complex108572
-Node: Statements/Lines110904
-Ref: Statements/Lines-Footnote-1115388
-Node: Other Features115653
-Node: When116589
-Ref: When-Footnote-1118343
-Node: Intro Summary118408
-Node: Invoking Gawk119292
-Node: Command Line120806
-Node: Options121604
-Ref: Options-Footnote-1139853
-Ref: Options-Footnote-2140084
-Node: Other Arguments140109
-Node: Naming Standard Input144120
-Node: Environment Variables145330
-Node: AWKPATH Variable145888
-Ref: AWKPATH Variable-Footnote-1149300
-Ref: AWKPATH Variable-Footnote-2149334
-Node: AWKLIBPATH Variable149705
-Ref: AWKLIBPATH Variable-Footnote-1151402
-Node: Other Environment Variables151777
-Node: Exit Status156065
-Node: Include Files156742
-Node: Loading Shared Libraries160432
-Node: Obsolete161860
-Node: Undocumented162480
-Node: Invoking Summary162777
-Node: Regexp165618
-Node: Regexp Usage167072
-Node: Escape Sequences169109
-Node: Regexp Operators175351
-Node: Regexp Operator Details175836
-Ref: Regexp Operator Details-Footnote-1183200
-Node: Interval Expressions183347
-Ref: Interval Expressions-Footnote-1185522
-Node: Bracket Expressions185620
-Ref: table-char-classes188096
-Node: Leftmost Longest191423
-Node: Computed Regexps192726
-Node: GNU Regexp Operators196153
-Node: Case-sensitivity199831
-Ref: Case-sensitivity-Footnote-1202697
-Ref: Case-sensitivity-Footnote-2202932
-Node: Regexp Summary203040
-Node: Reading Files204506
-Node: Records206775
-Node: awk split records207850
-Node: gawk split records212550
-Ref: gawk split records-Footnote-1217624
-Node: Fields217661
-Node: Nonconstant Fields220402
-Ref: Nonconstant Fields-Footnote-1222638
-Node: Changing Fields222842
-Node: Field Separators228873
-Node: Default Field Splitting231571
-Node: Regexp Field Splitting232689
-Node: Single Character Fields236366
-Node: Command Line Field Separator237426
-Node: Full Line Fields240644
-Ref: Full Line Fields-Footnote-1242166
-Ref: Full Line Fields-Footnote-2242212
-Node: Field Splitting Summary242313
-Node: Constant Size244387
-Node: Fixed width data245119
-Node: Skipping intervening248586
-Node: Allowing trailing data249384
-Node: Fields with fixed data250421
-Node: Splitting By Content251939
-Ref: Splitting By Content-Footnote-1255775
-Node: More CSV255938
-Node: FS versus FPAT257553
-Node: Testing field creation258713
-Node: Multiple Line260338
-Node: Getline266615
-Node: Plain Getline269084
-Node: Getline/Variable271657
-Node: Getline/File272808
-Node: Getline/Variable/File274196
-Ref: Getline/Variable/File-Footnote-1275801
-Node: Getline/Pipe275889
-Node: Getline/Variable/Pipe278593
-Node: Getline/Coprocess279728
-Node: Getline/Variable/Coprocess280995
-Node: Getline Notes281737
-Node: Getline Summary284534
-Ref: table-getline-variants284958
-Node: Read Timeout285707
-Ref: Read Timeout-Footnote-1289623
-Node: Retrying Input289681
-Node: Command-line directories290880
-Node: Input Summary291786
-Node: Input Exercises294958
-Node: Printing295392
-Node: Print297226
-Node: Print Examples298683
-Node: Output Separators301463
-Node: OFMT303480
-Node: Printf304836
-Node: Basic Printf305621
-Node: Control Letters307195
-Node: Format Modifiers312357
-Node: Printf Examples318372
-Node: Redirection320858
-Node: Special FD327699
-Ref: Special FD-Footnote-1330867
-Node: Special Files330941
-Node: Other Inherited Files331558
-Node: Special Network332559
-Node: Special Caveats333419
-Node: Close Files And Pipes334368
-Ref: table-close-pipe-return-values341275
-Ref: Close Files And Pipes-Footnote-1342089
-Ref: Close Files And Pipes-Footnote-2342237
-Node: Nonfatal342389
-Node: Output Summary344727
-Node: Output Exercises345949
-Node: Expressions346628
-Node: Values347816
-Node: Constants348494
-Node: Scalar Constants349185
-Ref: Scalar Constants-Footnote-1351695
-Node: Nondecimal-numbers351945
-Node: Regexp Constants354946
-Node: Using Constant Regexps355472
-Node: Standard Regexp Constants356094
-Node: Strong Regexp Constants359282
-Node: Variables362997
-Node: Using Variables363654
-Node: Assignment Options365564
-Node: Conversion368035
-Node: Strings And Numbers368559
-Ref: Strings And Numbers-Footnote-1371622
-Node: Locale influences conversions371731
-Ref: table-locale-affects374489
-Node: All Operators375108
-Node: Arithmetic Ops375737
-Node: Concatenation378453
-Ref: Concatenation-Footnote-1381300
-Node: Assignment Ops381407
-Ref: table-assign-ops386398
-Node: Increment Ops387712
-Node: Truth Values and Conditions391172
-Node: Truth Values392246
-Node: Typing and Comparison393294
-Node: Variable Typing394114
-Ref: Variable Typing-Footnote-1400577
-Ref: Variable Typing-Footnote-2400649
-Node: Comparison Operators400726
-Ref: table-relational-ops401145
-Node: POSIX String Comparison404641
-Ref: POSIX String Comparison-Footnote-1406336
-Ref: POSIX String Comparison-Footnote-2406475
-Node: Boolean Ops406559
-Ref: Boolean Ops-Footnote-1411041
-Node: Conditional Exp411133
-Node: Function Calls412869
-Node: Precedence416746
-Node: Locales420405
-Node: Expressions Summary422037
-Node: Patterns and Actions424610
-Node: Pattern Overview425730
-Node: Regexp Patterns427407
-Node: Expression Patterns427949
-Node: Ranges431730
-Node: BEGIN/END434838
-Node: Using BEGIN/END435599
-Ref: Using BEGIN/END-Footnote-1438353
-Node: I/O And BEGIN/END438459
-Node: BEGINFILE/ENDFILE440772
-Node: Empty444003
-Node: Using Shell Variables444320
-Node: Action Overview446594
-Node: Statements448919
-Node: If Statement450767
-Node: While Statement452262
-Node: Do Statement454290
-Node: For Statement455438
-Node: Switch Statement458693
-Node: Break Statement461134
-Node: Continue Statement463226
-Node: Next Statement465053
-Node: Nextfile Statement467436
-Node: Exit Statement470125
-Node: Built-in Variables472528
-Node: User-modified473661
-Node: Auto-set481428
-Ref: Auto-set-Footnote-1498130
-Ref: Auto-set-Footnote-2498336
-Node: ARGC and ARGV498392
-Node: Pattern Action Summary502605
-Node: Arrays505035
-Node: Array Basics506364
-Node: Array Intro507208
-Ref: figure-array-elements509183
-Ref: Array Intro-Footnote-1511888
-Node: Reference to Elements512016
-Node: Assigning Elements514480
-Node: Array Example514971
-Node: Scanning an Array516925
-Node: Controlling Scanning519947
-Ref: Controlling Scanning-Footnote-1526403
-Node: Numeric Array Subscripts526719
-Node: Uninitialized Subscripts528903
-Node: Delete530522
-Ref: Delete-Footnote-1533274
-Node: Multidimensional533331
-Node: Multiscanning536426
-Node: Arrays of Arrays538017
-Node: Arrays Summary542785
-Node: Functions544878
-Node: Built-in545916
-Node: Calling Built-in547069
-Node: Boolean Functions549065
-Node: Numeric Functions549619
-Ref: Numeric Functions-Footnote-1553646
-Ref: Numeric Functions-Footnote-2554294
-Ref: Numeric Functions-Footnote-3554342
-Node: String Functions554614
-Ref: String Functions-Footnote-1579456
-Ref: String Functions-Footnote-2579584
-Ref: String Functions-Footnote-3579832
-Node: Gory Details579919
-Ref: table-sub-escapes581710
-Ref: table-sub-proposed583230
-Ref: table-posix-sub584594
-Ref: table-gensub-escapes586136
-Ref: Gory Details-Footnote-1586960
-Node: I/O Functions587114
-Ref: table-system-return-values593568
-Ref: I/O Functions-Footnote-1595649
-Ref: I/O Functions-Footnote-2595797
-Node: Time Functions595917
-Ref: Time Functions-Footnote-1606588
-Ref: Time Functions-Footnote-2606656
-Ref: Time Functions-Footnote-3606814
-Ref: Time Functions-Footnote-4606925
-Ref: Time Functions-Footnote-5607037
-Ref: Time Functions-Footnote-6607264
-Node: Bitwise Functions607530
-Ref: table-bitwise-ops608124
-Ref: Bitwise Functions-Footnote-1614188
-Ref: Bitwise Functions-Footnote-2614361
-Node: Type Functions614552
-Node: I18N Functions618073
-Node: User-defined619724
-Node: Definition Syntax620536
-Ref: Definition Syntax-Footnote-1626230
-Node: Function Example626301
-Ref: Function Example-Footnote-1629223
-Node: Function Calling629245
-Node: Calling A Function629833
-Node: Variable Scope630791
-Node: Pass By Value/Reference633785
-Node: Function Caveats636429
-Ref: Function Caveats-Footnote-1638476
-Node: Return Statement638596
-Node: Dynamic Typing641575
-Node: Indirect Calls642505
-Node: Functions Summary653432
-Node: Library Functions656137
-Ref: Library Functions-Footnote-1659621
-Ref: Library Functions-Footnote-2659764
-Node: Library Names659935
-Ref: Library Names-Footnote-1663602
-Ref: Library Names-Footnote-2663825
-Node: General Functions663911
-Node: Strtonum Function665093
-Node: Assert Function668115
-Node: Round Function671441
-Node: Cliff Random Function672981
-Node: Ordinal Functions673997
-Ref: Ordinal Functions-Footnote-1677060
-Ref: Ordinal Functions-Footnote-2677312
-Node: Join Function677522
-Ref: Join Function-Footnote-1679292
-Node: Getlocaltime Function679492
-Node: Readfile Function683234
-Node: Shell Quoting685211
-Node: Isnumeric Function686639
-Node: Data File Management688027
-Node: Filetrans Function688659
-Node: Rewind Function692755
-Node: File Checking694664
-Ref: File Checking-Footnote-1695998
-Node: Empty Files696199
-Node: Ignoring Assigns698178
-Node: Getopt Function699728
-Ref: Getopt Function-Footnote-1715025
-Node: Passwd Functions715225
-Ref: Passwd Functions-Footnote-1724064
-Node: Group Functions724152
-Ref: Group Functions-Footnote-1732050
-Node: Walking Arrays732257
-Node: Library Functions Summary735265
-Node: Library Exercises736671
-Node: Sample Programs737136
-Node: Running Examples737906
-Node: Clones738634
-Node: Cut Program739858
-Node: Egrep Program749998
-Node: Id Program758999
-Node: Split Program768934
-Ref: Split Program-Footnote-1778827
-Node: Tee Program779000
-Node: Uniq Program781790
-Node: Wc Program789378
-Node: Bytes vs. Characters789765
-Node: Using extensions791313
-Node: wc program792067
-Node: Miscellaneous Programs796932
-Node: Dupword Program798145
-Node: Alarm Program800175
-Node: Translate Program805030
-Ref: Translate Program-Footnote-1809595
-Node: Labels Program809865
-Ref: Labels Program-Footnote-1813216
-Node: Word Sorting813300
-Node: History Sorting817372
-Node: Extract Program819597
-Node: Simple Sed827610
-Node: Igawk Program830684
-Ref: Igawk Program-Footnote-1845313
-Ref: Igawk Program-Footnote-2845515
-Ref: Igawk Program-Footnote-3845637
-Node: Anagram Program845752
-Node: Signature Program848814
-Node: Programs Summary850061
-Node: Programs Exercises851275
-Ref: Programs Exercises-Footnote-1855405
-Node: Advanced Features855491
-Node: Nondecimal Data857888
-Node: Boolean Typed Values859486
-Node: Array Sorting861367
-Node: Controlling Array Traversal862072
-Ref: Controlling Array Traversal-Footnote-1870440
-Node: Array Sorting Functions870558
-Ref: Array Sorting Functions-Footnote-1876469
-Node: Two-way I/O876665
-Ref: Two-way I/O-Footnote-1884391
-Ref: Two-way I/O-Footnote-2884578
-Node: TCP/IP Networking884660
-Node: Profiling887736
-Node: Persistent Memory897042
-Ref: Persistent Memory-Footnote-1904963
-Node: Extension Philosophy905090
-Node: Advanced Features Summary906577
-Node: Internationalization908749
-Node: I18N and L10N910423
-Node: Explaining gettext911110
-Ref: Explaining gettext-Footnote-1917002
-Ref: Explaining gettext-Footnote-2917187
-Node: Programmer i18n917352
-Ref: Programmer i18n-Footnote-1922301
-Node: Translator i18n922350
-Node: String Extraction923144
-Ref: String Extraction-Footnote-1924276
-Node: Printf Ordering924362
-Ref: Printf Ordering-Footnote-1927148
-Node: I18N Portability927212
-Ref: I18N Portability-Footnote-1929668
-Node: I18N Example929731
-Ref: I18N Example-Footnote-1933006
-Ref: I18N Example-Footnote-2933079
-Node: Gawk I18N933188
-Node: I18N Summary933810
-Node: Debugger935151
-Node: Debugging936151
-Node: Debugging Concepts936592
-Node: Debugging Terms938401
-Node: Awk Debugging940976
-Ref: Awk Debugging-Footnote-1941921
-Node: Sample Debugging Session942053
-Node: Debugger Invocation942587
-Node: Finding The Bug943973
-Node: List of Debugger Commands950447
-Node: Breakpoint Control951780
-Node: Debugger Execution Control955474
-Node: Viewing And Changing Data958836
-Node: Execution Stack962377
-Node: Debugger Info964014
-Node: Miscellaneous Debugger Commands968085
-Node: Readline Support973147
-Node: Limitations974043
-Node: Debugging Summary976597
-Node: Namespaces977876
-Node: Global Namespace978987
-Node: Qualified Names980385
-Node: Default Namespace981384
-Node: Changing The Namespace982125
-Node: Naming Rules983739
-Node: Internal Name Management985587
-Node: Namespace Example986629
-Node: Namespace And Features989191
-Node: Namespace Summary990626
-Node: Arbitrary Precision Arithmetic992103
-Node: Computer Arithmetic993590
-Ref: table-numeric-ranges997356
-Ref: table-floating-point-ranges997850
-Ref: Computer Arithmetic-Footnote-1998509
-Node: Math Definitions998566
-Ref: table-ieee-formats1001542
-Node: MPFR features1002110
-Node: MPFR On Parole1002555
-Ref: MPFR On Parole-Footnote-11003384
-Node: MPFR Intro1003539
-Node: FP Math Caution1005190
-Ref: FP Math Caution-Footnote-11006262
-Node: Inexactness of computations1006631
-Node: Inexact representation1007662
-Node: Comparing FP Values1009022
-Node: Errors accumulate1010263
-Node: Strange values1011719
-Ref: Strange values-Footnote-11014307
-Node: Getting Accuracy1014412
-Node: Try To Round1017122
-Node: Setting precision1018021
-Ref: table-predefined-precision-strings1018718
-Node: Setting the rounding mode1020549
-Ref: table-gawk-rounding-modes1020923
-Ref: Setting the rounding mode-Footnote-11024855
-Node: Arbitrary Precision Integers1025034
-Ref: Arbitrary Precision Integers-Footnote-11028209
-Node: Checking for MPFR1028358
-Node: POSIX Floating Point Problems1029832
-Ref: POSIX Floating Point Problems-Footnote-11034485
-Node: Floating point summary1034523
-Node: Dynamic Extensions1036713
-Node: Extension Intro1038266
-Node: Plugin License1039532
-Node: Extension Mechanism Outline1040329
-Ref: figure-load-extension1040768
-Ref: figure-register-new-function1042334
-Ref: figure-call-new-function1043427
-Node: Extension API Description1045490
-Node: Extension API Functions Introduction1047203
-Ref: table-api-std-headers1049039
-Node: General Data Types1053289
-Ref: General Data Types-Footnote-11061995
-Node: Memory Allocation Functions1062294
-Ref: Memory Allocation Functions-Footnote-11066795
-Node: Constructor Functions1066894
-Node: API Ownership of MPFR and GMP Values1070547
-Node: Registration Functions1072080
-Node: Extension Functions1072780
-Node: Exit Callback Functions1078102
-Node: Extension Version String1079352
-Node: Input Parsers1080015
-Node: Output Wrappers1092736
-Node: Two-way processors1097248
-Node: Printing Messages1099513
-Ref: Printing Messages-Footnote-11100684
-Node: Updating ERRNO1100837
-Node: Requesting Values1101576
-Ref: table-value-types-returned1102313
-Node: Accessing Parameters1103422
-Node: Symbol Table Access1104659
-Node: Symbol table by name1105171
-Ref: Symbol table by name-Footnote-11108196
-Node: Symbol table by cookie1108324
-Ref: Symbol table by cookie-Footnote-11112509
-Node: Cached values1112573
-Ref: Cached values-Footnote-11116109
-Node: Array Manipulation1116262
-Ref: Array Manipulation-Footnote-11117353
-Node: Array Data Types1117390
-Ref: Array Data Types-Footnote-11120048
-Node: Array Functions1120140
-Node: Flattening Arrays1124925
-Node: Creating Arrays1131901
-Node: Redirection API1136668
-Node: Extension API Variables1139501
-Node: Extension Versioning1140212
-Ref: gawk-api-version1140641
-Node: Extension GMP/MPFR Versioning1142373
-Node: Extension API Informational Variables1144001
-Node: Extension API Boilerplate1145074
-Node: Changes from API V11149048
-Node: Finding Extensions1150620
-Node: Extension Example1151179
-Node: Internal File Description1151977
-Node: Internal File Ops1156057
-Ref: Internal File Ops-Footnote-11167407
-Node: Using Internal File Ops1167547
-Ref: Using Internal File Ops-Footnote-11169930
-Node: Extension Samples1170204
-Node: Extension Sample File Functions1171733
-Node: Extension Sample Fnmatch1179382
-Node: Extension Sample Fork1180869
-Node: Extension Sample Inplace1182087
-Node: Extension Sample Ord1185713
-Node: Extension Sample Readdir1186549
-Ref: table-readdir-file-types1187438
-Node: Extension Sample Revout1188506
-Node: Extension Sample Rev2way1189095
-Node: Extension Sample Read write array1189835
-Node: Extension Sample Readfile1193000
-Node: Extension Sample Time1194095
-Node: Extension Sample API Tests1195847
-Node: gawkextlib1196339
-Node: Extension summary1199257
-Node: Extension Exercises1202959
-Node: Language History1204201
-Node: V7/SVR3.11205857
-Node: SVR41208009
-Node: POSIX1209443
-Node: BTL1210824
-Node: POSIX/GNU1211553
-Node: Feature History1217478
-Node: Common Extensions1235217
-Node: Ranges and Locales1236500
-Ref: Ranges and Locales-Footnote-11241116
-Ref: Ranges and Locales-Footnote-21241143
-Ref: Ranges and Locales-Footnote-31241378
-Node: Contributors1241601
-Node: History summary1247598
-Node: Installation1248978
-Node: Gawk Distribution1249922
-Node: Getting1250406
-Node: Extracting1251369
-Node: Distribution contents1253007
-Node: Unix Installation1260513
-Node: Quick Installation1261317
-Node: Compiling with MPFR1263737
-Node: Shell Startup Files1264427
-Node: Additional Configuration Options1265516
-Node: Configuration Philosophy1267831
-Node: Compiling from Git1270227
-Node: Building the Documentation1270782
-Node: Non-Unix Installation1272166
-Node: PC Installation1272626
-Node: PC Binary Installation1273467
-Node: PC Compiling1274340
-Node: PC Using1275446
-Node: Cygwin1278942
-Node: MSYS1280166
-Node: VMS Installation1280768
-Node: VMS Compilation1281487
-Ref: VMS Compilation-Footnote-11282894
-Node: VMS Dynamic Extensions1282952
-Ref: VMS Dynamic Extensions-Footnote-11284676
-Node: VMS Installation Details1284766
-Node: VMS Running1287028
-Node: VMS GNV1291307
-Node: Bugs1292021
-Node: Bug definition1292933
-Node: Bug address1296435
-Node: Usenet1299954
-Node: Performance bugs1301143
-Node: Asking for help1304064
-Node: Maintainers1306031
-Node: Other Versions1307038
-Node: Installation summary1315308
-Node: Notes1316665
-Node: Compatibility Mode1317459
-Node: Additions1318241
-Node: Accessing The Source1319166
-Node: Adding Code1320603
-Node: New Ports1327418
-Node: Derived Files1331793
-Ref: Derived Files-Footnote-11337453
-Ref: Derived Files-Footnote-21337488
-Ref: Derived Files-Footnote-31338086
-Node: Future Extensions1338200
-Node: Implementation Limitations1338858
-Node: Extension Design1340068
-Node: Old Extension Problems1341212
-Ref: Old Extension Problems-Footnote-11342730
-Node: Extension New Mechanism Goals1342787
-Ref: Extension New Mechanism Goals-Footnote-11346151
-Node: Extension Other Design Decisions1346340
-Node: Extension Future Growth1348453
-Node: Notes summary1349059
-Node: Basic Concepts1350217
-Node: Basic High Level1350898
-Ref: figure-general-flow1351180
-Ref: figure-process-flow1351866
-Ref: Basic High Level-Footnote-11355168
-Node: Basic Data Typing1355353
-Node: Glossary1358681
-Node: Copying1390568
-Node: GNU Free Documentation License1428111
-Node: Index1453231
+Node: Foreword345854
+Node: Foreword450296
+Node: Preface51828
+Ref: Preface-Footnote-154687
+Ref: Preface-Footnote-254796
+Ref: Preface-Footnote-355030
+Node: History55172
+Node: Names57524
+Ref: Names-Footnote-158628
+Node: This Manual58775
+Ref: This Manual-Footnote-165414
+Node: Conventions65514
+Node: Manual History67883
+Ref: Manual History-Footnote-170880
+Ref: Manual History-Footnote-270921
+Node: How To Contribute70995
+Node: Acknowledgments71917
+Node: Getting Started76854
+Node: Running gawk79293
+Node: One-shot80483
+Node: Read Terminal81746
+Node: Long83739
+Node: Executable Scripts85252
+Ref: Executable Scripts-Footnote-187885
+Node: Comments87988
+Node: Quoting90472
+Node: DOS Quoting95998
+Node: Sample Data Files98054
+Node: Very Simple100649
+Node: Two Rules106751
+Node: More Complex108636
+Node: Statements/Lines110968
+Ref: Statements/Lines-Footnote-1115452
+Node: Other Features115717
+Node: When116653
+Ref: When-Footnote-1118407
+Node: Intro Summary118472
+Node: Invoking Gawk119356
+Node: Command Line120870
+Node: Options121668
+Ref: Options-Footnote-1139917
+Ref: Options-Footnote-2140148
+Node: Other Arguments140173
+Node: Naming Standard Input144184
+Node: Environment Variables145394
+Node: AWKPATH Variable145952
+Ref: AWKPATH Variable-Footnote-1149364
+Ref: AWKPATH Variable-Footnote-2149398
+Node: AWKLIBPATH Variable149769
+Ref: AWKLIBPATH Variable-Footnote-1151466
+Node: Other Environment Variables151841
+Node: Exit Status156129
+Node: Include Files156806
+Node: Loading Shared Libraries160496
+Node: Obsolete161924
+Node: Undocumented162544
+Node: Invoking Summary162841
+Node: Regexp165682
+Node: Regexp Usage167136
+Node: Escape Sequences169173
+Node: Regexp Operators175415
+Node: Regexp Operator Details175900
+Ref: Regexp Operator Details-Footnote-1183264
+Node: Interval Expressions183411
+Ref: Interval Expressions-Footnote-1185586
+Node: Bracket Expressions185684
+Ref: table-char-classes188160
+Node: Leftmost Longest191487
+Node: Computed Regexps192790
+Node: GNU Regexp Operators196217
+Node: Case-sensitivity199895
+Ref: Case-sensitivity-Footnote-1202761
+Ref: Case-sensitivity-Footnote-2202996
+Node: Regexp Summary203104
+Node: Reading Files204570
+Node: Records206839
+Node: awk split records207914
+Node: gawk split records212614
+Ref: gawk split records-Footnote-1217688
+Node: Fields217725
+Node: Nonconstant Fields220466
+Ref: Nonconstant Fields-Footnote-1222702
+Node: Changing Fields222906
+Node: Field Separators228937
+Node: Default Field Splitting231692
+Node: Regexp Field Splitting232810
+Node: Single Character Fields236487
+Node: Comma Separated Fields237541
+Ref: table-csv-examples238805
+Node: Command Line Field Separator239268
+Node: Full Line Fields242485
+Ref: Full Line Fields-Footnote-1244007
+Ref: Full Line Fields-Footnote-2244053
+Node: Field Splitting Summary244154
+Node: Constant Size246334
+Node: Fixed width data247066
+Node: Skipping intervening250533
+Node: Allowing trailing data251331
+Node: Fields with fixed data252368
+Node: Splitting By Content253886
+Ref: Splitting By Content-Footnote-1257722
+Node: More CSV257885
+Node: FS versus FPAT259500
+Node: Testing field creation260660
+Node: Multiple Line262285
+Node: Getline268562
+Node: Plain Getline271031
+Node: Getline/Variable273604
+Node: Getline/File274755
+Node: Getline/Variable/File276143
+Ref: Getline/Variable/File-Footnote-1277748
+Node: Getline/Pipe277836
+Node: Getline/Variable/Pipe280540
+Node: Getline/Coprocess281675
+Node: Getline/Variable/Coprocess282942
+Node: Getline Notes283684
+Node: Getline Summary286481
+Ref: table-getline-variants286905
+Node: Read Timeout287654
+Ref: Read Timeout-Footnote-1291570
+Node: Retrying Input291628
+Node: Command-line directories292827
+Node: Input Summary293733
+Node: Input Exercises296905
+Node: Printing297339
+Node: Print299173
+Node: Print Examples300630
+Node: Output Separators303410
+Node: OFMT305427
+Node: Printf306783
+Node: Basic Printf307568
+Node: Control Letters309142
+Node: Format Modifiers314304
+Node: Printf Examples320319
+Node: Redirection322805
+Node: Special FD329646
+Ref: Special FD-Footnote-1332814
+Node: Special Files332888
+Node: Other Inherited Files333505
+Node: Special Network334506
+Node: Special Caveats335366
+Node: Close Files And Pipes336315
+Ref: table-close-pipe-return-values343222
+Ref: Close Files And Pipes-Footnote-1344036
+Ref: Close Files And Pipes-Footnote-2344184
+Node: Nonfatal344336
+Node: Output Summary346674
+Node: Output Exercises347896
+Node: Expressions348575
+Node: Values349763
+Node: Constants350441
+Node: Scalar Constants351132
+Ref: Scalar Constants-Footnote-1353642
+Node: Nondecimal-numbers353892
+Node: Regexp Constants356893
+Node: Using Constant Regexps357419
+Node: Standard Regexp Constants358041
+Node: Strong Regexp Constants361229
+Node: Variables364944
+Node: Using Variables365601
+Node: Assignment Options367511
+Node: Conversion369982
+Node: Strings And Numbers370506
+Ref: Strings And Numbers-Footnote-1373569
+Node: Locale influences conversions373678
+Ref: table-locale-affects376436
+Node: All Operators377055
+Node: Arithmetic Ops377684
+Node: Concatenation380400
+Ref: Concatenation-Footnote-1383247
+Node: Assignment Ops383354
+Ref: table-assign-ops388345
+Node: Increment Ops389659
+Node: Truth Values and Conditions393119
+Node: Truth Values394193
+Node: Typing and Comparison395241
+Node: Variable Typing396061
+Ref: Variable Typing-Footnote-1402524
+Ref: Variable Typing-Footnote-2402596
+Node: Comparison Operators402673
+Ref: table-relational-ops403092
+Node: POSIX String Comparison406588
+Ref: POSIX String Comparison-Footnote-1408283
+Ref: POSIX String Comparison-Footnote-2408422
+Node: Boolean Ops408506
+Ref: Boolean Ops-Footnote-1412988
+Node: Conditional Exp413080
+Node: Function Calls414816
+Node: Precedence418693
+Node: Locales422352
+Node: Expressions Summary423984
+Node: Patterns and Actions426557
+Node: Pattern Overview427677
+Node: Regexp Patterns429354
+Node: Expression Patterns429896
+Node: Ranges433677
+Node: BEGIN/END436785
+Node: Using BEGIN/END437546
+Ref: Using BEGIN/END-Footnote-1440300
+Node: I/O And BEGIN/END440406
+Node: BEGINFILE/ENDFILE442719
+Node: Empty445950
+Node: Using Shell Variables446267
+Node: Action Overview448541
+Node: Statements450866
+Node: If Statement452714
+Node: While Statement454209
+Node: Do Statement456237
+Node: For Statement457385
+Node: Switch Statement460640
+Node: Break Statement463081
+Node: Continue Statement465173
+Node: Next Statement467000
+Node: Nextfile Statement469383
+Node: Exit Statement472072
+Node: Built-in Variables474475
+Node: User-modified475608
+Node: Auto-set483375
+Ref: Auto-set-Footnote-1500077
+Ref: Auto-set-Footnote-2500283
+Node: ARGC and ARGV500339
+Node: Pattern Action Summary504552
+Node: Arrays506982
+Node: Array Basics508311
+Node: Array Intro509155
+Ref: figure-array-elements511130
+Ref: Array Intro-Footnote-1513835
+Node: Reference to Elements513963
+Node: Assigning Elements516427
+Node: Array Example516918
+Node: Scanning an Array518872
+Node: Controlling Scanning521894
+Ref: Controlling Scanning-Footnote-1528350
+Node: Numeric Array Subscripts528666
+Node: Uninitialized Subscripts530850
+Node: Delete532469
+Ref: Delete-Footnote-1535221
+Node: Multidimensional535278
+Node: Multiscanning538373
+Node: Arrays of Arrays539964
+Node: Arrays Summary544732
+Node: Functions546825
+Node: Built-in547863
+Node: Calling Built-in549016
+Node: Boolean Functions551012
+Node: Numeric Functions551566
+Ref: Numeric Functions-Footnote-1555593
+Ref: Numeric Functions-Footnote-2556241
+Ref: Numeric Functions-Footnote-3556289
+Node: String Functions556561
+Ref: String Functions-Footnote-1581403
+Ref: String Functions-Footnote-2581531
+Ref: String Functions-Footnote-3581779
+Node: Gory Details581866
+Ref: table-sub-escapes583657
+Ref: table-sub-proposed585177
+Ref: table-posix-sub586541
+Ref: table-gensub-escapes588083
+Ref: Gory Details-Footnote-1588907
+Node: I/O Functions589061
+Ref: table-system-return-values595515
+Ref: I/O Functions-Footnote-1597596
+Ref: I/O Functions-Footnote-2597744
+Node: Time Functions597864
+Ref: Time Functions-Footnote-1608535
+Ref: Time Functions-Footnote-2608603
+Ref: Time Functions-Footnote-3608761
+Ref: Time Functions-Footnote-4608872
+Ref: Time Functions-Footnote-5608984
+Ref: Time Functions-Footnote-6609211
+Node: Bitwise Functions609477
+Ref: table-bitwise-ops610071
+Ref: Bitwise Functions-Footnote-1616135
+Ref: Bitwise Functions-Footnote-2616308
+Node: Type Functions616499
+Node: I18N Functions620020
+Node: User-defined621671
+Node: Definition Syntax622483
+Ref: Definition Syntax-Footnote-1628177
+Node: Function Example628248
+Ref: Function Example-Footnote-1631170
+Node: Function Calling631192
+Node: Calling A Function631780
+Node: Variable Scope632738
+Node: Pass By Value/Reference635732
+Node: Function Caveats638376
+Ref: Function Caveats-Footnote-1640423
+Node: Return Statement640543
+Node: Dynamic Typing643522
+Node: Indirect Calls644452
+Node: Functions Summary655379
+Node: Library Functions658084
+Ref: Library Functions-Footnote-1661568
+Ref: Library Functions-Footnote-2661711
+Node: Library Names661882
+Ref: Library Names-Footnote-1665549
+Ref: Library Names-Footnote-2665772
+Node: General Functions665858
+Node: Strtonum Function667040
+Node: Assert Function670062
+Node: Round Function673388
+Node: Cliff Random Function674928
+Node: Ordinal Functions675944
+Ref: Ordinal Functions-Footnote-1679007
+Ref: Ordinal Functions-Footnote-2679259
+Node: Join Function679469
+Ref: Join Function-Footnote-1681239
+Node: Getlocaltime Function681439
+Node: Readfile Function685181
+Node: Shell Quoting687158
+Node: Isnumeric Function688586
+Node: Data File Management689974
+Node: Filetrans Function690606
+Node: Rewind Function694702
+Node: File Checking696611
+Ref: File Checking-Footnote-1697945
+Node: Empty Files698146
+Node: Ignoring Assigns700125
+Node: Getopt Function701675
+Ref: Getopt Function-Footnote-1716972
+Node: Passwd Functions717172
+Ref: Passwd Functions-Footnote-1726011
+Node: Group Functions726099
+Ref: Group Functions-Footnote-1733997
+Node: Walking Arrays734204
+Node: Library Functions Summary737212
+Node: Library Exercises738618
+Node: Sample Programs739083
+Node: Running Examples739853
+Node: Clones740581
+Node: Cut Program741805
+Node: Egrep Program751945
+Node: Id Program760946
+Node: Split Program770881
+Ref: Split Program-Footnote-1780774
+Node: Tee Program780947
+Node: Uniq Program783737
+Node: Wc Program791325
+Node: Bytes vs. Characters791712
+Node: Using extensions793260
+Node: wc program794014
+Node: Miscellaneous Programs798879
+Node: Dupword Program800092
+Node: Alarm Program802122
+Node: Translate Program806977
+Ref: Translate Program-Footnote-1811542
+Node: Labels Program811812
+Ref: Labels Program-Footnote-1815163
+Node: Word Sorting815247
+Node: History Sorting819319
+Node: Extract Program821544
+Node: Simple Sed829557
+Node: Igawk Program832631
+Ref: Igawk Program-Footnote-1847260
+Ref: Igawk Program-Footnote-2847462
+Ref: Igawk Program-Footnote-3847584
+Node: Anagram Program847699
+Node: Signature Program850761
+Node: Programs Summary852008
+Node: Programs Exercises853222
+Ref: Programs Exercises-Footnote-1857352
+Node: Advanced Features857438
+Node: Nondecimal Data859835
+Node: Boolean Typed Values861433
+Node: Array Sorting863314
+Node: Controlling Array Traversal864019
+Ref: Controlling Array Traversal-Footnote-1872387
+Node: Array Sorting Functions872505
+Ref: Array Sorting Functions-Footnote-1878416
+Node: Two-way I/O878612
+Ref: Two-way I/O-Footnote-1886338
+Ref: Two-way I/O-Footnote-2886525
+Node: TCP/IP Networking886607
+Node: Profiling889683
+Node: Persistent Memory898989
+Ref: Persistent Memory-Footnote-1906910
+Node: Extension Philosophy907037
+Node: Advanced Features Summary908524
+Node: Internationalization910696
+Node: I18N and L10N912370
+Node: Explaining gettext913057
+Ref: Explaining gettext-Footnote-1918949
+Ref: Explaining gettext-Footnote-2919134
+Node: Programmer i18n919299
+Ref: Programmer i18n-Footnote-1924248
+Node: Translator i18n924297
+Node: String Extraction925091
+Ref: String Extraction-Footnote-1926223
+Node: Printf Ordering926309
+Ref: Printf Ordering-Footnote-1929095
+Node: I18N Portability929159
+Ref: I18N Portability-Footnote-1931615
+Node: I18N Example931678
+Ref: I18N Example-Footnote-1934953
+Ref: I18N Example-Footnote-2935026
+Node: Gawk I18N935135
+Node: I18N Summary935757
+Node: Debugger937098
+Node: Debugging938098
+Node: Debugging Concepts938539
+Node: Debugging Terms940348
+Node: Awk Debugging942923
+Ref: Awk Debugging-Footnote-1943868
+Node: Sample Debugging Session944000
+Node: Debugger Invocation944534
+Node: Finding The Bug945920
+Node: List of Debugger Commands952394
+Node: Breakpoint Control953727
+Node: Debugger Execution Control957421
+Node: Viewing And Changing Data960783
+Node: Execution Stack964324
+Node: Debugger Info965961
+Node: Miscellaneous Debugger Commands970032
+Node: Readline Support975094
+Node: Limitations975990
+Node: Debugging Summary978544
+Node: Namespaces979823
+Node: Global Namespace980934
+Node: Qualified Names982332
+Node: Default Namespace983331
+Node: Changing The Namespace984072
+Node: Naming Rules985686
+Node: Internal Name Management987534
+Node: Namespace Example988576
+Node: Namespace And Features991138
+Node: Namespace Summary992573
+Node: Arbitrary Precision Arithmetic994050
+Node: Computer Arithmetic995537
+Ref: table-numeric-ranges999303
+Ref: table-floating-point-ranges999797
+Ref: Computer Arithmetic-Footnote-11000456
+Node: Math Definitions1000513
+Ref: table-ieee-formats1003489
+Node: MPFR features1004057
+Node: MPFR On Parole1004502
+Ref: MPFR On Parole-Footnote-11005331
+Node: MPFR Intro1005486
+Node: FP Math Caution1007137
+Ref: FP Math Caution-Footnote-11008209
+Node: Inexactness of computations1008578
+Node: Inexact representation1009609
+Node: Comparing FP Values1010969
+Node: Errors accumulate1012210
+Node: Strange values1013666
+Ref: Strange values-Footnote-11016254
+Node: Getting Accuracy1016359
+Node: Try To Round1019069
+Node: Setting precision1019968
+Ref: table-predefined-precision-strings1020665
+Node: Setting the rounding mode1022496
+Ref: table-gawk-rounding-modes1022870
+Ref: Setting the rounding mode-Footnote-11026802
+Node: Arbitrary Precision Integers1026981
+Ref: Arbitrary Precision Integers-Footnote-11030156
+Node: Checking for MPFR1030305
+Node: POSIX Floating Point Problems1031779
+Ref: POSIX Floating Point Problems-Footnote-11036432
+Node: Floating point summary1036470
+Node: Dynamic Extensions1038660
+Node: Extension Intro1040213
+Node: Plugin License1041479
+Node: Extension Mechanism Outline1042276
+Ref: figure-load-extension1042715
+Ref: figure-register-new-function1044281
+Ref: figure-call-new-function1045374
+Node: Extension API Description1047437
+Node: Extension API Functions Introduction1049150
+Ref: table-api-std-headers1050986
+Node: General Data Types1055236
+Ref: General Data Types-Footnote-11063942
+Node: Memory Allocation Functions1064241
+Ref: Memory Allocation Functions-Footnote-11068742
+Node: Constructor Functions1068841
+Node: API Ownership of MPFR and GMP Values1072494
+Node: Registration Functions1074027
+Node: Extension Functions1074727
+Node: Exit Callback Functions1080049
+Node: Extension Version String1081299
+Node: Input Parsers1081962
+Node: Output Wrappers1094683
+Node: Two-way processors1099195
+Node: Printing Messages1101460
+Ref: Printing Messages-Footnote-11102631
+Node: Updating ERRNO1102784
+Node: Requesting Values1103523
+Ref: table-value-types-returned1104260
+Node: Accessing Parameters1105369
+Node: Symbol Table Access1106606
+Node: Symbol table by name1107118
+Ref: Symbol table by name-Footnote-11110143
+Node: Symbol table by cookie1110271
+Ref: Symbol table by cookie-Footnote-11114456
+Node: Cached values1114520
+Ref: Cached values-Footnote-11118056
+Node: Array Manipulation1118209
+Ref: Array Manipulation-Footnote-11119300
+Node: Array Data Types1119337
+Ref: Array Data Types-Footnote-11121995
+Node: Array Functions1122087
+Node: Flattening Arrays1126872
+Node: Creating Arrays1133848
+Node: Redirection API1138615
+Node: Extension API Variables1141448
+Node: Extension Versioning1142159
+Ref: gawk-api-version1142588
+Node: Extension GMP/MPFR Versioning1144320
+Node: Extension API Informational Variables1145948
+Node: Extension API Boilerplate1147021
+Node: Changes from API V11150995
+Node: Finding Extensions1152567
+Node: Extension Example1153126
+Node: Internal File Description1153924
+Node: Internal File Ops1158004
+Ref: Internal File Ops-Footnote-11169354
+Node: Using Internal File Ops1169494
+Ref: Using Internal File Ops-Footnote-11171877
+Node: Extension Samples1172151
+Node: Extension Sample File Functions1173680
+Node: Extension Sample Fnmatch1181329
+Node: Extension Sample Fork1182816
+Node: Extension Sample Inplace1184034
+Node: Extension Sample Ord1187660
+Node: Extension Sample Readdir1188496
+Ref: table-readdir-file-types1189385
+Node: Extension Sample Revout1190453
+Node: Extension Sample Rev2way1191042
+Node: Extension Sample Read write array1191782
+Node: Extension Sample Readfile1194947
+Node: Extension Sample Time1196042
+Node: Extension Sample API Tests1197794
+Node: gawkextlib1198286
+Node: Extension summary1201204
+Node: Extension Exercises1204906
+Node: Language History1206148
+Node: V7/SVR3.11207804
+Node: SVR41209956
+Node: POSIX1211390
+Node: BTL1212771
+Node: POSIX/GNU1213500
+Node: Feature History1219425
+Node: Common Extensions1237164
+Node: Ranges and Locales1238447
+Ref: Ranges and Locales-Footnote-11243063
+Ref: Ranges and Locales-Footnote-21243090
+Ref: Ranges and Locales-Footnote-31243325
+Node: Contributors1243548
+Node: History summary1249545
+Node: Installation1250925
+Node: Gawk Distribution1251869
+Node: Getting1252353
+Node: Extracting1253316
+Node: Distribution contents1254954
+Node: Unix Installation1262460
+Node: Quick Installation1263264
+Node: Compiling with MPFR1265684
+Node: Shell Startup Files1266374
+Node: Additional Configuration Options1267463
+Node: Configuration Philosophy1269778
+Node: Compiling from Git1272174
+Node: Building the Documentation1272729
+Node: Non-Unix Installation1274113
+Node: PC Installation1274573
+Node: PC Binary Installation1275414
+Node: PC Compiling1276287
+Node: PC Using1277393
+Node: Cygwin1280889
+Node: MSYS1282113
+Node: VMS Installation1282715
+Node: VMS Compilation1283434
+Ref: VMS Compilation-Footnote-11284841
+Node: VMS Dynamic Extensions1284899
+Ref: VMS Dynamic Extensions-Footnote-11286623
+Node: VMS Installation Details1286713
+Node: VMS Running1288975
+Node: VMS GNV1293254
+Node: Bugs1293968
+Node: Bug definition1294880
+Node: Bug address1298382
+Node: Usenet1301901
+Node: Performance bugs1303090
+Node: Asking for help1306011
+Node: Maintainers1307978
+Node: Other Versions1308985
+Node: Installation summary1317255
+Node: Notes1318612
+Node: Compatibility Mode1319406
+Node: Additions1320188
+Node: Accessing The Source1321113
+Node: Adding Code1322550
+Node: New Ports1329365
+Node: Derived Files1333740
+Ref: Derived Files-Footnote-11339400
+Ref: Derived Files-Footnote-21339435
+Ref: Derived Files-Footnote-31340033
+Node: Future Extensions1340147
+Node: Implementation Limitations1340805
+Node: Extension Design1342015
+Node: Old Extension Problems1343159
+Ref: Old Extension Problems-Footnote-11344677
+Node: Extension New Mechanism Goals1344734
+Ref: Extension New Mechanism Goals-Footnote-11348098
+Node: Extension Other Design Decisions1348287
+Node: Extension Future Growth1350400
+Node: Notes summary1351006
+Node: Basic Concepts1352164
+Node: Basic High Level1352845
+Ref: figure-general-flow1353127
+Ref: figure-process-flow1353813
+Ref: Basic High Level-Footnote-11357115
+Node: Basic Data Typing1357300
+Node: Glossary1360628
+Node: Copying1392515
+Node: GNU Free Documentation License1430058
+Node: Index1455178
End Tag Table
diff --git a/doc/gawk.texi b/doc/gawk.texi
index 61e740fc..7b37f89a 100644
--- a/doc/gawk.texi
+++ b/doc/gawk.texi
@@ -568,6 +568,7 @@ particular records in a file and perform operations upon
them.
* Regexp Field Splitting:: Using regexps as the field separator.
* Single Character Fields:: Making each character a separate
field.
+* Comma Separated Fields:: Working with CSV files.
* Command Line Field Separator:: Setting @code{FS} from the command
line.
* Full Line Fields:: Making the full line be a single
@@ -7758,6 +7759,7 @@ with a statement such as @samp{$1 = $1}, as described
earlier.
* Default Field Splitting:: How fields are normally separated.
* Regexp Field Splitting:: Using regexps as the field separator.
* Single Character Fields:: Making each character a separate field.
+* Comma Separated Fields:: Working with CSV files.
* Command Line Field Separator:: Setting @code{FS} from the command line.
* Full Line Fields:: Making the full line be a single field.
* Field Splitting Summary:: Some final points and a summary table.
@@ -8014,6 +8016,45 @@ In compatibility mode
if @code{FS} is the null string, then @command{gawk} also
behaves this way.
+@node Comma Separated Fields
+@subsection Working With Comma Separated Value Files
+
+Many commonly-used tools use a comma to separate fields, instead of whitespace.
+This is particularly true of popular spreadsheet programs. There is no
+universally accepted standard for the format of these files, although
+@uref{http://www.ietf.org/rfc/rfc4180.txt, RFC 4180} lists the common
+practices.
+
+For decades, anyone wishing to work with CSV files and @command{awk}
+had to ``roll their own'' solution. (For example, @pxref{Splitting By
Content}).
+In 2023, Brian Kernighan decided to add basic CSV support to his version of
+@command{awk}. In order to keep up, @command{gawk} too provides the same
+support as his version.
+To use CSV data, set @code{FS} equal to a string with a single comma, like so:
@samp{FS = ","}.
+
+Fields in CSV files are separated by commas. In order to allow a comma
+to appear inside a field (i.e., as data), the field may be quoted
+by beginning and ending it with double quotes. In order to allow a double
+quote inside a double-quoted field, two double quotes are used.
+@ref{table-csv-examples} shows some examples.
+
+@float Table,table-csv-examples
+@caption{Examples of CSV data}
+@multitable @columnfractions .3 .3
+@headitem Input @tab Field Contents
+@item @code{abc def} @tab @code{abc def}
+@item @code{"quoted data"} @tab @code{quoted data}
+@item @code{"quoted, data"} @tab @code{quoted, data}
+@item @code{"She said ""Stop!""."} @tab @code{She said "Stop!".}
+@item @code{She said "Stop!".} @tab @code{She said "Stop!".}
+@end multitable
+@end float
+
+The double-quote that starts a quoted field must be the first
+character after the comma.
+
+This featue is disabled in POSIX mode.
+
@node Command Line Field Separator
@subsection Setting @code{FS} from the Command Line
@cindex @option{-F} option @subentry command-line
@@ -8260,6 +8301,10 @@ of @code{FS} (@samp{==} means ``is equal to''):
Fields are separated by runs of whitespace. Leading and trailing
whitespace are ignored. This is the default.
+@item FS == ","
+Fields are separated by commas, with quoting of fields
+and special rules involved.
+
@item FS == @var{any other single character}
Fields are separated by each occurrence of the character. Multiple
successive occurrences delimit empty fields, as do leading and
diff --git a/doc/gawktexi.in b/doc/gawktexi.in
index a9274424..4d14f6dc 100644
--- a/doc/gawktexi.in
+++ b/doc/gawktexi.in
@@ -563,6 +563,7 @@ particular records in a file and perform operations upon
them.
* Regexp Field Splitting:: Using regexps as the field separator.
* Single Character Fields:: Making each character a separate
field.
+* Comma Separated Fields:: Working with CSV files.
* Command Line Field Separator:: Setting @code{FS} from the command
line.
* Full Line Fields:: Making the full line be a single
@@ -7323,6 +7324,7 @@ with a statement such as @samp{$1 = $1}, as described
earlier.
* Default Field Splitting:: How fields are normally separated.
* Regexp Field Splitting:: Using regexps as the field separator.
* Single Character Fields:: Making each character a separate field.
+* Comma Separated Fields:: Working with CSV files.
* Command Line Field Separator:: Setting @code{FS} from the command line.
* Full Line Fields:: Making the full line be a single field.
* Field Splitting Summary:: Some final points and a summary table.
@@ -7579,6 +7581,45 @@ In compatibility mode
if @code{FS} is the null string, then @command{gawk} also
behaves this way.
+@node Comma Separated Fields
+@subsection Working With Comma Separated Value Files
+
+Many commonly-used tools use a comma to separate fields, instead of whitespace.
+This is particularly true of popular spreadsheet programs. There is no
+universally accepted standard for the format of these files, although
+@uref{http://www.ietf.org/rfc/rfc4180.txt, RFC 4180} lists the common
+practices.
+
+For decades, anyone wishing to work with CSV files and @command{awk}
+had to ``roll their own'' solution. (For example, @pxref{Splitting By
Content}).
+In 2023, Brian Kernighan decided to add basic CSV support to his version of
+@command{awk}. In order to keep up, @command{gawk} too provides the same
+support as his version.
+To use CSV data, set @code{FS} equal to a string with a single comma, like so:
@samp{FS = ","}.
+
+Fields in CSV files are separated by commas. In order to allow a comma
+to appear inside a field (i.e., as data), the field may be quoted
+by beginning and ending it with double quotes. In order to allow a double
+quote inside a double-quoted field, two double quotes are used.
+@ref{table-csv-examples} shows some examples.
+
+@float Table,table-csv-examples
+@caption{Examples of CSV data}
+@multitable @columnfractions .3 .3
+@headitem Input @tab Field Contents
+@item @code{abc def} @tab @code{abc def}
+@item @code{"quoted data"} @tab @code{quoted data}
+@item @code{"quoted, data"} @tab @code{quoted, data}
+@item @code{"She said ""Stop!""."} @tab @code{She said "Stop!".}
+@item @code{She said "Stop!".} @tab @code{She said "Stop!".}
+@end multitable
+@end float
+
+The double-quote that starts a quoted field must be the first
+character after the comma.
+
+This featue is disabled in POSIX mode.
+
@node Command Line Field Separator
@subsection Setting @code{FS} from the Command Line
@cindex @option{-F} option @subentry command-line
@@ -7765,6 +7806,10 @@ of @code{FS} (@samp{==} means ``is equal to''):
Fields are separated by runs of whitespace. Leading and trailing
whitespace are ignored. This is the default.
+@item FS == ","
+Fields are separated by commas, with quoting of fields
+and special rules involved.
+
@item FS == @var{any other single character}
Fields are separated by each occurrence of the character. Multiple
successive occurrences delimit empty fields, as do leading and
-----------------------------------------------------------------------
Summary of changes:
doc/ChangeLog | 8 +
doc/gawk.info | 1310 +++++++++++++++++++++++++++++--------------------------
doc/gawk.texi | 45 ++
doc/gawktexi.in | 45 ++
4 files changed, 778 insertions(+), 630 deletions(-)
hooks/post-receive
--
gawk
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [SCM] gawk branch, feature/bwk-csv, updated. gawk-4.1.0-4898-g5ac109c8,
Arnold Robbins <=