[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[SCM] gawk branch, gawk-5.1-stable, updated. gawk-4.1.0-4173-g45c17db
From: |
Arnold Robbins |
Subject: |
[SCM] gawk branch, gawk-5.1-stable, updated. gawk-4.1.0-4173-g45c17db |
Date: |
Sat, 28 Nov 2020 13:49:00 -0500 (EST) |
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.1-stable has been updated
via 45c17dbafdca47c53e812008bade3f7a13115756 (commit)
via dff7cb280f153e71d2ed187521da52c3fca04fe5 (commit)
from d04f08bb8474e44417e739c7a03fb9690a9e22d8 (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=45c17dbafdca47c53e812008bade3f7a13115756
commit 45c17dbafdca47c53e812008bade3f7a13115756
Author: Arnold D. Robbins <arnold@skeeve.com>
Date: Sat Nov 28 20:48:43 2020 +0200
More edits in sample programs chapter.
diff --git a/awklib/eg/prog/cut.awk b/awklib/eg/prog/cut.awk
index 1ec8928..b0987b3 100644
--- a/awklib/eg/prog/cut.awk
+++ b/awklib/eg/prog/cut.awk
@@ -4,9 +4,9 @@
# May 1993
# Options:
+# -c list Cut characters
# -f list Cut fields
# -d c Field delimiter character
-# -c list Cut characters
#
# -s Suppress lines without the delimiter
#
diff --git a/awklib/eg/prog/split.awk b/awklib/eg/prog/split.awk
index 8714dad..1678004 100644
--- a/awklib/eg/prog/split.awk
+++ b/awklib/eg/prog/split.awk
@@ -7,10 +7,12 @@
# Revised slightly, May 2014
# Rewritten September 2020
-function usage()
+
+function usage( common)
{
- print("usage: split [-l count] [-a suffix-len] [file [outname]]") >
"/dev/stderr"
- print(" split [-b N[k|m]] [-a suffix-len] [file [outname]]") >
"/dev/stderr"
+ common = "[-a suffix-len] [file [outname]]"
+ printf("usage: split [-l count] %s\n", common) > "/dev/stderr"
+ printf(" split [-b N[k|m]] %s\n", common) > "/dev/stderr"
exit 1
}
BEGIN {
diff --git a/awklib/eg/prog/uniq.awk b/awklib/eg/prog/uniq.awk
index 57c98f2..e614bf2 100644
--- a/awklib/eg/prog/uniq.awk
+++ b/awklib/eg/prog/uniq.awk
@@ -8,7 +8,8 @@
function usage()
{
- print("Usage: uniq [-udc [-f fields] [-s chars]] [ in [ out ]]") >
"/dev/stderr"
+ print("Usage: uniq [-udc [-f fields] [-s chars]] " \
+ "[ in [ out ]]") > "/dev/stderr"
exit 1
}
@@ -17,7 +18,7 @@ function usage()
# -u only nonrepeated lines
# -f n skip n fields
# -s n skip n characters, skip fields first
-# As of 2020, '+' can be used as option character in addition to '-'
+# As of 2020, '+' can be used as the option character in addition to '-'
# Previously allowed use of -N to skip fields and +N to skip
# characters is no longer allowed, and not supported by this version.
diff --git a/doc/ChangeLog b/doc/ChangeLog
index 9f3430e..b606d14 100644
--- a/doc/ChangeLog
+++ b/doc/ChangeLog
@@ -1,6 +1,7 @@
2020-11-28 Arnold D. Robbins <arnold@skeeve.com>
* gawkworkflow.texi: Add an additional web resource.
+ * gawktexi.in: More edits in sample programs chapter.
2020-11-16 Arnold D. Robbins <arnold@skeeve.com>
diff --git a/doc/gawk.info b/doc/gawk.info
index cc359a6..b1ba867 100644
--- a/doc/gawk.info
+++ b/doc/gawk.info
@@ -17678,13 +17678,13 @@ pipeline generates a sorted, unique list of the
logged-on users:
separated with dashes. The list '1-8,15,22-35' specifies
characters 1 through 8, 15, and 22 through 35.
-'-f LIST'
- Use LIST as the list of fields to cut out.
-
'-d DELIM'
Use DELIM as the field-separator character instead of the TAB
character.
+'-f LIST'
+ Use LIST as the list of fields to cut out.
+
'-s'
Suppress printing of lines that do not contain the field delimiter.
@@ -17692,6 +17692,10 @@ pipeline generates a sorted, unique list of the
logged-on users:
function (*note Getopt Function::) and the 'join()' library function
(*note Join Function::).
+ The current POSIX version of 'cut' has options to cut fields based on
+both bytes and characters. This version does not attempt to implement
+those options, as 'awk' works exclusively in terms of characters.
+
The program begins with a comment describing the options, the library
functions needed, and a 'usage()' function that prints out a usage
message and exits. 'usage()' is called if invalid arguments are
@@ -17700,9 +17704,9 @@ supplied:
# cut.awk --- implement cut in awk
# Options:
+ # -c list Cut characters
# -f list Cut fields
# -d c Field delimiter character
- # -c list Cut characters
#
# -s Suppress lines without the delimiter
#
@@ -18030,15 +18034,15 @@ Note the comment about invocation: Because several of
the options
overlap with 'gawk''s, a '--' is needed to tell 'gawk' to stop looking
for options.
- Next comes the code that handles the 'egrep'-specific behavior. If
-no pattern is supplied with '-e', the first nonoption on the command
-line is used. If the pattern is empty, that means no pattern was
-supplied, so it's necessary to print an error message and exit. The
-'awk' command-line arguments up to 'ARGV[Optind]' are cleared, so that
-'awk' won't try to process them as files. If no files are specified,
-the standard input is used, and if multiple files are specified, we make
-sure to note this so that the file names can precede the matched lines
-in the output:
+ Next comes the code that handles the 'egrep'-specific behavior.
+'egrep' uses the first nonoption on the command line is used. if no
+pattern is supplied with '-e'. If the pattern is empty, that means no
+pattern was supplied, so it's necessary to print an error message and
+exit. The 'awk' command-line arguments up to 'ARGV[Optind]' are
+cleared, so that 'awk' won't try to process them as files. If no files
+are specified, the standard input is used, and if multiple files are
+specified, we make sure to note this so that the file names can precede
+the matched lines in the output:
if (pattern == "")
pattern = ARGV[Optind++]
@@ -18098,20 +18102,20 @@ code checks this condition by looking at the values
of 'RSTART' and
'RLENGTH'. If those indicate that the match is not over the full line,
'matches' is set to zero (false).
- If the user wants lines that did not match, the sense of 'matches' is
-inverted using the '!' operator. 'fcount' is incremented with the value
-of 'matches', which is either one or zero, depending upon a successful
-or unsuccessful match. If the line does not match, the 'next' statement
-just moves on to the next input line.
-
- A number of additional tests are made, but they are only done if we
-are not counting lines. First, if the user only wants the exit status
-('no_print' is true), then it is enough to know that _one_ line in this
-file matched, and we can skip on to the next file with 'nextfile'.
-Similarly, if we are only printing file names, we can print the file
-name, and then skip to the next file with 'nextfile'. Finally, each
-line is printed, with a leading file name, optional colon and line
-number, and the final colon if necessary:
+ If the user wants lines that did not match, we invert the sense of
+'matches' using the '!' operator. We then increment 'fcount' with the
+value of 'matches', which is either one or zero, depending upon a
+successful or unsuccessful match. If the line does not match, the
+'next' statement just moves on to the next input line.
+
+ We make a number of additional tests, but only if we are not counting
+lines. First, if the user only wants the exit status ('no_print' is
+true), then it is enough to know that _one_ line in this file matched,
+and we can skip on to the next file with 'nextfile'. Similarly, if we
+are only printing file names, we can print the file name, and then skip
+to the next file with 'nextfile'. Finally, each line is printed, with a
+leading file name, optional colon and line number, and the final colon
+if necessary:
{
matches = match($0, pattern)
@@ -18498,15 +18502,18 @@ character.(1)
'getopt()' function presented in *note Getopt Function::.
The program begins with a standard descriptive comment and then a
-'usage()' function describing the options:
+'usage()' function describing the options. The variable 'common' keeps
+the function's lines short so that they look nice on the page:
# split.awk --- do split in awk
#
# Requires getopt() library function.
- function usage()
+
+ function usage( common)
{
- print("usage: split [-l count] [-a suffix-len] [file [outname]]") >
"/dev/stderr"
- print(" split [-b N[k|m]] [-a suffix-len] [file [outname]]") >
"/dev/stderr"
+ common = "[-a suffix-len] [file [outname]]"
+ printf("usage: split [-l count] %s\n", common) > "/dev/stderr"
+ printf(" split [-b N[k|m]] %s\n", common) > "/dev/stderr"
exit 1
}
@@ -18875,7 +18882,8 @@ of the options and their meanings in comments:
function usage()
{
- print("Usage: uniq [-udc [-f fields] [-s chars]] [ in [ out ]]") >
"/dev/stderr"
+ print("Usage: uniq [-udc [-f fields] [-s chars]] " \
+ "[ in [ out ]]") > "/dev/stderr"
exit 1
}
@@ -18890,7 +18898,7 @@ well as with '-'. An initial 'BEGIN' rule traverses
the arguments
changing any leading '+' to '-' so that the 'getopt()' function can
parse the options:
- # As of 2020, '+' can be used as option character in addition to '-'
+ # As of 2020, '+' can be used as the option character in addition to '-'
# Previously allowed use of -N to skip fields and +N to skip
# characters is no longer allowed, and not supported by this version.
@@ -19105,7 +19113,7 @@ call out to other facilities written in C or C++.
For the purposes of 'wc.awk', it's enough to know that the extension
is loaded with the '@load' directive, and the additional function we
will use is called 'mbs_length()'. This function returns the number of
-bytes in a string, and not the number of characters.
+bytes in a string, not the number of characters.
The '"mbs"' extension comes from the 'gawkextlib' project. *Note
gawkextlib:: for more information.
@@ -19125,23 +19133,23 @@ standard input. If there are multiple files, it also
prints total
counts for all the files. The options and their meanings are as
follows:
+'-c'
+ Count only bytes. Once upon a time, the 'c' in this option stood
+ for "characters." But, as explained earlier, bytes and character
+ are no longer synonymous with each other.
+
'-l'
Count only lines.
+'-m'
+ Count only characters.
+
'-w'
Count only words. A "word" is a contiguous sequence of
nonwhitespace characters, separated by spaces and/or TABs.
Luckily, this is the normal way 'awk' separates fields in its input
data.
-'-c'
- Count only bytes. Once upon a time, the 'c' in this option stood
- for "characters." But, as explained earlier, bytes and character
- are no longer synonymous with each other.
-
-'-m'
- Count only characters.
-
Implementing 'wc' in 'awk' is particularly elegant, because 'awk'
does a lot of the work for us; it splits lines into words (i.e., fields)
and counts them, it counts lines (i.e., records), and it can easily tell
@@ -35111,7 +35119,7 @@ Index
* BEGIN pattern, assert() user-defined function and: Assert Function.
(line 83)
* BEGIN pattern, pwcat program: Passwd Functions. (line 143)
-* BEGIN pattern, running awk programs and: Cut Program. (line 63)
+* BEGIN pattern, running awk programs and: Cut Program. (line 67)
* BEGIN pattern, profiling and: Profiling. (line 62)
* BEGIN pattern, TEXTDOMAIN variable and: Programmer i18n. (line 60)
* BEGIN pattern, @namespace directive and: Changing The Namespace.
@@ -35440,7 +35448,7 @@ Index
* customized two-way processor: Two-way processors. (line 6)
* cut utility: Cut Program. (line 6)
* cut utility <1>: Cut Program. (line 6)
-* cut.awk program: Cut Program. (line 45)
+* cut.awk program: Cut Program. (line 49)
* d debugger command (alias for delete): Breakpoint Control. (line 64)
* dark corner: Conventions. (line 42)
* dark corner, ARGV variable, value of: Executable Scripts. (line 55)
@@ -35996,7 +36004,7 @@ Index
* field separator, FPAT variable and: User-modified. (line 46)
* field separator <1>: User-modified. (line 53)
* field separator <2>: User-modified. (line 116)
-* field separator, spaces as: Cut Program. (line 103)
+* field separator, spaces as: Cut Program. (line 107)
* field separator <3>: Changing Fields. (line 64)
* fields: Reading Files. (line 14)
* fields <1>: Fields. (line 6)
@@ -36142,7 +36150,7 @@ Index
(line 6)
* FS variable, in multiline records: Multiple Line. (line 41)
* FS variable <1>: User-modified. (line 53)
-* FS variable, running awk programs and: Cut Program. (line 63)
+* FS variable, running awk programs and: Cut Program. (line 67)
* FSF (Free Software Foundation): Manual History. (line 6)
* FSF (Free Software Foundation) <1>: Getting. (line 10)
* FSF (Free Software Foundation) <2>: Glossary. (line 370)
@@ -37560,7 +37568,7 @@ Index
* split string into array: String Functions. (line 303)
* split utility: Split Program. (line 6)
* split() function, array elements, deleting: Delete. (line 61)
-* split.awk program: Split Program. (line 50)
+* split.awk program: Split Program. (line 51)
* sprintf: OFMT. (line 15)
* sprintf <1>: String Functions. (line 395)
* sprintf() function, print/printf statements and: Round Function.
@@ -38261,275 +38269,275 @@ Node: Sample Programs726972
Node: Running Examples727742
Node: Clones728470
Node: Cut Program729694
-Node: Egrep Program739623
-Node: Id Program748634
-Node: Split Program758581
-Ref: Split Program-Footnote-1768355
-Node: Tee Program768528
-Node: Uniq Program771318
-Node: Wc Program778882
-Node: Bytes vs. Characters779279
-Node: Using extensions780827
-Node: wc program781585
-Node: Miscellaneous Programs786450
-Node: Dupword Program787663
-Node: Alarm Program789693
-Node: Translate Program794548
-Ref: Translate Program-Footnote-1799113
-Node: Labels Program799383
-Ref: Labels Program-Footnote-1802734
-Node: Word Sorting802818
-Node: History Sorting806890
-Node: Extract Program809115
-Node: Simple Sed817169
-Node: Igawk Program820243
-Ref: Igawk Program-Footnote-1834574
-Ref: Igawk Program-Footnote-2834776
-Ref: Igawk Program-Footnote-3834898
-Node: Anagram Program835013
-Node: Signature Program838075
-Node: Programs Summary839322
-Node: Programs Exercises840536
-Ref: Programs Exercises-Footnote-1844666
-Node: Advanced Features844752
-Node: Nondecimal Data846742
-Node: Array Sorting848333
-Node: Controlling Array Traversal849033
-Ref: Controlling Array Traversal-Footnote-1857401
-Node: Array Sorting Functions857519
-Ref: Array Sorting Functions-Footnote-1862610
-Node: Two-way I/O862806
-Ref: Two-way I/O-Footnote-1870527
-Ref: Two-way I/O-Footnote-2870714
-Node: TCP/IP Networking870796
-Node: Profiling873914
-Node: Advanced Features Summary883228
-Node: Internationalization885072
-Node: I18N and L10N886552
-Node: Explaining gettext887239
-Ref: Explaining gettext-Footnote-1893131
-Ref: Explaining gettext-Footnote-2893316
-Node: Programmer i18n893481
-Ref: Programmer i18n-Footnote-1898430
-Node: Translator i18n898479
-Node: String Extraction899273
-Ref: String Extraction-Footnote-1900405
-Node: Printf Ordering900491
-Ref: Printf Ordering-Footnote-1903277
-Node: I18N Portability903341
-Ref: I18N Portability-Footnote-1905797
-Node: I18N Example905860
-Ref: I18N Example-Footnote-1909135
-Ref: I18N Example-Footnote-2909208
-Node: Gawk I18N909317
-Node: I18N Summary909966
-Node: Debugger911307
-Node: Debugging912307
-Node: Debugging Concepts912748
-Node: Debugging Terms914557
-Node: Awk Debugging917132
-Ref: Awk Debugging-Footnote-1918077
-Node: Sample Debugging Session918209
-Node: Debugger Invocation918743
-Node: Finding The Bug920129
-Node: List of Debugger Commands926603
-Node: Breakpoint Control927936
-Node: Debugger Execution Control931630
-Node: Viewing And Changing Data934992
-Node: Execution Stack938533
-Node: Debugger Info940170
-Node: Miscellaneous Debugger Commands944241
-Node: Readline Support949303
-Node: Limitations950199
-Node: Debugging Summary952753
-Node: Namespaces954032
-Node: Global Namespace955143
-Node: Qualified Names956541
-Node: Default Namespace957540
-Node: Changing The Namespace958281
-Node: Naming Rules959895
-Node: Internal Name Management961743
-Node: Namespace Example962785
-Node: Namespace And Features965347
-Node: Namespace Summary966782
-Node: Arbitrary Precision Arithmetic968259
-Node: Computer Arithmetic969746
-Ref: table-numeric-ranges973512
-Ref: table-floating-point-ranges974005
-Ref: Computer Arithmetic-Footnote-1974663
-Node: Math Definitions974720
-Ref: table-ieee-formats978036
-Ref: Math Definitions-Footnote-1978639
-Node: MPFR features978744
-Node: FP Math Caution980462
-Ref: FP Math Caution-Footnote-1981534
-Node: Inexactness of computations981903
-Node: Inexact representation982863
-Node: Comparing FP Values984223
-Node: Errors accumulate985464
-Node: Getting Accuracy986897
-Node: Try To Round989607
-Node: Setting precision990506
-Ref: table-predefined-precision-strings991203
-Node: Setting the rounding mode993033
-Ref: table-gawk-rounding-modes993407
-Ref: Setting the rounding mode-Footnote-1997338
-Node: Arbitrary Precision Integers997517
-Ref: Arbitrary Precision Integers-Footnote-11000692
-Node: Checking for MPFR1000841
-Node: POSIX Floating Point Problems1002315
-Ref: POSIX Floating Point Problems-Footnote-11006600
-Node: Floating point summary1006638
-Node: Dynamic Extensions1008828
-Node: Extension Intro1010381
-Node: Plugin License1011647
-Node: Extension Mechanism Outline1012444
-Ref: figure-load-extension1012883
-Ref: figure-register-new-function1014448
-Ref: figure-call-new-function1015540
-Node: Extension API Description1017602
-Node: Extension API Functions Introduction1019315
-Ref: table-api-std-headers1021151
-Node: General Data Types1025400
-Ref: General Data Types-Footnote-11034030
-Node: Memory Allocation Functions1034329
-Ref: Memory Allocation Functions-Footnote-11038830
-Node: Constructor Functions1038929
-Node: API Ownership of MPFR and GMP Values1042395
-Node: Registration Functions1043708
-Node: Extension Functions1044408
-Node: Exit Callback Functions1049730
-Node: Extension Version String1050980
-Node: Input Parsers1051643
-Node: Output Wrappers1064364
-Node: Two-way processors1068876
-Node: Printing Messages1071141
-Ref: Printing Messages-Footnote-11072312
-Node: Updating ERRNO1072465
-Node: Requesting Values1073204
-Ref: table-value-types-returned1073941
-Node: Accessing Parameters1074877
-Node: Symbol Table Access1076114
-Node: Symbol table by name1076626
-Ref: Symbol table by name-Footnote-11079650
-Node: Symbol table by cookie1079778
-Ref: Symbol table by cookie-Footnote-11083963
-Node: Cached values1084027
-Ref: Cached values-Footnote-11087563
-Node: Array Manipulation1087716
-Ref: Array Manipulation-Footnote-11088807
-Node: Array Data Types1088844
-Ref: Array Data Types-Footnote-11091502
-Node: Array Functions1091594
-Node: Flattening Arrays1096092
-Node: Creating Arrays1103068
-Node: Redirection API1107835
-Node: Extension API Variables1110668
-Node: Extension Versioning1111379
-Ref: gawk-api-version1111808
-Node: Extension GMP/MPFR Versioning1113539
-Node: Extension API Informational Variables1115167
-Node: Extension API Boilerplate1116240
-Node: Changes from API V11120214
-Node: Finding Extensions1121786
-Node: Extension Example1122345
-Node: Internal File Description1123143
-Node: Internal File Ops1127223
-Ref: Internal File Ops-Footnote-11138573
-Node: Using Internal File Ops1138713
-Ref: Using Internal File Ops-Footnote-11141096
-Node: Extension Samples1141370
-Node: Extension Sample File Functions1142899
-Node: Extension Sample Fnmatch1150548
-Node: Extension Sample Fork1152035
-Node: Extension Sample Inplace1153253
-Node: Extension Sample Ord1156879
-Node: Extension Sample Readdir1157715
-Ref: table-readdir-file-types1158604
-Node: Extension Sample Revout1159671
-Node: Extension Sample Rev2way1160260
-Node: Extension Sample Read write array1161000
-Node: Extension Sample Readfile1162942
-Node: Extension Sample Time1164037
-Node: Extension Sample API Tests1165789
-Node: gawkextlib1166281
-Node: Extension summary1169199
-Node: Extension Exercises1172901
-Node: Language History1174143
-Node: V7/SVR3.11175799
-Node: SVR41177951
-Node: POSIX1179385
-Node: BTL1180766
-Node: POSIX/GNU1181495
-Node: Feature History1187273
-Node: Common Extensions1203592
-Node: Ranges and Locales1204875
-Ref: Ranges and Locales-Footnote-11209491
-Ref: Ranges and Locales-Footnote-21209518
-Ref: Ranges and Locales-Footnote-31209753
-Node: Contributors1209976
-Node: History summary1215973
-Node: Installation1217353
-Node: Gawk Distribution1218297
-Node: Getting1218781
-Node: Extracting1219744
-Node: Distribution contents1221382
-Node: Unix Installation1227862
-Node: Quick Installation1228544
-Node: Shell Startup Files1230958
-Node: Additional Configuration Options1232047
-Node: Configuration Philosophy1234362
-Node: Non-Unix Installation1236731
-Node: PC Installation1237191
-Node: PC Binary Installation1238029
-Node: PC Compiling1238464
-Node: PC Using1239581
-Node: Cygwin1243134
-Node: MSYS1244358
-Node: VMS Installation1244960
-Node: VMS Compilation1245751
-Ref: VMS Compilation-Footnote-11246980
-Node: VMS Dynamic Extensions1247038
-Node: VMS Installation Details1248723
-Node: VMS Running1250976
-Node: VMS GNV1255255
-Node: VMS Old Gawk1255990
-Node: Bugs1256461
-Node: Bug address1257124
-Node: Usenet1260106
-Node: Maintainers1261110
-Node: Other Versions1262295
-Node: Installation summary1269383
-Node: Notes1270592
-Node: Compatibility Mode1271386
-Node: Additions1272168
-Node: Accessing The Source1273093
-Node: Adding Code1274530
-Node: New Ports1280749
-Node: Derived Files1285124
-Ref: Derived Files-Footnote-11290784
-Ref: Derived Files-Footnote-21290819
-Ref: Derived Files-Footnote-31291417
-Node: Future Extensions1291531
-Node: Implementation Limitations1292189
-Node: Extension Design1293399
-Node: Old Extension Problems1294543
-Ref: Old Extension Problems-Footnote-11296061
-Node: Extension New Mechanism Goals1296118
-Ref: Extension New Mechanism Goals-Footnote-11299482
-Node: Extension Other Design Decisions1299671
-Node: Extension Future Growth1301784
-Node: Notes summary1302390
-Node: Basic Concepts1303548
-Node: Basic High Level1304229
-Ref: figure-general-flow1304511
-Ref: figure-process-flow1305196
-Ref: Basic High Level-Footnote-11308497
-Node: Basic Data Typing1308682
-Node: Glossary1312010
-Node: Copying1343895
-Node: GNU Free Documentation License1381438
-Node: Index1406558
+Node: Egrep Program739834
+Node: Id Program748845
+Node: Split Program758792
+Ref: Split Program-Footnote-1768682
+Node: Tee Program768855
+Node: Uniq Program771645
+Node: Wc Program779233
+Node: Bytes vs. Characters779630
+Node: Using extensions781178
+Node: wc program781932
+Node: Miscellaneous Programs786797
+Node: Dupword Program788010
+Node: Alarm Program790040
+Node: Translate Program794895
+Ref: Translate Program-Footnote-1799460
+Node: Labels Program799730
+Ref: Labels Program-Footnote-1803081
+Node: Word Sorting803165
+Node: History Sorting807237
+Node: Extract Program809462
+Node: Simple Sed817516
+Node: Igawk Program820590
+Ref: Igawk Program-Footnote-1834921
+Ref: Igawk Program-Footnote-2835123
+Ref: Igawk Program-Footnote-3835245
+Node: Anagram Program835360
+Node: Signature Program838422
+Node: Programs Summary839669
+Node: Programs Exercises840883
+Ref: Programs Exercises-Footnote-1845013
+Node: Advanced Features845099
+Node: Nondecimal Data847089
+Node: Array Sorting848680
+Node: Controlling Array Traversal849380
+Ref: Controlling Array Traversal-Footnote-1857748
+Node: Array Sorting Functions857866
+Ref: Array Sorting Functions-Footnote-1862957
+Node: Two-way I/O863153
+Ref: Two-way I/O-Footnote-1870874
+Ref: Two-way I/O-Footnote-2871061
+Node: TCP/IP Networking871143
+Node: Profiling874261
+Node: Advanced Features Summary883575
+Node: Internationalization885419
+Node: I18N and L10N886899
+Node: Explaining gettext887586
+Ref: Explaining gettext-Footnote-1893478
+Ref: Explaining gettext-Footnote-2893663
+Node: Programmer i18n893828
+Ref: Programmer i18n-Footnote-1898777
+Node: Translator i18n898826
+Node: String Extraction899620
+Ref: String Extraction-Footnote-1900752
+Node: Printf Ordering900838
+Ref: Printf Ordering-Footnote-1903624
+Node: I18N Portability903688
+Ref: I18N Portability-Footnote-1906144
+Node: I18N Example906207
+Ref: I18N Example-Footnote-1909482
+Ref: I18N Example-Footnote-2909555
+Node: Gawk I18N909664
+Node: I18N Summary910313
+Node: Debugger911654
+Node: Debugging912654
+Node: Debugging Concepts913095
+Node: Debugging Terms914904
+Node: Awk Debugging917479
+Ref: Awk Debugging-Footnote-1918424
+Node: Sample Debugging Session918556
+Node: Debugger Invocation919090
+Node: Finding The Bug920476
+Node: List of Debugger Commands926950
+Node: Breakpoint Control928283
+Node: Debugger Execution Control931977
+Node: Viewing And Changing Data935339
+Node: Execution Stack938880
+Node: Debugger Info940517
+Node: Miscellaneous Debugger Commands944588
+Node: Readline Support949650
+Node: Limitations950546
+Node: Debugging Summary953100
+Node: Namespaces954379
+Node: Global Namespace955490
+Node: Qualified Names956888
+Node: Default Namespace957887
+Node: Changing The Namespace958628
+Node: Naming Rules960242
+Node: Internal Name Management962090
+Node: Namespace Example963132
+Node: Namespace And Features965694
+Node: Namespace Summary967129
+Node: Arbitrary Precision Arithmetic968606
+Node: Computer Arithmetic970093
+Ref: table-numeric-ranges973859
+Ref: table-floating-point-ranges974352
+Ref: Computer Arithmetic-Footnote-1975010
+Node: Math Definitions975067
+Ref: table-ieee-formats978383
+Ref: Math Definitions-Footnote-1978986
+Node: MPFR features979091
+Node: FP Math Caution980809
+Ref: FP Math Caution-Footnote-1981881
+Node: Inexactness of computations982250
+Node: Inexact representation983210
+Node: Comparing FP Values984570
+Node: Errors accumulate985811
+Node: Getting Accuracy987244
+Node: Try To Round989954
+Node: Setting precision990853
+Ref: table-predefined-precision-strings991550
+Node: Setting the rounding mode993380
+Ref: table-gawk-rounding-modes993754
+Ref: Setting the rounding mode-Footnote-1997685
+Node: Arbitrary Precision Integers997864
+Ref: Arbitrary Precision Integers-Footnote-11001039
+Node: Checking for MPFR1001188
+Node: POSIX Floating Point Problems1002662
+Ref: POSIX Floating Point Problems-Footnote-11006947
+Node: Floating point summary1006985
+Node: Dynamic Extensions1009175
+Node: Extension Intro1010728
+Node: Plugin License1011994
+Node: Extension Mechanism Outline1012791
+Ref: figure-load-extension1013230
+Ref: figure-register-new-function1014795
+Ref: figure-call-new-function1015887
+Node: Extension API Description1017949
+Node: Extension API Functions Introduction1019662
+Ref: table-api-std-headers1021498
+Node: General Data Types1025747
+Ref: General Data Types-Footnote-11034377
+Node: Memory Allocation Functions1034676
+Ref: Memory Allocation Functions-Footnote-11039177
+Node: Constructor Functions1039276
+Node: API Ownership of MPFR and GMP Values1042742
+Node: Registration Functions1044055
+Node: Extension Functions1044755
+Node: Exit Callback Functions1050077
+Node: Extension Version String1051327
+Node: Input Parsers1051990
+Node: Output Wrappers1064711
+Node: Two-way processors1069223
+Node: Printing Messages1071488
+Ref: Printing Messages-Footnote-11072659
+Node: Updating ERRNO1072812
+Node: Requesting Values1073551
+Ref: table-value-types-returned1074288
+Node: Accessing Parameters1075224
+Node: Symbol Table Access1076461
+Node: Symbol table by name1076973
+Ref: Symbol table by name-Footnote-11079997
+Node: Symbol table by cookie1080125
+Ref: Symbol table by cookie-Footnote-11084310
+Node: Cached values1084374
+Ref: Cached values-Footnote-11087910
+Node: Array Manipulation1088063
+Ref: Array Manipulation-Footnote-11089154
+Node: Array Data Types1089191
+Ref: Array Data Types-Footnote-11091849
+Node: Array Functions1091941
+Node: Flattening Arrays1096439
+Node: Creating Arrays1103415
+Node: Redirection API1108182
+Node: Extension API Variables1111015
+Node: Extension Versioning1111726
+Ref: gawk-api-version1112155
+Node: Extension GMP/MPFR Versioning1113886
+Node: Extension API Informational Variables1115514
+Node: Extension API Boilerplate1116587
+Node: Changes from API V11120561
+Node: Finding Extensions1122133
+Node: Extension Example1122692
+Node: Internal File Description1123490
+Node: Internal File Ops1127570
+Ref: Internal File Ops-Footnote-11138920
+Node: Using Internal File Ops1139060
+Ref: Using Internal File Ops-Footnote-11141443
+Node: Extension Samples1141717
+Node: Extension Sample File Functions1143246
+Node: Extension Sample Fnmatch1150895
+Node: Extension Sample Fork1152382
+Node: Extension Sample Inplace1153600
+Node: Extension Sample Ord1157226
+Node: Extension Sample Readdir1158062
+Ref: table-readdir-file-types1158951
+Node: Extension Sample Revout1160018
+Node: Extension Sample Rev2way1160607
+Node: Extension Sample Read write array1161347
+Node: Extension Sample Readfile1163289
+Node: Extension Sample Time1164384
+Node: Extension Sample API Tests1166136
+Node: gawkextlib1166628
+Node: Extension summary1169546
+Node: Extension Exercises1173248
+Node: Language History1174490
+Node: V7/SVR3.11176146
+Node: SVR41178298
+Node: POSIX1179732
+Node: BTL1181113
+Node: POSIX/GNU1181842
+Node: Feature History1187620
+Node: Common Extensions1203939
+Node: Ranges and Locales1205222
+Ref: Ranges and Locales-Footnote-11209838
+Ref: Ranges and Locales-Footnote-21209865
+Ref: Ranges and Locales-Footnote-31210100
+Node: Contributors1210323
+Node: History summary1216320
+Node: Installation1217700
+Node: Gawk Distribution1218644
+Node: Getting1219128
+Node: Extracting1220091
+Node: Distribution contents1221729
+Node: Unix Installation1228209
+Node: Quick Installation1228891
+Node: Shell Startup Files1231305
+Node: Additional Configuration Options1232394
+Node: Configuration Philosophy1234709
+Node: Non-Unix Installation1237078
+Node: PC Installation1237538
+Node: PC Binary Installation1238376
+Node: PC Compiling1238811
+Node: PC Using1239928
+Node: Cygwin1243481
+Node: MSYS1244705
+Node: VMS Installation1245307
+Node: VMS Compilation1246098
+Ref: VMS Compilation-Footnote-11247327
+Node: VMS Dynamic Extensions1247385
+Node: VMS Installation Details1249070
+Node: VMS Running1251323
+Node: VMS GNV1255602
+Node: VMS Old Gawk1256337
+Node: Bugs1256808
+Node: Bug address1257471
+Node: Usenet1260453
+Node: Maintainers1261457
+Node: Other Versions1262642
+Node: Installation summary1269730
+Node: Notes1270939
+Node: Compatibility Mode1271733
+Node: Additions1272515
+Node: Accessing The Source1273440
+Node: Adding Code1274877
+Node: New Ports1281096
+Node: Derived Files1285471
+Ref: Derived Files-Footnote-11291131
+Ref: Derived Files-Footnote-21291166
+Ref: Derived Files-Footnote-31291764
+Node: Future Extensions1291878
+Node: Implementation Limitations1292536
+Node: Extension Design1293746
+Node: Old Extension Problems1294890
+Ref: Old Extension Problems-Footnote-11296408
+Node: Extension New Mechanism Goals1296465
+Ref: Extension New Mechanism Goals-Footnote-11299829
+Node: Extension Other Design Decisions1300018
+Node: Extension Future Growth1302131
+Node: Notes summary1302737
+Node: Basic Concepts1303895
+Node: Basic High Level1304576
+Ref: figure-general-flow1304858
+Ref: figure-process-flow1305543
+Ref: Basic High Level-Footnote-11308844
+Node: Basic Data Typing1309029
+Node: Glossary1312357
+Node: Copying1344242
+Node: GNU Free Documentation License1381785
+Node: Index1406905
End Tag Table
diff --git a/doc/gawk.texi b/doc/gawk.texi
index 043d5dd..d211e48 100644
--- a/doc/gawk.texi
+++ b/doc/gawk.texi
@@ -25116,13 +25116,13 @@ may be separated by commas, and ranges of characters
can be separated with
dashes. The list @samp{1-8,15,22-35} specifies characters 1 through
8, 15, and 22 through 35.
-@item -f @var{list}
-Use @var{list} as the list of fields to cut out.
-
@item -d @var{delim}
Use @var{delim} as the field-separator character instead of the TAB
character.
+@item -f @var{list}
+Use @var{list} as the list of fields to cut out.
+
@item -s
Suppress printing of lines that do not contain the field delimiter.
@end table
@@ -25132,6 +25132,10 @@ function (@pxref{Getopt Function})
and the @code{join()} library function
(@pxref{Join Function}).
+The current POSIX version of @command{cut} has options to cut fields based on
+both bytes and characters. This version does not attempt to implement those
options,
+as @command{awk} works exclusively in terms of characters.
+
The program begins with a comment describing the options, the library
functions needed, and a @code{usage()} function that prints out a usage
message and exits. @code{usage()} is called if invalid arguments are
@@ -25152,9 +25156,9 @@ supplied:
@c file eg/prog/cut.awk
# Options:
+# -c list Cut characters
# -f list Cut fields
# -d c Field delimiter character
-# -c list Cut characters
#
# -s Suppress lines without the delimiter
#
@@ -25226,7 +25230,7 @@ incorrect---@command{awk} would separate fields with
runs of spaces,
TABs, and/or newlines, and we want them to be separated with individual
spaces.
To this end, we save the original space character in the variable
-@code{fs} for later use; after setting @code{FS} to @code{"[ ]"} we can't
+@code{fs} for later use; after setting @code{FS} to @code{@w{"[ ]"}} we can't
use it directly to see if the field delimiter character is in the string.
Also remember that after @code{getopt()} is through
@@ -25553,9 +25557,9 @@ Note the comment about invocation: Because several of
the options overlap
with @command{gawk}'s, a @option{--} is needed to tell @command{gawk}
to stop looking for options.
-Next comes the code that handles the @command{egrep}-specific behavior. If no
-pattern is supplied with @option{-e}, the first nonoption on the
-command line is used.
+Next comes the code that handles the @command{egrep}-specific behavior.
+@command{egrep} uses the first nonoption on the command line is used.
+if no pattern is supplied with @option{-e}.
If the pattern is empty, that means no pattern was supplied, so it's
necessary to print an error message and exit.
The @command{awk} command-line arguments up to @code{ARGV[Optind]}
@@ -25638,13 +25642,13 @@ the code checks this condition by looking at the
values of
is not over the full line, @code{matches} is set to zero (false).
If the user
-wants lines that did not match, the sense of @code{matches} is inverted
-using the @samp{!} operator. @code{fcount} is incremented with the value of
+wants lines that did not match, we invert the sense of @code{matches}
+using the @samp{!} operator. We then increment @code{fcount} with the value of
@code{matches}, which is either one or zero, depending upon a
successful or unsuccessful match. If the line does not match, the
@code{next} statement just moves on to the next input line.
-A number of additional tests are made, but they are only done if we
+We make a number of additional tests, but only if we
are not counting lines. First, if the user only wants the exit status
(@code{no_print} is true), then it is enough to know that @emph{one}
line in this file matched, and we can skip on to the next file with
@@ -26156,7 +26160,9 @@ Here is an implementation of @command{split} in
@command{awk}. It uses the
@code{getopt()} function presented in @ref{Getopt Function}.
The program begins with a standard descriptive comment and then
-a @code{usage()} function describing the options:
+a @code{usage()} function describing the options. The variable
+@code{common} keeps the function's lines short so that they
+look nice on the page:
@cindex @code{split.awk} program
@example
@@ -26176,10 +26182,12 @@ a @code{usage()} function describing the options:
@c endfile
@end ignore
@c file eg/prog/split.awk
-function usage()
+
+function usage( common)
@{
- print("usage: split [-l count] [-a suffix-len] [file [outname]]") >
"/dev/stderr"
- print(" split [-b N[k|m]] [-a suffix-len] [file [outname]]") >
"/dev/stderr"
+ common = "[-a suffix-len] [file [outname]]"
+ printf("usage: split [-l count] %s\n", common) > "/dev/stderr"
+ printf(" split [-b N[k|m]] %s\n", common) > "/dev/stderr"
exit 1
@}
@c endfile
@@ -26644,7 +26652,8 @@ the options and their meanings in comments:
function usage()
@{
- print("Usage: uniq [-udc [-f fields] [-s chars]] [ in [ out ]]") >
"/dev/stderr"
+ print("Usage: uniq [-udc [-f fields] [-s chars]] " \
+ "[ in [ out ]]") > "/dev/stderr"
exit 1
@}
@@ -26663,7 +26672,7 @@ so that the @code{getopt()} function can parse the
options:
@example
@c file eg/prog/uniq.awk
-# As of 2020, '+' can be used as option character in addition to '-'
+# As of 2020, '+' can be used as the option character in addition to '-'
# Previously allowed use of -N to skip fields and +N to skip
# characters is no longer allowed, and not supported by this version.
@@ -26912,7 +26921,7 @@ For the purposes of
@file{wc.awk}, it's enough to know that the extension is loaded
with the @code{@@load} directive, and the additional function we
will use is called @code{mbs_length()}. This function returns the
-number of bytes in a string, and not the number of characters.
+number of bytes in a string, not the number of characters.
The @code{"mbs"} extension comes from the @code{gawkextlib}
project. @xref{gawkextlib} for more information.
@@ -26931,23 +26940,23 @@ input. If there are multiple files, it also prints
total counts for all
the files. The options and their meanings are as follows:
@table @code
-@item -l
-Count only lines.
-
-@item -w
-Count only words.
-A ``word'' is a contiguous sequence of nonwhitespace characters, separated
-by spaces and/or TABs. Luckily, this is the normal way @command{awk} separates
-fields in its input data.
-
@item -c
Count only bytes.
Once upon a time, the @samp{c} in this option stood for ``characters.''
But, as explained earlier, bytes and character are no longer synonymous
with each other.
+@item -l
+Count only lines.
+
@item -m
Count only characters.
+
+@item -w
+Count only words.
+A ``word'' is a contiguous sequence of nonwhitespace characters, separated
+by spaces and/or TABs. Luckily, this is the normal way @command{awk} separates
+fields in its input data.
@end table
Implementing @command{wc} in @command{awk} is particularly elegant,
diff --git a/doc/gawktexi.in b/doc/gawktexi.in
index 7c1f712..a5c65a3 100644
--- a/doc/gawktexi.in
+++ b/doc/gawktexi.in
@@ -24082,13 +24082,13 @@ may be separated by commas, and ranges of characters
can be separated with
dashes. The list @samp{1-8,15,22-35} specifies characters 1 through
8, 15, and 22 through 35.
-@item -f @var{list}
-Use @var{list} as the list of fields to cut out.
-
@item -d @var{delim}
Use @var{delim} as the field-separator character instead of the TAB
character.
+@item -f @var{list}
+Use @var{list} as the list of fields to cut out.
+
@item -s
Suppress printing of lines that do not contain the field delimiter.
@end table
@@ -24098,6 +24098,10 @@ function (@pxref{Getopt Function})
and the @code{join()} library function
(@pxref{Join Function}).
+The current POSIX version of @command{cut} has options to cut fields based on
+both bytes and characters. This version does not attempt to implement those
options,
+as @command{awk} works exclusively in terms of characters.
+
The program begins with a comment describing the options, the library
functions needed, and a @code{usage()} function that prints out a usage
message and exits. @code{usage()} is called if invalid arguments are
@@ -24118,9 +24122,9 @@ supplied:
@c file eg/prog/cut.awk
# Options:
+# -c list Cut characters
# -f list Cut fields
# -d c Field delimiter character
-# -c list Cut characters
#
# -s Suppress lines without the delimiter
#
@@ -24192,7 +24196,7 @@ incorrect---@command{awk} would separate fields with
runs of spaces,
TABs, and/or newlines, and we want them to be separated with individual
spaces.
To this end, we save the original space character in the variable
-@code{fs} for later use; after setting @code{FS} to @code{"[ ]"} we can't
+@code{fs} for later use; after setting @code{FS} to @code{@w{"[ ]"}} we can't
use it directly to see if the field delimiter character is in the string.
Also remember that after @code{getopt()} is through
@@ -24519,9 +24523,9 @@ Note the comment about invocation: Because several of
the options overlap
with @command{gawk}'s, a @option{--} is needed to tell @command{gawk}
to stop looking for options.
-Next comes the code that handles the @command{egrep}-specific behavior. If no
-pattern is supplied with @option{-e}, the first nonoption on the
-command line is used.
+Next comes the code that handles the @command{egrep}-specific behavior.
+@command{egrep} uses the first nonoption on the command line is used.
+if no pattern is supplied with @option{-e}.
If the pattern is empty, that means no pattern was supplied, so it's
necessary to print an error message and exit.
The @command{awk} command-line arguments up to @code{ARGV[Optind]}
@@ -24604,13 +24608,13 @@ the code checks this condition by looking at the
values of
is not over the full line, @code{matches} is set to zero (false).
If the user
-wants lines that did not match, the sense of @code{matches} is inverted
-using the @samp{!} operator. @code{fcount} is incremented with the value of
+wants lines that did not match, we invert the sense of @code{matches}
+using the @samp{!} operator. We then increment @code{fcount} with the value of
@code{matches}, which is either one or zero, depending upon a
successful or unsuccessful match. If the line does not match, the
@code{next} statement just moves on to the next input line.
-A number of additional tests are made, but they are only done if we
+We make a number of additional tests, but only if we
are not counting lines. First, if the user only wants the exit status
(@code{no_print} is true), then it is enough to know that @emph{one}
line in this file matched, and we can skip on to the next file with
@@ -25122,7 +25126,9 @@ Here is an implementation of @command{split} in
@command{awk}. It uses the
@code{getopt()} function presented in @ref{Getopt Function}.
The program begins with a standard descriptive comment and then
-a @code{usage()} function describing the options:
+a @code{usage()} function describing the options. The variable
+@code{common} keeps the function's lines short so that they
+look nice on the page:
@cindex @code{split.awk} program
@example
@@ -25142,10 +25148,12 @@ a @code{usage()} function describing the options:
@c endfile
@end ignore
@c file eg/prog/split.awk
-function usage()
+
+function usage( common)
@{
- print("usage: split [-l count] [-a suffix-len] [file [outname]]") >
"/dev/stderr"
- print(" split [-b N[k|m]] [-a suffix-len] [file [outname]]") >
"/dev/stderr"
+ common = "[-a suffix-len] [file [outname]]"
+ printf("usage: split [-l count] %s\n", common) > "/dev/stderr"
+ printf(" split [-b N[k|m]] %s\n", common) > "/dev/stderr"
exit 1
@}
@c endfile
@@ -25610,7 +25618,8 @@ the options and their meanings in comments:
function usage()
@{
- print("Usage: uniq [-udc [-f fields] [-s chars]] [ in [ out ]]") >
"/dev/stderr"
+ print("Usage: uniq [-udc [-f fields] [-s chars]] " \
+ "[ in [ out ]]") > "/dev/stderr"
exit 1
@}
@@ -25629,7 +25638,7 @@ so that the @code{getopt()} function can parse the
options:
@example
@c file eg/prog/uniq.awk
-# As of 2020, '+' can be used as option character in addition to '-'
+# As of 2020, '+' can be used as the option character in addition to '-'
# Previously allowed use of -N to skip fields and +N to skip
# characters is no longer allowed, and not supported by this version.
@@ -25878,7 +25887,7 @@ For the purposes of
@file{wc.awk}, it's enough to know that the extension is loaded
with the @code{@@load} directive, and the additional function we
will use is called @code{mbs_length()}. This function returns the
-number of bytes in a string, and not the number of characters.
+number of bytes in a string, not the number of characters.
The @code{"mbs"} extension comes from the @code{gawkextlib}
project. @xref{gawkextlib} for more information.
@@ -25897,23 +25906,23 @@ input. If there are multiple files, it also prints
total counts for all
the files. The options and their meanings are as follows:
@table @code
-@item -l
-Count only lines.
-
-@item -w
-Count only words.
-A ``word'' is a contiguous sequence of nonwhitespace characters, separated
-by spaces and/or TABs. Luckily, this is the normal way @command{awk} separates
-fields in its input data.
-
@item -c
Count only bytes.
Once upon a time, the @samp{c} in this option stood for ``characters.''
But, as explained earlier, bytes and character are no longer synonymous
with each other.
+@item -l
+Count only lines.
+
@item -m
Count only characters.
+
+@item -w
+Count only words.
+A ``word'' is a contiguous sequence of nonwhitespace characters, separated
+by spaces and/or TABs. Luckily, this is the normal way @command{awk} separates
+fields in its input data.
@end table
Implementing @command{wc} in @command{awk} is particularly elegant,
http://git.sv.gnu.org/cgit/gawk.git/commit/?id=dff7cb280f153e71d2ed187521da52c3fca04fe5
commit dff7cb280f153e71d2ed187521da52c3fca04fe5
Author: Arnold D. Robbins <arnold@skeeve.com>
Date: Sat Nov 28 20:47:50 2020 +0200
Add a resource in gawkworkflow.texi.
diff --git a/doc/ChangeLog b/doc/ChangeLog
index a189816..9f3430e 100644
--- a/doc/ChangeLog
+++ b/doc/ChangeLog
@@ -1,3 +1,7 @@
+2020-11-28 Arnold D. Robbins <arnold@skeeve.com>
+
+ * gawkworkflow.texi: Add an additional web resource.
+
2020-11-16 Arnold D. Robbins <arnold@skeeve.com>
* gawktexi.in (Nextfile Statement): Clarify what happens in
diff --git a/doc/gawkworkflow.texi b/doc/gawkworkflow.texi
index 0aa6882..4106b75 100644
--- a/doc/gawkworkflow.texi
+++ b/doc/gawkworkflow.texi
@@ -2147,6 +2147,10 @@ In particular, the @uref{https://git-scm.com/book/en/v2,
See also @uref{http://savannah.gnu.org/maintenance/UsingGit,
the Savannah quick introduction to Git}.
+A nice article on how Git works is
+@uref{http://jwiegley.github.io/git-from-the-bottom-up/,
+@cite{Git From The Bottom Up}}, by John Wiegley.
+
@node TODO
@appendix Stuff Still To Do In This Document
-----------------------------------------------------------------------
Summary of changes:
awklib/eg/prog/cut.awk | 2 +-
awklib/eg/prog/split.awk | 8 +-
awklib/eg/prog/uniq.awk | 5 +-
doc/ChangeLog | 5 +
doc/gawk.info | 640 ++++++++++++++++++++++++-----------------------
doc/gawk.texi | 63 +++--
doc/gawktexi.in | 63 +++--
doc/gawkworkflow.texi | 4 +
8 files changed, 414 insertions(+), 376 deletions(-)
hooks/post-receive
--
gawk
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [SCM] gawk branch, gawk-5.1-stable, updated. gawk-4.1.0-4173-g45c17db,
Arnold Robbins <=