[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[gawk-diffs] [SCM] gawk branch, master, updated. gawk-4.1.0-3827-g4a034a
From: |
Arnold Robbins |
Subject: |
[gawk-diffs] [SCM] gawk branch, master, updated. gawk-4.1.0-3827-g4a034ab |
Date: |
Tue, 24 Sep 2019 13:52:26 -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, master has been updated
via 4a034ab5b224f2def385e99490cfaa69db3e1895 (commit)
from 09efc00fdb6af9376c13db420930dd48e9b273d0 (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=4a034ab5b224f2def385e99490cfaa69db3e1895
commit 4a034ab5b224f2def385e99490cfaa69db3e1895
Author: Arnold D. Robbins <address@hidden>
Date: Tue Sep 24 20:51:51 2019 +0300
Squashed commit of the following:
commit 779f64fd18d9d8ea09ac60f8fbbc9bb330a0bf33
Merge: 5e1b216 92a7d23
Author: Arnold D. Robbins <address@hidden>
Date: Sun Sep 22 20:34:09 2019 +0300
Merge branch 'master' into feature/better-index
commit 5e1b2168b2778bf4a03f14455026500db1ce3eac
Merge: cccdba8 7feb08d
Author: Arnold D. Robbins <address@hidden>
Date: Tue Sep 17 11:47:48 2019 +0300
Merge branch 'master' into feature/better-index
commit cccdba8946c17d74ca920d1c0bf0394cccc91ab9
Merge: b36bc38 abc7fc6
Author: Arnold D. Robbins <address@hidden>
Date: Sun Sep 1 21:32:13 2019 +0300
Merge branch 'master' into feature/better-index
commit b36bc3839132d425b77bc0c29585fc399e722e4e
Merge: f9f5833 0d7384c
Author: Arnold D. Robbins <address@hidden>
Date: Sun Sep 1 21:30:35 2019 +0300
Merge branch 'master' into feature/better-index
commit f9f5833f8264e352ad5d0c11e9cdf6cc7cab957d
Merge: d5fdd72 c15d2db
Author: Arnold D. Robbins <address@hidden>
Date: Fri Aug 30 13:24:39 2019 +0300
Merge branch 'master' into feature/better-index
commit d5fdd72cbdaeed4bb79ea2333afd892538ecac2a
Merge: 7d394b5 58982af
Author: Arnold D. Robbins <address@hidden>
Date: Fri Aug 23 13:25:16 2019 +0300
Merge branch 'master' into feature/better-index
commit 7d394b58e0a7ab155d8127acf4433c427bb4ff63
Merge: b89bb5f 4ee83ad
Author: Arnold D. Robbins <address@hidden>
Date: Wed Aug 21 20:31:38 2019 +0300
Merge branch 'master' into feature/better-index
commit b89bb5f708c777216e0517f71f34fda6c8384fd7
Merge: de1841d 98e500f
Author: Arnold D. Robbins <address@hidden>
Date: Thu Aug 15 21:42:23 2019 +0300
Merge branch 'master' into feature/better-index
commit de1841d26dc01ee7b98ebbb9fd1057bb622bea53
Merge: 23e365f 631c606
Author: Arnold D. Robbins <address@hidden>
Date: Sun Aug 11 15:12:44 2019 +0300
Merge branch 'master' into feature/better-index
commit 23e365f89aa18d574fc1d59cfc49e2d614d07ad9
Merge: b881935 41248c3
Author: Arnold D. Robbins <address@hidden>
Date: Fri Aug 9 13:27:25 2019 +0300
Merge branch 'master' into feature/better-index
commit b881935f23a5acaaa11a32bb9c825f0cbf773b87
Merge: 91bfdd2 c5d33ce
Author: Arnold D. Robbins <address@hidden>
Date: Wed Aug 7 21:04:04 2019 +0300
Merge branch 'master' into feature/better-index
commit 91bfdd29f34aae06ce697087a5aeb2b8bb166b57
Merge: 535d1f8 9e237cf
Author: Arnold D. Robbins <address@hidden>
Date: Tue Jul 23 06:22:39 2019 +0300
Merge branch 'master' into feature/better-index
commit 535d1f87b3548669d56e0afb3f66051c28f251a6
Merge: 6a84244 825817a
Author: Arnold D. Robbins <address@hidden>
Date: Tue Jul 16 20:36:05 2019 +0300
Merge branch 'master' into feature/better-index
commit 6a84244105c8dbb6a4c3f9ecbe6f628f1f1f232f
Merge: 4f59334 2a44a09
Author: Arnold D. Robbins <address@hidden>
Date: Fri Jul 12 13:31:48 2019 +0300
Merge branch 'master' into feature/better-index
commit 4f593346798241eea8f1352b23c1548d5769dd6f
Merge: e1dde45 407990e
Author: Arnold D. Robbins <address@hidden>
Date: Tue Jul 9 22:08:27 2019 +0300
Merge branch 'master' into feature/better-index
commit e1dde45faec0ad4749cc76d3021a56bb6d3916c1
Merge: 62c3f6a 43d8598
Author: Arnold D. Robbins <address@hidden>
Date: Fri Jul 5 11:56:28 2019 +0300
Merge branch 'master' into feature/better-index
commit 62c3f6ab5227e5a04054506e2a292f7e92d63ec1
Merge: b825a44 acc40a5
Author: Arnold D. Robbins <address@hidden>
Date: Sun Jun 30 21:34:50 2019 +0300
Merge branch 'master' into feature/better-index
commit b825a4464a2c9747f79362d538ea6befa1306626
Merge: 0ae4a8c ca067d6
Author: Arnold D. Robbins <address@hidden>
Date: Fri Jun 28 12:01:47 2019 +0300
Merge branch 'master' into feature/better-index
commit 0ae4a8c2e58c930b5fc16e2417fe2fcf2ebb1b4a
Merge: 753dd0b 5892bca
Author: Arnold D. Robbins <address@hidden>
Date: Wed Jun 26 21:46:18 2019 +0300
Merge branch 'master' into feature/better-index
commit 753dd0b0520b70f6743b851997a0b68503b34231
Merge: 6014175 b19cc51
Author: Arnold D. Robbins <address@hidden>
Date: Fri Jun 21 11:54:46 2019 +0300
Merge branch 'master' into feature/better-index
commit 6014175606d69108f3f2d0401e2876c5bf3314bd
Merge: 3c4486a d5a2524
Author: Arnold D. Robbins <address@hidden>
Date: Wed Jun 19 22:36:37 2019 +0300
Merge branch 'master' into feature/better-index
commit 3c4486a411e45c59f423f4a7da7bfdfa379b0466
Merge: 0c9eb36 395fc52
Author: Arnold D. Robbins <address@hidden>
Date: Tue Jun 18 21:22:23 2019 +0300
Merge branch 'master' into feature/better-index
commit 0c9eb36227325fd5ef8b43c3064f2b719d6d3e82
Merge: b09a43a b79186d
Author: Arnold D. Robbins <address@hidden>
Date: Mon Jun 17 09:04:08 2019 +0300
Merge branch 'master' into feature/better-index
commit b09a43ac692df955a88e55b62a53d7f9b25349be
Merge: fcd3a99 a13ec1e
Author: Arnold D. Robbins <address@hidden>
Date: Tue Jun 11 22:21:42 2019 +0300
Merge branch 'master' into feature/better-index
commit fcd3a998082c7f7eb0dacd2bdaeab95dfcf24f2c
Merge: d33d334 991f242
Author: Arnold D. Robbins <address@hidden>
Date: Thu Jun 6 20:24:15 2019 +0300
Merge branch 'master' into feature/better-index
commit d33d334b59ce150a3fea35f10852f3c68616e5cc
Merge: 6e73114 18e5593
Author: Arnold D. Robbins <address@hidden>
Date: Wed Jun 5 21:41:24 2019 +0300
Merge branch 'master' into feature/better-index
commit 6e73114fd948ed9764a8447866bc17d387b518b4
Merge: 6876fef 4b31ece
Author: Arnold D. Robbins <address@hidden>
Date: Sun Jun 2 21:56:35 2019 +0300
Merge branch 'master' into feature/better-index
commit 6876fefcfacd45f85260b424f91ff4a02a5ae39b
Merge: c73d9f3 c8c9c01
Author: Arnold D. Robbins <address@hidden>
Date: Sun May 26 21:30:41 2019 +0300
Merge branch 'master' into feature/better-index
commit c73d9f3a015ebd61034c9630b1dae52cd18fef54
Merge: 39f9e68 9a4ad64
Author: Arnold D. Robbins <address@hidden>
Date: Wed May 22 21:00:29 2019 +0300
Merge branch 'master' into feature/better-index
commit 39f9e68cb1e87f239a2b3e8976db80c4156edf01
Merge: 76c49b5 d53cdeb
Author: Arnold D. Robbins <address@hidden>
Date: Mon May 13 22:07:47 2019 +0300
Merge branch 'master' into feature/better-index
commit 76c49b52d34e0bed9057edcf5c42870be8ab47fe
Merge: 5ff098c 3cc2114
Author: Arnold D. Robbins <address@hidden>
Date: Fri May 10 11:30:01 2019 +0300
Merge branch 'master' into feature/better-index
commit 5ff098c727f52ad5e00ca5f8c740d77778a96265
Merge: 38f75a2 3c565ae
Author: Arnold D. Robbins <address@hidden>
Date: Tue May 7 07:09:14 2019 +0300
Merge branch 'master' into feature/better-index
commit 38f75a2f87e1880303e4849c89a66a654f26c56e
Merge: 18e40b2 8bd3278
Author: Arnold D. Robbins <address@hidden>
Date: Mon May 6 21:29:39 2019 +0300
Merge branch 'master' into feature/better-index
commit 18e40b2bb4d640e149b2e15a98be5a622f8bf6a2
Merge: 1a4ad4a 5fcb16c
Author: Arnold D. Robbins <address@hidden>
Date: Sun May 5 20:34:57 2019 +0300
Merge branch 'master' into feature/better-index
commit 1a4ad4a8c0e417a4badf0eaf1fa342e7b4bc43b7
Author: Arnold D. Robbins <address@hidden>
Date: Tue Apr 30 21:36:20 2019 +0300
Finish off index improvements (we hope).
commit abcf377ae763aa4eb1d01ea46d60234d12ced679
Merge: 473d5d5 ee101d0
Author: Arnold D. Robbins <address@hidden>
Date: Sun Apr 28 20:53:58 2019 +0300
Merge branch 'master' into feature/better-index
commit 473d5d54f209e5a436a97b7f97b8f7c48048edc9
Author: Arnold D. Robbins <address@hidden>
Date: Sun Apr 28 19:48:10 2019 +0300
More indexing updates.
commit 34f5c17223396cae9585826bdd8d8ed9cc70198f
Merge: 5484684 7c22237
Author: Arnold D. Robbins <address@hidden>
Date: Sun Apr 28 19:45:38 2019 +0300
Merge branch 'master' into feature/better-index
commit 54846844084efcbcee650187c274ba2cae0b94d0
Merge: dfdf503 4edf1cc
Author: Arnold D. Robbins <address@hidden>
Date: Wed Apr 24 20:28:17 2019 +0300
Merge branch 'master' into feature/better-index
commit dfdf5031cea43a1d35b6cd513fa3c2692ef89a1c
Author: Arnold D. Robbins <address@hidden>
Date: Wed Apr 24 20:25:30 2019 +0300
More indexing.
commit 3887537ae8fbe3e46782de5ebd350a508be202c9
Merge: c0d4861 b5cb0d8
Author: Arnold D. Robbins <address@hidden>
Date: Tue Apr 23 11:05:15 2019 +0300
Merge branch 'master' into feature/better-index
commit c0d4861e21c806b8ad61e6e3a6cdf95e4335895e
Merge: 5fb0824 d3b5c77
Author: Arnold D. Robbins <address@hidden>
Date: Sun Apr 21 18:03:34 2019 +0300
Merge branch 'master' into feature/better-index
commit 5fb082420462c7b6037d08e39944f932065816f8
Author: Arnold D. Robbins <address@hidden>
Date: Sun Apr 21 13:47:24 2019 +0300
More indexing.
commit 874ac661e36b277ed145f8a29a419af6d5b728ff
Author: Arnold D. Robbins <address@hidden>
Date: Mon Apr 15 20:55:19 2019 +0300
More indexing fixes.
commit 8ded83c76cba4b10377d0f2a70b24d21f18097fd
Author: Arnold D. Robbins <address@hidden>
Date: Sun Apr 14 19:16:58 2019 +0300
More indexing fixes.
commit c0668e4b76ea872479dd8506037b08054555e97f
Merge: 6a9db98 c67cff4
Author: Arnold D. Robbins <address@hidden>
Date: Sun Apr 14 19:14:47 2019 +0300
Merge branch 'master' into feature/better-index
commit 6a9db98e9b184f38f93ea56f0bcfa7f7177b6ff6
Merge: 8255dbf b4e4ba4
Author: Arnold D. Robbins <address@hidden>
Date: Fri Apr 12 12:42:53 2019 +0300
Merge branch 'master' into feature/better-index
commit 8255dbfa053e78c7c05d541a842c82fb552505d5
Author: Arnold D. Robbins <address@hidden>
Date: Thu Apr 11 21:54:56 2019 +0300
More indexing fixes.
commit 5a52833a68f511e77ee5120d7142124c53740b68
Merge: 37d907a 8339e74
Author: Arnold D. Robbins <address@hidden>
Date: Wed Apr 10 22:06:58 2019 +0300
Merge branch 'master' into feature/better-index
commit 37d907a755994e20ca891731a13179f76eac8332
Author: Arnold D. Robbins <address@hidden>
Date: Mon Apr 8 21:42:47 2019 +0300
Next indexing fix.
commit 2cdadd3091075ffcdf4c8e3c4395b8059fc76033
Author: Arnold D. Robbins <address@hidden>
Date: Sun Apr 7 22:01:12 2019 +0300
More indexing updates.
commit 2eea174133723a30a3b347bdbc93d05ac3203623
Merge: 01af55a 1707928
Author: Arnold D. Robbins <address@hidden>
Date: Sun Apr 7 21:58:59 2019 +0300
Merge branch 'master' into feature/better-index
commit 01af55a27d0bafc4d9072ffb7b038bf8c82fe985
Author: Arnold D. Robbins <address@hidden>
Date: Fri Apr 5 10:22:50 2019 +0300
Fix sidebar.awk to use @subentry.
commit cab07e64da25528b986b28ab0d7f0e307da93759
Author: Arnold D. Robbins <address@hidden>
Date: Mon Apr 1 22:41:37 2019 +0300
Lots of indexing improvements.
commit 332f75e995bb537642759cd301b064b3e1ed6e65
Author: Arnold D. Robbins <address@hidden>
Date: Fri Mar 29 14:59:20 2019 +0300
Start on index rework.
commit 6167e5e065ecf16a8f9567046d563a89ecbf996c
Merge: 6c6f6eb 8952c58
Author: Arnold D. Robbins <address@hidden>
Date: Fri Mar 29 14:45:05 2019 +0300
Merge branch 'master' into feature/better-index
commit 6c6f6eb628de5deef8bd382b26270cf91fe82adb
Author: Arnold D. Robbins <address@hidden>
Date: Sat Mar 9 20:47:12 2019 +0200
Doc improvements w.r.t. interval expressions.
commit d00a702b26ce45b3723d54f105b21181d64158ac
Author: Arnold D. Robbins <address@hidden>
Date: Fri Mar 8 12:13:21 2019 +0200
Add generated files.
commit 83a5b6f87902d0a3e4cd709eabd6d88ddf471829
Author: Arnold D. Robbins <address@hidden>
Date: Fri Mar 8 11:50:07 2019 +0200
First pass at indexing improvements.
diff --git a/NEWS b/NEWS
index 17322c2..4c8dcdf 100644
--- a/NEWS
+++ b/NEWS
@@ -12,9 +12,13 @@ Changes from 5.0.1 to 5.1.0
2. A number of memory leak issues have been fixed.
-3. Infrastructure upgrades: Bison 3.4.2.
+3. Infrastructure upgrades: Bison 3.4.2, Texinfo 6.7.
-4. Several bugs have been fixed. See the ChangeLog for details.
+4. The indexing in the manual has been thoroughly revised, in particular
+ making use of the facilities in Texinfo 6.7. That version (or newer)
+ must be used to format the manual.
+
+5. Several bugs have been fixed. See the ChangeLog for details.
Changes from 5.0.0 to 5.0.1
---------------------------
diff --git a/README b/README
index d30e3a4..964e2a9 100644
--- a/README
+++ b/README
@@ -23,8 +23,8 @@ says one thing but gawk does something different.
To format the documentation with TeX, use at least version 2017-09.16
of texinfo.tex. There is a usable copy of texinfo.tex in the doc directory.
-You should also use at least version 6.5 of texindex and of makeinfo
-from the texinfo-6.5 distribution.
+You must also use at least version 6.7 of texindex and of makeinfo
+from the texinfo-6.7 distribution.
INSTALLATION:
diff --git a/doc/ChangeLog b/doc/ChangeLog
index 65124d1..0309296 100644
--- a/doc/ChangeLog
+++ b/doc/ChangeLog
@@ -1,3 +1,10 @@
+2019-09-24 Arnold D. Robbins <address@hidden>
+
+ * gawktexi.in: Take advantage of new indexing features in
+ Texinfo 6.7.
+ * sidebar.awk: Ditto.
+ * texinfo.tex: Updated from Texinfo 6.7 distribution.
+
2019-08-23 Arnold D. Robbins <address@hidden>
* awkcard.in: Fixes and updates. Some cleanup.
diff --git a/doc/gawk.info b/doc/gawk.info
index 9875a0a..fecb54f 100644
--- a/doc/gawk.info
+++ b/doc/gawk.info
@@ -1,4 +1,4 @@
-This is gawk.info, produced by makeinfo version 6.5 from gawk.texi.
+This is gawk.info, produced by makeinfo version 6.7 from gawk.texi.
Copyright (C) 1989, 1991, 1992, 1993, 1996-2005, 2007, 2009-2019
Free Software Foundation, Inc.
@@ -960,7 +960,7 @@ became the primary maintainer. Current development focuses
on bug
fixes, performance improvements, standards compliance, and,
occasionally, new features.
- In May 1997, Ju"rgen Kahrs felt the need for network access from
+ In May 1997, Jürgen Kahrs felt the need for network access from
'awk', and with a little help from me, set about adding features to do
this for 'gawk'. At that time, he also wrote the bulk of 'TCP/IP
Internetworking with 'gawk'' (a separate document, available as part of
@@ -1365,13 +1365,13 @@ acknowledgements:
Dr. Nelson Beebe, Andreas Buening, Dr. Manuel Collado, Antonio
Colombo, Stephen Davies, Scott Deifik, Akim Demaille, Daniel Richard G.,
-Juan Manuel Guerrero, Darrel Hankerson, Michal Jaegermann, Ju"rgen
-Kahrs, Stepan Kasal, John Malmberg, Dave Pitts, Chet Ramey, Pat Rankin,
-Andrew Schorr, Corinna Vinschen, and Eli Zaretskii (in alphabetical
-order) make up the current 'gawk' "crack portability team." Without
-their hard work and help, 'gawk' would not be nearly the robust,
-portable program it is today. It has been and continues to be a
-pleasure working with this team of fine people.
+Juan Manuel Guerrero, Darrel Hankerson, Michal Jaegermann, Jürgen Kahrs,
+Stepan Kasal, John Malmberg, Dave Pitts, Chet Ramey, Pat Rankin, Andrew
+Schorr, Corinna Vinschen, and Eli Zaretskii (in alphabetical order) make
+up the current 'gawk' "crack portability team." Without their hard work
+and help, 'gawk' would not be nearly the robust, portable program it is
+today. It has been and continues to be a pleasure working with this
+team of fine people.
Notable code and documentation contributions were made by a number of
people. *Note Contributors:: for the full list.
@@ -2805,6 +2805,10 @@ The following list describes options mandated by the
POSIX standard:
respect to whatever the Free Software Foundation is currently
distributing. It is also useful for bug reports (*note Bugs::).
+'--'
+ Mark the end of all options. Any command-line arguments following
+ '--' are placed in 'ARGV', even if they start with a minus sign.
+
As long as program text has been supplied, any other options are
flagged as invalid with a warning message but are otherwise ignored.
@@ -3977,7 +3981,7 @@ These apply to non-ASCII character sets, which can have
single symbols
(called "collating elements") that are represented with more than one
character. They can also have several characters that are equivalent
for "collating", or sorting, purposes. (For example, in French, a plain
-"e" and a grave-accented "e`" are equivalent.) These sequences are:
+"e" and a grave-accented "è" are equivalent.) These sequences are:
Collating symbols
Multicharacter collating elements enclosed between '[.' and '.]'.
@@ -3988,9 +3992,9 @@ Collating symbols
Equivalence classes
Locale-specific names for a list of characters that are equal. The
name is enclosed between '[=' and '=]'. For example, the name 'e'
- might be used to represent all of "e," "e^," "e`," and "e'." In
- this case, '[[=e=]]' is a regexp that matches any of 'e', 'e^',
- 'e'', or 'e`'.
+ might be used to represent all of "e," "ê," "è," and "é." In this
+ case, '[[=e=]]' is a regexp that matches any of 'e', 'ê', 'é', or
+ 'è'.
These features are very valuable in non-English-speaking locales.
@@ -25787,7 +25791,7 @@ was discussed earlier, in *note General Data Types::.
may not be updated.
It is not obvious at first glance how to work with scalar cookies or
-what their raison d'e^tre really is. In theory, the 'sym_lookup()' and
+what their raison d'être really is. In theory, the 'sym_lookup()' and
'sym_update()' routines are all you really need to work with variables.
For example, you might have code that looks up the value of a variable,
evaluates a condition, and then possibly changes the value of the
@@ -29265,7 +29269,7 @@ Info file, in approximate chronological order:
dynamically adding new functions. (This was obsoleted at 'gawk'
4.1.)
- * Ju"rgen Kahrs contributed the initial version of the TCP/IP
+ * Jürgen Kahrs contributed the initial version of the TCP/IP
networking code and documentation, and motivated the inclusion of
the '|&' operator.
@@ -30056,6 +30060,9 @@ Cygwin is the same as for a Unix system:
on Cygwin takes considerably longer. However, it does finish, and then
the 'make' proceeds as usual.
+ You may also install 'gawk' using the regular Cygwin installer. In
+general Cygwin supplies the latest released version.
+
Recent versions of Cygwin open all files in binary mode. This means
that you should use 'RS = "\r?\n"' in order to be able to handle
standard MS-Windows text files with carriage-return plus line-feed line
@@ -33637,80 +33644,81 @@ Index
[index ]
* Menu:
-* ! (exclamation point), ! operator: Boolean Ops. (line 69)
-* ! (exclamation point), ! operator <1>: Precedence. (line 51)
-* ! (exclamation point), ! operator <2>: Ranges. (line 47)
-* ! (exclamation point), ! operator <3>: Egrep Program. (line 174)
-* ! (exclamation point), != operator: Comparison Operators.
- (line 11)
-* ! (exclamation point), != operator <1>: Precedence. (line 64)
* ! (exclamation point), !~ operator: Regexp Usage. (line 19)
* ! (exclamation point), !~ operator <1>: Computed Regexps. (line 6)
* ! (exclamation point), !~ operator <2>: Case-sensitivity. (line 26)
* ! (exclamation point), !~ operator <3>: Regexp Constants. (line 6)
+* ! (exclamation point), != operator: Comparison Operators.
+ (line 11)
* ! (exclamation point), !~ operator <4>: Comparison Operators.
(line 11)
* ! (exclamation point), !~ operator <5>: Comparison Operators.
(line 98)
+* ! (exclamation point), ! operator: Boolean Ops. (line 69)
+* ! (exclamation point), ! operator <1>: Precedence. (line 51)
+* ! (exclamation point), != operator <1>: Precedence. (line 64)
* ! (exclamation point), !~ operator <6>: Precedence. (line 79)
* ! (exclamation point), !~ operator <7>: Expression Patterns.
(line 24)
-* " (double quote), in regexp constants: Computed Regexps. (line 30)
+* ! (exclamation point), ! operator <2>: Ranges. (line 47)
+* ! (exclamation point), ! operator <3>: Egrep Program. (line 174)
* " (double quote), in shell commands: Quoting. (line 54)
+* " (double quote), in regexp constants: Computed Regexps. (line 30)
* # (number sign), #! (executable scripts): Executable Scripts.
(line 6)
* # (number sign), commenting: Comments. (line 6)
+* $ (dollar sign), regexp operator: Regexp Operator Details.
+ (line 31)
* $ (dollar sign), $ field operator: Fields. (line 19)
-* $ (dollar sign), $ field operator <1>: Precedence. (line 42)
* $ (dollar sign), incrementing fields and arrays: Increment Ops.
(line 30)
-* $ (dollar sign), regexp operator: Regexp Operator Details.
- (line 31)
-* % (percent sign), % operator: Precedence. (line 54)
+* $ (dollar sign), $ field operator <1>: Precedence. (line 42)
* % (percent sign), %= operator: Assignment Ops. (line 129)
+* % (percent sign), % operator: Precedence. (line 54)
* % (percent sign), %= operator <1>: Precedence. (line 94)
* & (ampersand), && operator: Boolean Ops. (line 59)
* & (ampersand), && operator <1>: Precedence. (line 85)
* & (ampersand), gsub()/gensub()/sub() functions and: Gory Details.
(line 6)
* ' (single quote): One-shot. (line 15)
-* ' (single quote) in gawk command lines: Long. (line 35)
-* ' (single quote), in shell commands: Quoting. (line 48)
+* ' (single quote), in gawk command lines: Long. (line 35)
* ' (single quote), vs. apostrophe: Comments. (line 27)
+* ' (single quote), in shell commands: Quoting. (line 48)
* ' (single quote), with double quotes: Quoting. (line 73)
-* () (parentheses), in a profile: Profiling. (line 146)
* () (parentheses), regexp operator: Regexp Operator Details.
(line 77)
-* * (asterisk), * operator, as multiplication operator: Precedence.
- (line 54)
+* () (parentheses), in a profile: Profiling. (line 146)
* * (asterisk), * operator, as regexp operator: Regexp Operator Details.
(line 91)
-* * (asterisk), * operator, null strings, matching: String Functions.
- (line 542)
* * (asterisk), ** operator: Arithmetic Ops. (line 81)
-* * (asterisk), ** operator <1>: Precedence. (line 48)
-* * (asterisk), **= operator: Assignment Ops. (line 129)
-* * (asterisk), **= operator <1>: Precedence. (line 94)
* * (asterisk), *= operator: Assignment Ops. (line 129)
+* * (asterisk), **= operator: Assignment Ops. (line 129)
+* * (asterisk), ** operator <1>: Precedence. (line 48)
+* * (asterisk), * operator, as multiplication operator: Precedence.
+ (line 54)
* * (asterisk), *= operator <1>: Precedence. (line 94)
-* + (plus sign), + operator: Precedence. (line 51)
-* + (plus sign), + operator <1>: Precedence. (line 57)
+* * (asterisk), **= operator <1>: Precedence. (line 94)
+* * (asterisk), * operator, null strings, matching: String Functions.
+ (line 542)
+* + (plus sign), regexp operator: Regexp Operator Details.
+ (line 107)
+* + (plus sign), += operator: Assignment Ops. (line 81)
* + (plus sign), ++ operator: Increment Ops. (line 11)
* + (plus sign), ++ operator <1>: Increment Ops. (line 40)
* + (plus sign), ++ operator <2>: Precedence. (line 45)
-* + (plus sign), += operator: Assignment Ops. (line 81)
+* + (plus sign), + operator: Precedence. (line 51)
+* + (plus sign), + operator <1>: Precedence. (line 57)
* + (plus sign), += operator <1>: Precedence. (line 94)
-* + (plus sign), regexp operator: Regexp Operator Details.
- (line 107)
* , (comma), in range patterns: Ranges. (line 6)
-* - (hyphen), - operator: Precedence. (line 51)
-* - (hyphen), - operator <1>: Precedence. (line 57)
+* - (hyphen), file names beginning with: Options. (line 64)
+* - (hyphen), -- end of options marker: Options. (line 336)
+* - (hyphen), in bracket expressions: Bracket Expressions. (line 25)
+* - (hyphen), -= operator: Assignment Ops. (line 129)
* - (hyphen), -- operator: Increment Ops. (line 48)
* - (hyphen), -- operator <1>: Precedence. (line 45)
-* - (hyphen), -= operator: Assignment Ops. (line 129)
+* - (hyphen), - operator: Precedence. (line 51)
+* - (hyphen), - operator <1>: Precedence. (line 57)
* - (hyphen), -= operator <1>: Precedence. (line 94)
-* - (hyphen), file names beginning with: Options. (line 64)
-* - (hyphen), in bracket expressions: Bracket Expressions. (line 25)
* --assign option: Options. (line 36)
* --bignum option: Options. (line 230)
* --characters-as-bytes option: Options. (line 73)
@@ -33754,11 +33762,11 @@ Index
* --profile option <1>: Profiling. (line 12)
* --re-interval option: Options. (line 304)
* --sandbox option: Options. (line 316)
-* --sandbox option, disabling system() function: I/O Functions.
- (line 128)
* --sandbox option, input redirection with getline: Getline. (line 19)
* --sandbox option, output redirection with print, printf: Redirection.
(line 6)
+* --sandbox option, disabling system() function: I/O Functions.
+ (line 128)
* --source option: Options. (line 121)
* --traditional option: Options. (line 86)
* --traditional option, --posix option and: Options. (line 298)
@@ -33771,14 +33779,14 @@ Index
* -D option: Options. (line 112)
* -e option: Options. (line 121)
* -E option: Options. (line 147)
-* -e option <1>: Options. (line 367)
+* -e option <1>: Options. (line 371)
* -f option: Long. (line 12)
* -F option: Options. (line 21)
* -f option <1>: Options. (line 25)
-* -F option, -Ft sets FS to TAB: Options. (line 339)
+* -F option, -Ft sets FS to TAB: Options. (line 343)
+* -f option, multiple uses: Options. (line 348)
* -F option, command-line: Command Line Field Separator.
(line 6)
-* -f option, multiple uses: Options. (line 344)
* -g option: Options. (line 169)
* -h option: Options. (line 176)
* -i option: Options. (line 181)
@@ -33809,147 +33817,150 @@ Index
* .po files <1>: Translator i18n. (line 6)
* .po files, converting to .mo: I18N Example. (line 80)
* .pot files: Explaining gettext. (line 31)
-* / (forward slash) to enclose regular expressions: Regexp. (line 10)
-* / (forward slash), / operator: Precedence. (line 54)
+* / (forward slash), to enclose regular expressions: Regexp. (line 10)
* / (forward slash), /= operator: Assignment Ops. (line 129)
-* / (forward slash), /= operator <1>: Precedence. (line 94)
-* / (forward slash), /= operator, vs. /=.../ regexp constant: Assignment Ops.
+* / (forward slash), /= operator, vs. /=.../ regexp constant: Assignment Ops.
(line 149)
+* / (forward slash), / operator: Precedence. (line 54)
+* / (forward slash), /= operator <1>: Precedence. (line 94)
* / (forward slash), patterns and: Expression Patterns. (line 24)
* /= operator vs. /=.../ regexp constant: Assignment Ops. (line 149)
-* /dev/... special files: Special FD. (line 48)
* /dev/fd/N special files (gawk): Special FD. (line 48)
+* /dev/... special files: Special FD. (line 48)
* /inet/... special files (gawk): TCP/IP Networking. (line 6)
* /inet4/... special files (gawk): TCP/IP Networking. (line 6)
* /inet6/... special files (gawk): TCP/IP Networking. (line 6)
* : (colon), ?: operator: Precedence. (line 91)
-* ::, namespace separator: Qualified Names. (line 6)
-* ; (semicolon), AWKPATH variable and: PC Using. (line 13)
-* ; (semicolon), separating rules: Statements/Lines. (line 90)
+* : (colon), :: namespace separator: Qualified Names. (line 6)
* ; (semicolon), separating statements in actions: Statements/Lines.
(line 90)
+* ; (semicolon), separating rules: Statements/Lines. (line 90)
* ; (semicolon), separating statements in actions <1>: Action Overview.
(line 19)
* ; (semicolon), separating statements in actions <2>: Statements.
(line 10)
+* ; (semicolon), AWKPATH variable and: PC Using. (line 13)
+* < (left angle bracket), < operator (I/O): Getline/File. (line 6)
* < (left angle bracket), < operator: Comparison Operators.
(line 11)
-* < (left angle bracket), < operator <1>: Precedence. (line 64)
-* < (left angle bracket), < operator (I/O): Getline/File. (line 6)
* < (left angle bracket), <= operator: Comparison Operators.
(line 11)
+* < (left angle bracket), < operator <1>: Precedence. (line 64)
* < (left angle bracket), <= operator <1>: Precedence. (line 64)
* = (equals sign), = operator: Assignment Ops. (line 6)
* = (equals sign), == operator: Comparison Operators.
(line 11)
* = (equals sign), == operator <1>: Precedence. (line 64)
-* > (right angle bracket), > operator: Comparison Operators.
- (line 11)
-* > (right angle bracket), > operator <1>: Precedence. (line 64)
* > (right angle bracket), > operator (I/O): Redirection. (line 22)
+* > (right angle bracket), >> operator (I/O): Redirection. (line 50)
* > (right angle bracket), >= operator: Comparison Operators.
(line 11)
+* > (right angle bracket), > operator: Comparison Operators.
+ (line 11)
* > (right angle bracket), >= operator <1>: Precedence. (line 64)
-* > (right angle bracket), >> operator (I/O): Redirection. (line 50)
+* > (right angle bracket), > operator <1>: Precedence. (line 64)
* > (right angle bracket), >> operator (I/O) <1>: Precedence. (line 64)
-* ? (question mark), ?: operator: Precedence. (line 91)
* ? (question mark), regexp operator: Regexp Operator Details.
(line 113)
* ? (question mark), regexp operator <1>: GNU Regexp Operators.
(line 62)
-* @-notation for indirect function calls: Indirect Calls. (line 47)
-* @include directive: Include Files. (line 8)
-* @load directive: Loading Shared Libraries.
+* ? (question mark), ?: operator: Precedence. (line 91)
+* @ (at-sign), @include directive: Include Files. (line 8)
+* @ (at-sign), @load directive: Loading Shared Libraries.
(line 8)
-* @namespace directive: Changing The Namespace.
+* @ (at-sign), @-notation for indirect function calls: Indirect Calls.
+ (line 47)
+* @ (at-sign), @namespace directive: Changing The Namespace.
(line 6)
-* @namespace, no effect on BEGIN, BEGINFILE, END, and ENDFILE: Changing The
Namespace.
+* @ (at-sign), @namespace directive, BEGIN, BEGINFILE, END, ENDFILE and:
Changing The Namespace.
(line 37)
* [] (square brackets), regexp operator: Regexp Operator Details.
(line 52)
* \ (backslash): Comments. (line 50)
-* \ (backslash), as field separator: Command Line Field Separator.
- (line 24)
+* \ (backslash), in shell commands: Quoting. (line 48)
* \ (backslash), continuing lines and: Statements/Lines. (line 19)
-* \ (backslash), continuing lines and, comments and: Statements/Lines.
- (line 75)
* \ (backslash), continuing lines and, in csh: Statements/Lines.
(line 43)
-* \ (backslash), gsub()/gensub()/sub() functions and: Gory Details.
- (line 6)
-* \ (backslash), in bracket expressions: Bracket Expressions. (line 25)
+* \ (backslash), continuing lines and, comments and: Statements/Lines.
+ (line 75)
* \ (backslash), in escape sequences: Escape Sequences. (line 6)
-* \ (backslash), in escape sequences <1>: Escape Sequences. (line 103)
-* \ (backslash), in escape sequences, POSIX and: Escape Sequences.
- (line 108)
-* \ (backslash), in regexp constants: Computed Regexps. (line 30)
-* \ (backslash), in shell commands: Quoting. (line 48)
-* \ (backslash), regexp operator: Regexp Operator Details.
- (line 14)
-* \ (backslash), \" escape sequence: Escape Sequences. (line 85)
-* \ (backslash), \' operator (gawk): GNU Regexp Operators.
- (line 59)
-* \ (backslash), \/ escape sequence: Escape Sequences. (line 76)
-* \ (backslash), \< operator (gawk): GNU Regexp Operators.
- (line 33)
-* \ (backslash), \> operator (gawk): GNU Regexp Operators.
- (line 37)
* \ (backslash), \a escape sequence: Escape Sequences. (line 34)
* \ (backslash), \b escape sequence: Escape Sequences. (line 38)
-* \ (backslash), \B operator (gawk): GNU Regexp Operators.
- (line 46)
* \ (backslash), \f escape sequence: Escape Sequences. (line 41)
* \ (backslash), \n escape sequence: Escape Sequences. (line 44)
-* \ (backslash), \NNN escape sequence: Escape Sequences. (line 56)
* \ (backslash), \r escape sequence: Escape Sequences. (line 47)
+* \ (backslash), \t escape sequence: Escape Sequences. (line 50)
+* \ (backslash), \v escape sequence: Escape Sequences. (line 53)
+* \ (backslash), \NNN escape sequence: Escape Sequences. (line 56)
+* \ (backslash), \x escape sequence: Escape Sequences. (line 61)
+* \ (backslash), \/ escape sequence: Escape Sequences. (line 76)
+* \ (backslash), \" escape sequence: Escape Sequences. (line 85)
+* \ (backslash), in escape sequences <1>: Escape Sequences. (line 103)
+* \ (backslash), in escape sequences, POSIX and: Escape Sequences.
+ (line 108)
+* \ (backslash), regexp operator: Regexp Operator Details.
+ (line 14)
+* \ (backslash), in bracket expressions: Bracket Expressions. (line 25)
+* \ (backslash), in regexp constants: Computed Regexps. (line 30)
* \ (backslash), \s operator (gawk): GNU Regexp Operators.
(line 13)
* \ (backslash), \S operator (gawk): GNU Regexp Operators.
(line 17)
-* \ (backslash), \t escape sequence: Escape Sequences. (line 50)
-* \ (backslash), \v escape sequence: Escape Sequences. (line 53)
* \ (backslash), \w operator (gawk): GNU Regexp Operators.
(line 22)
* \ (backslash), \W operator (gawk): GNU Regexp Operators.
(line 28)
-* \ (backslash), \x escape sequence: Escape Sequences. (line 61)
+* \ (backslash), \< operator (gawk): GNU Regexp Operators.
+ (line 33)
+* \ (backslash), \> operator (gawk): GNU Regexp Operators.
+ (line 37)
* \ (backslash), \y operator (gawk): GNU Regexp Operators.
(line 41)
+* \ (backslash), \B operator (gawk): GNU Regexp Operators.
+ (line 46)
* \ (backslash), \` operator (gawk): GNU Regexp Operators.
(line 57)
-* ^ (caret), in bracket expressions: Bracket Expressions. (line 25)
-* ^ (caret), in FS: Regexp Field Splitting.
+* \ (backslash), \' operator (gawk): GNU Regexp Operators.
(line 59)
+* \ (backslash), as field separator: Command Line Field Separator.
+ (line 24)
+* \ (backslash), gsub()/gensub()/sub() functions and: Gory Details.
+ (line 6)
* ^ (caret), regexp operator: Regexp Operator Details.
(line 18)
+* ^ (caret), in bracket expressions: Bracket Expressions. (line 25)
* ^ (caret), regexp operator <1>: GNU Regexp Operators.
(line 62)
-* ^ (caret), ^ operator: Precedence. (line 48)
+* ^ (caret), in FS: Regexp Field Splitting.
+ (line 59)
* ^ (caret), ^= operator: Assignment Ops. (line 129)
+* ^ (caret), ^ operator: Precedence. (line 48)
* ^ (caret), ^= operator <1>: Precedence. (line 94)
-* _ (underscore), C macro: Explaining gettext. (line 71)
* _ (underscore), in names of private variables: Library Names.
(line 29)
-* _ (underscore), translatable string: Programmer i18n. (line 69)
+* _ (underscore), C macro: Explaining gettext. (line 71)
+* _ (underscore), translatable strings: Programmer i18n. (line 69)
* _gr_init() user-defined function: Group Functions. (line 83)
* _ord_init() user-defined function: Ordinal Functions. (line 16)
* _pw_init() user-defined function: Passwd Functions. (line 105)
-* {} (braces): Profiling. (line 142)
+* {} (braces), regexp operator: Regexp Operator Details.
+ (line 118)
* {} (braces), actions and: Action Overview. (line 19)
* {} (braces), statements, grouping: Statements. (line 10)
+* {} (braces): Profiling. (line 142)
* | (vertical bar): Regexp Operator Details.
(line 66)
* | (vertical bar), | operator (I/O): Getline/Pipe. (line 10)
-* | (vertical bar), | operator (I/O) <1>: Redirection. (line 57)
-* | (vertical bar), | operator (I/O) <2>: Precedence. (line 64)
* | (vertical bar), |& operator (I/O): Getline/Coprocess. (line 6)
+* | (vertical bar), | operator (I/O) <1>: Redirection. (line 57)
* | (vertical bar), |& operator (I/O) <1>: Redirection. (line 96)
-* | (vertical bar), |& operator (I/O) <2>: Precedence. (line 64)
-* | (vertical bar), |& operator (I/O) <3>: Two-way I/O. (line 27)
* | (vertical bar), |& operator (I/O), pipes, closing: Close Files And Pipes.
(line 120)
* | (vertical bar), || operator: Boolean Ops. (line 59)
+* | (vertical bar), | operator (I/O) <2>: Precedence. (line 64)
+* | (vertical bar), |& operator (I/O) <2>: Precedence. (line 64)
* | (vertical bar), || operator <1>: Precedence. (line 88)
+* | (vertical bar), |& operator (I/O) <3>: Two-way I/O. (line 27)
* ~ (tilde), ~ operator: Regexp Usage. (line 19)
* ~ (tilde), ~ operator <1>: Computed Regexps. (line 6)
* ~ (tilde), ~ operator <2>: Case-sensitivity. (line 26)
@@ -33960,31 +33971,33 @@ Index
(line 98)
* ~ (tilde), ~ operator <6>: Precedence. (line 79)
* ~ (tilde), ~ operator <7>: Expression Patterns. (line 24)
+* aaa (amazing awk assembler) program: Glossary. (line 16)
* accessing fields: Fields. (line 6)
* accessing global variables from extensions: Symbol Table Access.
(line 6)
* account information: Passwd Functions. (line 16)
* account information <1>: Group Functions. (line 6)
-* actions: Action Overview. (line 6)
-* actions, control statements in: Statements. (line 6)
* actions, default: Very Simple. (line 35)
* actions, empty: Very Simple. (line 40)
+* actions: Action Overview. (line 6)
+* actions, control statements in: Statements. (line 6)
* Ada programming language: Glossary. (line 11)
-* adding, features to gawk: Adding Code. (line 6)
* adding, fields: Changing Fields. (line 53)
+* adding, features to gawk: Adding Code. (line 6)
* advanced features, fixed-width data: Constant Size. (line 6)
+* advanced features, specifying field content: Splitting By Content.
+ (line 9)
* advanced features, gawk: Advanced Features. (line 6)
-* advanced features, network programming: TCP/IP Networking. (line 6)
* advanced features, nondecimal input data: Nondecimal Data. (line 6)
* advanced features, processes, communicating with: Two-way I/O.
(line 6)
-* advanced features, specifying field content: Splitting By Content.
- (line 9)
+* advanced features, network programming: TCP/IP Networking. (line 6)
* Aho, Alfred: History. (line 17)
* Aho, Alfred <1>: Contributors. (line 12)
* alarm clock example program: Alarm Program. (line 11)
* alarm.awk program: Alarm Program. (line 31)
* algorithms: Basic High Level. (line 57)
+* all source files, show in debugger: Debugger Info. (line 45)
* allocating memory for extensions: Memory Allocation Functions.
(line 6)
* amazing awk assembler (aaa): Glossary. (line 16)
@@ -34001,29 +34014,29 @@ Index
* AND bitwise operation: Bitwise Functions. (line 6)
* and Boolean-logic operator: Boolean Ops. (line 6)
* ANSI: Glossary. (line 32)
-* API informational variables: Extension API Informational Variables.
+* API, version: Extension Versioning.
(line 6)
-* API version: Extension Versioning.
+* API, informational variables: Extension API Informational Variables.
(line 6)
* arbitrary precision: Arbitrary Precision Arithmetic.
(line 6)
* arbitrary precision <1>: Computer Arithmetic. (line 61)
-* arbitrary precision integers: Arbitrary Precision Integers.
+* arbitrary precision, integers: Arbitrary Precision Integers.
(line 6)
* archaeologists: Bugs. (line 6)
* arctangent: Numeric Functions. (line 12)
-* ARGC/ARGV variables: Auto-set. (line 15)
+* ARGC/ARGV variables, portability and: Executable Scripts. (line 59)
* ARGC/ARGV variables, command-line arguments: Other Arguments.
(line 21)
+* ARGC/ARGV variables: Auto-set. (line 15)
* ARGC/ARGV variables, how to use: ARGC and ARGV. (line 6)
-* ARGC/ARGV variables, portability and: Executable Scripts. (line 59)
-* ARGIND variable: Auto-set. (line 44)
* ARGIND variable, command-line arguments: Other Arguments. (line 21)
+* ARGIND variable: Auto-set. (line 44)
+* arguments, command-line, invoking awk: Command Line. (line 6)
* arguments, command-line: Other Arguments. (line 6)
+* arguments, in function calls: Function Calls. (line 18)
* arguments, command-line <1>: Auto-set. (line 15)
* arguments, command-line <2>: ARGC and ARGV. (line 6)
-* arguments, command-line, invoking awk: Command Line. (line 6)
-* arguments, in function calls: Function Calls. (line 18)
* arguments, processing: Getopt Function. (line 6)
* ARGV array: Options. (line 316)
* ARGV array, indexing into: Other Arguments. (line 21)
@@ -34033,144 +34046,170 @@ Index
(line 6)
* array scanning order, controlling: Controlling Scanning.
(line 14)
-* array subscripts, null strings as: Uninitialized Subscripts.
- (line 43)
* array subscripts, numbers as: Numeric Array Subscripts.
(line 6)
-* array, number of elements: String Functions. (line 201)
+* array subscripts, null string as: Uninitialized Subscripts.
+ (line 43)
* arrays: Arrays. (line 6)
-* arrays of arrays: Arrays of Arrays. (line 6)
-* arrays, an example of using: Array Example. (line 6)
-* arrays, as parameters to functions: Pass By Value/Reference.
- (line 44)
+* arrays, indexing: Array Intro. (line 48)
* arrays, associative: Array Intro. (line 48)
-* arrays, associative, library functions and: Library Names. (line 58)
-* arrays, deleting entire contents: Delete. (line 39)
-* arrays, elements that don't exist: Reference to Elements.
+* arrays, sparse: Array Intro. (line 76)
+* arrays, IGNORECASE variable and: Array Intro. (line 100)
+* arrays, referencing elements: Reference to Elements.
+ (line 6)
+* arrays, unassigned elements: Reference to Elements.
+ (line 18)
+* arrays, elements, that don't exist: Reference to Elements.
(line 23)
* arrays, elements, assigning values: Assigning Elements. (line 6)
-* arrays, elements, deleting: Delete. (line 6)
+* arrays, example of using: Array Example. (line 6)
+* arrays, scanning: Scanning an Array. (line 6)
+* arrays, for statement and: Scanning an Array. (line 20)
* arrays, elements, order of access by in operator: Scanning an Array.
(line 48)
-* arrays, elements, retrieving number of: String Functions. (line 42)
-* arrays, for statement and: Scanning an Array. (line 20)
-* arrays, IGNORECASE variable and: Array Intro. (line 100)
-* arrays, indexing: Array Intro. (line 48)
-* arrays, merging into strings: Join Function. (line 6)
-* arrays, multidimensional: Multidimensional. (line 10)
-* arrays, multidimensional, scanning: Multiscanning. (line 11)
* arrays, numeric subscripts: Numeric Array Subscripts.
(line 6)
-* arrays, referencing elements: Reference to Elements.
+* arrays, subscripts, uninitialized variables as: Uninitialized Subscripts.
(line 6)
-* arrays, scanning: Scanning an Array. (line 6)
-* arrays, sorting: Array Sorting Functions.
+* arrays, elements, deleting: Delete. (line 6)
+* arrays, deleting entire contents: Delete. (line 39)
+* arrays, multidimensional: Multidimensional. (line 10)
+* arrays, multidimensional, scanning: Multiscanning. (line 11)
+* arrays, arrays of arrays: Arrays of Arrays. (line 6)
+* arrays, elements, retrieving number of: String Functions. (line 42)
+* arrays, number of elements: String Functions. (line 201)
+* arrays, as parameters to functions: Pass By Value/Reference.
+ (line 44)
+* arrays, associative, library functions and: Library Names. (line 58)
+* arrays, merging into strings: Join Function. (line 6)
+* arrays, sorting, asort() function (gawk): Array Sorting Functions.
+ (line 6)
+* arrays, sorting, asorti() function (gawk): Array Sorting Functions.
(line 6)
* arrays, sorting, IGNORECASE variable and: Array Sorting Functions.
(line 83)
-* arrays, sparse: Array Intro. (line 76)
-* arrays, subscripts, uninitialized variables as: Uninitialized Subscripts.
- (line 6)
-* arrays, unassigned elements: Reference to Elements.
- (line 18)
* artificial intelligence, gawk and: Distribution contents.
(line 58)
-* ASCII: Ordinal Functions. (line 45)
-* ASCII <1>: Glossary. (line 194)
+* ASCII: Escape Sequences. (line 31)
+* ASCII <1>: Bracket Expressions. (line 79)
+* ASCII <2>: Scalar Constants. (line 20)
+* ASCII <3>: Ordinal Functions. (line 45)
+* ASCII <4>: Alarm Program. (line 20)
+* ASCII <5>: Two-way I/O. (line 95)
+* ASCII <6>: Ranges and Locales. (line 10)
+* ASCII <7>: Ranges and Locales. (line 61)
+* ASCII <8>: History summary. (line 20)
+* ASCII <9>: Glossary. (line 194)
+* ASCII <10>: Glossary. (line 320)
* asort: String Functions. (line 42)
* asort <1>: Array Sorting Functions.
(line 6)
* asort() function (gawk), arrays, sorting: Array Sorting Functions.
(line 6)
+* asort() function (gawk), side effects: Array Sorting Functions.
+ (line 6)
* asorti: String Functions. (line 42)
* asorti <1>: Array Sorting Functions.
(line 6)
* asorti() function (gawk), arrays, sorting: Array Sorting Functions.
(line 6)
+* asorti() function (gawk), side effects: Array Sorting Functions.
+ (line 6)
* assert() function (C library): Assert Function. (line 6)
* assert() user-defined function: Assert Function. (line 28)
* assertions: Assert Function. (line 6)
* assign values to variables, in debugger: Viewing And Changing Data.
(line 62)
* assignment operators: Assignment Ops. (line 6)
-* assignment operators, evaluation order: Assignment Ops. (line 110)
* assignment operators, lvalues/rvalues: Assignment Ops. (line 31)
+* assignment operators, evaluation order: Assignment Ops. (line 110)
* assignments as file names: Ignoring Assigns. (line 6)
* associative arrays: Array Intro. (line 48)
-* asterisk (*), * operator, as multiplication operator: Precedence.
- (line 54)
* asterisk (*), * operator, as regexp operator: Regexp Operator Details.
(line 91)
-* asterisk (*), * operator, null strings, matching: String Functions.
- (line 542)
* asterisk (*), ** operator: Arithmetic Ops. (line 81)
-* asterisk (*), ** operator <1>: Precedence. (line 48)
-* asterisk (*), **= operator: Assignment Ops. (line 129)
-* asterisk (*), **= operator <1>: Precedence. (line 94)
* asterisk (*), *= operator: Assignment Ops. (line 129)
+* asterisk (*), **= operator: Assignment Ops. (line 129)
+* asterisk (*), ** operator <1>: Precedence. (line 48)
+* asterisk (*), * operator, as multiplication operator: Precedence.
+ (line 54)
* asterisk (*), *= operator <1>: Precedence. (line 94)
+* asterisk (*), **= operator <1>: Precedence. (line 94)
+* asterisk (*), * operator, null strings, matching: String Functions.
+ (line 542)
+* at-sign (@), @include directive: Include Files. (line 8)
+* at-sign (@), @load directive: Loading Shared Libraries.
+ (line 8)
+* at-sign (@), @-notation for indirect function calls: Indirect Calls.
+ (line 47)
+* at-sign (@), @namespace directive: Changing The Namespace.
+ (line 6)
+* at-sign (@), @namespace directive, BEGIN, BEGINFILE, END, ENDFILE and:
Changing The Namespace.
+ (line 37)
* atan2: Numeric Functions. (line 12)
* automatic displays, in debugger: Debugger Info. (line 24)
* awf (amazingly workable formatter) program: Glossary. (line 23)
-* awk debugging, enabling: Options. (line 112)
-* awk language, POSIX version: Assignment Ops. (line 138)
-* awk namespace: Default Namespace. (line 6)
-* awk namespace, identifier name storage: Internal Name Management.
+* awk: Preface. (line 6)
+* awk, POSIX and: Preface. (line 21)
+* awk, POSIX and <1>: Preface. (line 21)
+* awk, gawk and: Preface. (line 21)
+* awk, uses for: Preface. (line 21)
+* awk, history of: History. (line 17)
+* awk, new vs. old: Names. (line 6)
+* awk, terms describing: This Manual. (line 6)
+* awk, gawk and <1>: This Manual. (line 14)
+* awk, function of: Getting Started. (line 6)
+* awk, uses for <1>: Getting Started. (line 12)
+* awk, uses for <2>: When. (line 6)
+* awk, invoking: Command Line. (line 6)
+* awk, profiling, enabling: Options. (line 271)
+* awk, implementations, limits: Getline Notes. (line 14)
+* awk, implementation issues, pipes: Redirection. (line 129)
+* awk, new vs. old, OFMT variable: Strings And Numbers. (line 56)
+* awk, language, POSIX version: Assignment Ops. (line 138)
+* awk, regexp constants and: Comparison Operators.
+ (line 103)
+* awk, language, POSIX version <1>: Next Statement. (line 44)
+* awk, language, POSIX version <2>: Definition Syntax. (line 99)
+* awk, namespace: Default Namespace. (line 6)
+* awk, namespace, identifier name storage: Internal Name Management.
(line 6)
-* awk namespace, use for indirect function calls: Internal Name Management.
+* awk, namespace, use for indirect function calls: Internal Name Management.
+ (line 6)
+* awk, versions of: V7/SVR3.1. (line 6)
+* awk, versions of, changes between V7 and SVR3.1: V7/SVR3.1. (line 6)
+* awk, versions of, changes between SVR3.1 and SVR4: SVR4. (line 6)
+* awk, versions of, changes between SVR4 and POSIX awk: POSIX.
(line 6)
-* awk profiling, enabling: Options. (line 271)
+* awk, versions of <1>: BTL. (line 6)
+* awk, implementations: Other Versions. (line 6)
+* awk, versions of <2>: Other Versions. (line 13)
* awk programs: Getting Started. (line 12)
+* awk programs, running: Running gawk. (line 6)
+* awk programs, running, from shell scripts: One-shot. (line 22)
+* awk programs, running, without input files: Read Terminal. (line 16)
+* awk programs, running <1>: Long. (line 6)
+* awk programs, lengthy: Long. (line 6)
* awk programs <1>: Executable Scripts. (line 6)
+* awk programs, documenting: Comments. (line 6)
+* awk programs, one-line examples: Very Simple. (line 46)
* awk programs <2>: Two Rules. (line 6)
* awk programs, complex: When. (line 27)
-* awk programs, documenting: Comments. (line 6)
-* awk programs, documenting <1>: Library Names. (line 6)
-* awk programs, examples of: Sample Programs. (line 6)
-* awk programs, execution of: Next Statement. (line 16)
-* awk programs, internationalizing: I18N Functions. (line 6)
-* awk programs, internationalizing <1>: Programmer i18n. (line 6)
-* awk programs, lengthy: Long. (line 6)
-* awk programs, lengthy, assertions: Assert Function. (line 6)
* awk programs, location of: Options. (line 25)
+* awk programs, debugging, enabling: Options. (line 112)
* awk programs, location of <1>: Options. (line 147)
* awk programs, location of <2>: Options. (line 181)
-* awk programs, one-line examples: Very Simple. (line 46)
-* awk programs, profiling: Profiling. (line 6)
-* awk programs, running: Running gawk. (line 6)
-* awk programs, running <1>: Long. (line 6)
-* awk programs, running, from shell scripts: One-shot. (line 22)
-* awk programs, running, without input files: Read Terminal. (line 16)
* awk programs, shell variables in: Using Shell Variables.
(line 6)
-* awk, function of: Getting Started. (line 6)
-* awk, gawk and: Preface. (line 21)
-* awk, gawk and <1>: This Manual. (line 14)
-* awk, history of: History. (line 17)
-* awk, implementation issues, pipes: Redirection. (line 129)
-* awk, implementations: Other Versions. (line 6)
-* awk, implementations, limits: Getline Notes. (line 14)
-* awk, invoking: Command Line. (line 6)
-* awk, new vs. old: Names. (line 6)
-* awk, new vs. old, OFMT variable: Strings And Numbers. (line 56)
-* awk, POSIX and: Preface. (line 21)
-* awk, POSIX and, See Also POSIX awk: Preface. (line 21)
-* awk, regexp constants and: Comparison Operators.
- (line 103)
-* awk, See Also gawk: Preface. (line 34)
-* awk, terms describing: This Manual. (line 6)
-* awk, uses for: Preface. (line 21)
-* awk, uses for <1>: Getting Started. (line 12)
-* awk, uses for <2>: When. (line 6)
-* awk, versions of: V7/SVR3.1. (line 6)
-* awk, versions of, changes between SVR3.1 and SVR4: SVR4. (line 6)
-* awk, versions of, changes between SVR4 and POSIX awk: POSIX.
- (line 6)
-* awk, versions of, changes between V7 and SVR3.1: V7/SVR3.1. (line 6)
-* awk, versions of, See Also Brian Kernighan's awk: BTL. (line 6)
-* awk, versions of, See Also Brian Kernighan's awk <1>: Other Versions.
- (line 13)
+* awk programs, execution of: Next Statement. (line 16)
+* awk programs, internationalizing: I18N Functions. (line 6)
+* awk programs, documenting <1>: Library Names. (line 6)
+* awk programs, lengthy, assertions: Assert Function. (line 6)
+* awk programs, examples of: Sample Programs. (line 6)
+* awk programs, profiling: Profiling. (line 6)
+* awk programs, internationalizing <1>: Programmer i18n. (line 6)
* awka compiler for awk: Other Versions. (line 64)
+* awk <1>: Preface. (line 34)
* AWKLIBPATH environment variable: AWKLIBPATH Variable. (line 6)
* AWKPATH environment variable: AWKPATH Variable. (line 6)
* AWKPATH environment variable <1>: PC Using. (line 13)
@@ -34179,86 +34218,86 @@ Index
* awkvars.out file: Options. (line 98)
* b debugger command (alias for break): Breakpoint Control. (line 11)
* backslash (\): Comments. (line 50)
-* backslash (\), as field separator: Command Line Field Separator.
- (line 24)
+* backslash (\), in shell commands: Quoting. (line 48)
* backslash (\), continuing lines and: Statements/Lines. (line 19)
-* backslash (\), continuing lines and, comments and: Statements/Lines.
- (line 75)
* backslash (\), continuing lines and, in csh: Statements/Lines.
(line 43)
-* backslash (\), gsub()/gensub()/sub() functions and: Gory Details.
- (line 6)
-* backslash (\), in bracket expressions: Bracket Expressions. (line 25)
+* backslash (\), continuing lines and, comments and: Statements/Lines.
+ (line 75)
* backslash (\), in escape sequences: Escape Sequences. (line 6)
-* backslash (\), in escape sequences <1>: Escape Sequences. (line 103)
-* backslash (\), in escape sequences, POSIX and: Escape Sequences.
- (line 108)
-* backslash (\), in regexp constants: Computed Regexps. (line 30)
-* backslash (\), in shell commands: Quoting. (line 48)
-* backslash (\), regexp operator: Regexp Operator Details.
- (line 14)
-* backslash (\), \" escape sequence: Escape Sequences. (line 85)
-* backslash (\), \' operator (gawk): GNU Regexp Operators.
- (line 59)
-* backslash (\), \/ escape sequence: Escape Sequences. (line 76)
-* backslash (\), \< operator (gawk): GNU Regexp Operators.
- (line 33)
-* backslash (\), \> operator (gawk): GNU Regexp Operators.
- (line 37)
* backslash (\), \a escape sequence: Escape Sequences. (line 34)
* backslash (\), \b escape sequence: Escape Sequences. (line 38)
-* backslash (\), \B operator (gawk): GNU Regexp Operators.
- (line 46)
* backslash (\), \f escape sequence: Escape Sequences. (line 41)
* backslash (\), \n escape sequence: Escape Sequences. (line 44)
-* backslash (\), \NNN escape sequence: Escape Sequences. (line 56)
* backslash (\), \r escape sequence: Escape Sequences. (line 47)
+* backslash (\), \t escape sequence: Escape Sequences. (line 50)
+* backslash (\), \v escape sequence: Escape Sequences. (line 53)
+* backslash (\), \NNN escape sequence: Escape Sequences. (line 56)
+* backslash (\), \x escape sequence: Escape Sequences. (line 61)
+* backslash (\), \/ escape sequence: Escape Sequences. (line 76)
+* backslash (\), \" escape sequence: Escape Sequences. (line 85)
+* backslash (\), in escape sequences <1>: Escape Sequences. (line 103)
+* backslash (\), in escape sequences, POSIX and: Escape Sequences.
+ (line 108)
+* backslash (\), regexp operator: Regexp Operator Details.
+ (line 14)
+* backslash (\), in bracket expressions: Bracket Expressions. (line 25)
+* backslash (\), in regexp constants: Computed Regexps. (line 30)
* backslash (\), \s operator (gawk): GNU Regexp Operators.
(line 13)
* backslash (\), \S operator (gawk): GNU Regexp Operators.
(line 17)
-* backslash (\), \t escape sequence: Escape Sequences. (line 50)
-* backslash (\), \v escape sequence: Escape Sequences. (line 53)
* backslash (\), \w operator (gawk): GNU Regexp Operators.
(line 22)
* backslash (\), \W operator (gawk): GNU Regexp Operators.
(line 28)
-* backslash (\), \x escape sequence: Escape Sequences. (line 61)
+* backslash (\), \< operator (gawk): GNU Regexp Operators.
+ (line 33)
+* backslash (\), \> operator (gawk): GNU Regexp Operators.
+ (line 37)
* backslash (\), \y operator (gawk): GNU Regexp Operators.
(line 41)
+* backslash (\), \B operator (gawk): GNU Regexp Operators.
+ (line 46)
* backslash (\), \` operator (gawk): GNU Regexp Operators.
(line 57)
+* backslash (\), \' operator (gawk): GNU Regexp Operators.
+ (line 59)
+* backslash (\), as field separator: Command Line Field Separator.
+ (line 24)
+* backslash (\), gsub()/gensub()/sub() functions and: Gory Details.
+ (line 6)
* backtrace debugger command: Execution Stack. (line 13)
* Beebe, Nelson H.F.: Acknowledgments. (line 60)
* Beebe, Nelson H.F. <1>: Numeric Functions. (line 33)
* Beebe, Nelson H.F. <2>: Other Versions. (line 78)
* BEGIN pattern: Field Separators. (line 44)
-* BEGIN pattern <1>: BEGIN/END. (line 6)
-* BEGIN pattern <2>: Using BEGIN/END. (line 6)
-* BEGIN pattern, assert() user-defined function and: Assert Function.
- (line 83)
-* BEGIN pattern, Boolean patterns and: Expression Patterns. (line 70)
-* BEGIN pattern, execution order not affected by @namespace: Changing The
Namespace.
- (line 37)
-* BEGIN pattern, exit statement and: Exit Statement. (line 12)
* BEGIN pattern, getline and: Getline Notes. (line 19)
* BEGIN pattern, headings, adding: Print Examples. (line 42)
-* BEGIN pattern, next/nextfile statements and: I/O And BEGIN/END.
- (line 36)
-* BEGIN pattern, next/nextfile statements and <1>: Next Statement.
- (line 44)
* BEGIN pattern, OFS/ORS variables, assigning values to: Output Separators.
(line 20)
+* BEGIN pattern, Boolean patterns and: Expression Patterns. (line 70)
+* BEGIN pattern <1>: BEGIN/END. (line 6)
+* BEGIN pattern <2>: Using BEGIN/END. (line 6)
* BEGIN pattern, operators and: Using BEGIN/END. (line 17)
* BEGIN pattern, print statement and: I/O And BEGIN/END. (line 15)
-* BEGIN pattern, profiling and: Profiling. (line 62)
+* BEGIN pattern, next/nextfile statements and: I/O And BEGIN/END.
+ (line 36)
+* BEGIN pattern, next/nextfile statements and <1>: Next Statement.
+ (line 44)
+* BEGIN pattern, exit statement and: Exit Statement. (line 12)
+* 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, profiling and: Profiling. (line 62)
* BEGIN pattern, TEXTDOMAIN variable and: Programmer i18n. (line 60)
-* BEGINFILE pattern: BEGINFILE/ENDFILE. (line 6)
+* BEGIN pattern, @namespace directive and: Changing The Namespace.
+ (line 37)
* BEGINFILE pattern, Boolean patterns and: Expression Patterns.
(line 70)
-* BEGINFILE pattern, execution order not affected by @namespace: Changing The
Namespace.
+* BEGINFILE pattern: BEGINFILE/ENDFILE. (line 6)
+* BEGINFILE pattern, @namespace directive and: Changing The Namespace.
(line 37)
* beginfile() user-defined function: Filetrans Function. (line 62)
* Bentley, Jon: Glossary. (line 204)
@@ -34276,48 +34315,51 @@ Index
* BINMODE variable <1>: PC Using. (line 20)
* bit-manipulation functions: Bitwise Functions. (line 6)
* bits2str() user-defined function: Bitwise Functions. (line 69)
-* bitwise AND: Bitwise Functions. (line 40)
-* bitwise complement: Bitwise Functions. (line 25)
-* bitwise complement <1>: Bitwise Functions. (line 44)
-* bitwise OR: Bitwise Functions. (line 50)
-* bitwise XOR: Bitwise Functions. (line 57)
* bitwise, operations: Bitwise Functions. (line 6)
+* bitwise, complement: Bitwise Functions. (line 25)
* bitwise, shift: Bitwise Functions. (line 32)
+* bitwise, AND: Bitwise Functions. (line 40)
+* bitwise, complement <1>: Bitwise Functions. (line 44)
+* bitwise, OR: Bitwise Functions. (line 50)
+* bitwise, XOR: Bitwise Functions. (line 57)
* body, in actions: Statements. (line 10)
* body, in loops: While Statement. (line 14)
* Boolean expressions: Boolean Ops. (line 6)
* Boolean expressions, as patterns: Expression Patterns. (line 39)
-* Boolean operators, See Boolean expressions: Boolean Ops. (line 6)
* Bourne shell, quoting rules for: Quoting. (line 18)
-* braces ({}): Profiling. (line 142)
+* braces ({}), regexp operator: Regexp Operator Details.
+ (line 118)
* braces ({}), actions and: Action Overview. (line 19)
* braces ({}), statements, grouping: Statements. (line 10)
+* braces ({}): Profiling. (line 142)
* bracket expressions: Regexp Operator Details.
(line 52)
+* bracket expressions, complemented: Regexp Operator Details.
+ (line 60)
* bracket expressions <1>: Bracket Expressions. (line 6)
+* bracket expressions, range expressions: Bracket Expressions.
+ (line 6)
+* bracket expressions, character lists: Bracket Expressions. (line 6)
* bracket expressions, character classes: Bracket Expressions.
(line 40)
* bracket expressions, collating elements: Bracket Expressions.
(line 90)
+* bracket expressions, non-ASCII: Bracket Expressions. (line 90)
* bracket expressions, collating symbols: Bracket Expressions.
(line 97)
-* bracket expressions, complemented: Regexp Operator Details.
- (line 60)
* bracket expressions, equivalence classes: Bracket Expressions.
(line 103)
-* bracket expressions, non-ASCII: Bracket Expressions. (line 90)
-* bracket expressions, range expressions: Bracket Expressions.
- (line 6)
* break debugger command: Breakpoint Control. (line 11)
* break statement: Break Statement. (line 6)
-* breakpoint (debugger): Debugging Terms. (line 33)
-* breakpoint at location, how to delete: Breakpoint Control. (line 36)
-* breakpoint commands: Debugger Execution Control.
- (line 10)
-* breakpoint condition: Breakpoint Control. (line 54)
+* breakpoint: Debugging Terms. (line 33)
+* breakpoint, setting: Breakpoint Control. (line 11)
+* breakpoint, at location, how to delete: Breakpoint Control. (line 36)
+* breakpoint, condition: Breakpoint Control. (line 54)
* breakpoint, delete by number: Breakpoint Control. (line 64)
* breakpoint, how to disable or enable: Breakpoint Control. (line 69)
-* breakpoint, setting: Breakpoint Control. (line 11)
+* breakpoint, commands to execute at: Debugger Execution Control.
+ (line 10)
+* breakpoint, show all in debugger: Debugger Info. (line 21)
* Brennan, Michael: Foreword3. (line 84)
* Brennan, Michael <1>: Foreword4. (line 33)
* Brennan, Michael <2>: Acknowledgments. (line 79)
@@ -34352,56 +34394,64 @@ Index
* Buening, Andreas: Acknowledgments. (line 60)
* Buening, Andreas <1>: Contributors. (line 95)
* Buening, Andreas <2>: Maintainers. (line 14)
+* buffering, interactive vs. noninteractive: I/O Functions. (line 76)
* buffering, input/output: I/O Functions. (line 168)
* buffering, input/output <1>: Two-way I/O. (line 53)
-* buffering, interactive vs. noninteractive: I/O Functions. (line 76)
-* buffers, flushing: I/O Functions. (line 32)
-* buffers, flushing <1>: I/O Functions. (line 168)
* buffers, operators for: GNU Regexp Operators.
(line 51)
+* buffers, flushing: I/O Functions. (line 32)
+* buffers, flushing <1>: I/O Functions. (line 168)
* bug reports, email address, address@hidden: Bug address. (line 31)
* address@hidden bug reporting address: Bug address. (line 31)
* built-in functions: Functions. (line 6)
* built-in functions, evaluation order: Calling Built-in. (line 30)
* BusyBox Awk: Other Versions. (line 88)
-* c.e., See common extensions: Conventions. (line 51)
+* C library functions, assert(): Assert Function. (line 6)
+* C library functions, getopt(): Getopt Function. (line 15)
+* C library functions, getpwent(): Passwd Functions. (line 16)
+* C library functions, getpwnam(): Passwd Functions. (line 175)
+* C library functions, getpwuid(): Passwd Functions. (line 186)
+* C library functions, getpwent() <1>: Passwd Functions. (line 196)
+* C library functions, endpwent(): Passwd Functions. (line 208)
+* C library functions, getgrent(): Group Functions. (line 6)
+* C library functions, getgrnam(): Group Functions. (line 173)
+* C library functions, getgrgid(): Group Functions. (line 184)
+* C library functions, getgruser(): Group Functions. (line 193)
+* C library functions, getgrent() <1>: Group Functions. (line 202)
+* C library functions, endgrent(): Group Functions. (line 213)
+* C library functions, getaddrinfo(): TCP/IP Networking. (line 39)
+* C library functions, textdomain(): Explaining gettext. (line 28)
+* C library functions, bindtextdomain(): Explaining gettext. (line 50)
+* C library functions, gettext(): Explaining gettext. (line 63)
* call by reference: Pass By Value/Reference.
(line 44)
* call by value: Pass By Value/Reference.
(line 15)
-* call stack (debugger): Debugging Terms. (line 10)
+* call stack, explanation of: Debugging Terms. (line 10)
* call stack, display in debugger: Execution Stack. (line 13)
-* caret (^), in bracket expressions: Bracket Expressions. (line 25)
* caret (^), regexp operator: Regexp Operator Details.
(line 18)
+* caret (^), in bracket expressions: Bracket Expressions. (line 25)
* caret (^), regexp operator <1>: GNU Regexp Operators.
(line 62)
-* caret (^), ^ operator: Precedence. (line 48)
* caret (^), ^= operator: Assignment Ops. (line 129)
+* caret (^), ^ operator: Precedence. (line 48)
* caret (^), ^= operator <1>: Precedence. (line 94)
* case keyword: Switch Statement. (line 6)
+* case sensitivity, regexps and: Case-sensitivity. (line 6)
+* case sensitivity, gawk: Case-sensitivity. (line 26)
+* case sensitivity, string comparisons and: User-modified. (line 79)
+* case sensitivity, regexps and <1>: User-modified. (line 79)
* case sensitivity, array indices and: Array Intro. (line 100)
* case sensitivity, converting case: String Functions. (line 528)
* case sensitivity, example programs: Library Functions. (line 53)
-* case sensitivity, gawk: Case-sensitivity. (line 26)
-* case sensitivity, regexps and: Case-sensitivity. (line 6)
-* case sensitivity, regexps and <1>: User-modified. (line 79)
-* case sensitivity, string comparisons and: User-modified. (line 79)
* CGI, awk scripts for: Options. (line 147)
-* character classes, See bracket expressions: Regexp Operator Details.
- (line 52)
-* character lists in regular expressions: Bracket Expressions.
- (line 6)
-* character lists, See bracket expressions: Regexp Operator Details.
- (line 52)
* character sets (machine character encodings): Ordinal Functions.
(line 45)
* character sets (machine character encodings) <1>: Glossary. (line 194)
-* character sets, See Also bracket expressions: Regexp Operator Details.
- (line 52)
+* characters, values of as numbers: Ordinal Functions. (line 6)
* characters, counting: Wc Program. (line 6)
* characters, transliterating: Translate Program. (line 6)
-* characters, values of as numbers: Ordinal Functions. (line 6)
* Chassell, Robert J.: Acknowledgments. (line 33)
* chdir() extension function: Extension Sample File Functions.
(line 12)
@@ -34432,68 +34482,70 @@ Index
* Colombo, Antonio: Acknowledgments. (line 60)
* Colombo, Antonio <1>: Contributors. (line 143)
* colon (:), ?: operator: Precedence. (line 91)
+* colon (:), :: namespace separator: Qualified Names. (line 6)
* columns, aligning: Print Examples. (line 69)
* columns, cutting: Cut Program. (line 6)
* comma (,), in range patterns: Ranges. (line 6)
* command completion, in debugger: Readline Support. (line 6)
-* command line, arguments: Other Arguments. (line 6)
-* command line, arguments <1>: Auto-set. (line 15)
-* command line, arguments <2>: Auto-set. (line 154)
-* command line, arguments <3>: ARGC and ARGV. (line 6)
-* command line, directories on: Command-line directories.
- (line 6)
* command line, formats: Running gawk. (line 12)
-* command line, FS on, setting: Command Line Field Separator.
- (line 6)
-* command line, invoking awk from: Command Line. (line 6)
* command line, option -f: Long. (line 12)
+* command line, invoking awk from: Command Line. (line 6)
* command line, options: Options. (line 6)
* command line, options, end of: Options. (line 59)
+* command line, arguments: Other Arguments. (line 6)
+* command line, FS on, setting: Command Line Field Separator.
+ (line 6)
+* command line, directories on: Command-line directories.
+ (line 6)
* command line, variables, assigning on: Assignment Options. (line 6)
-* command-line options, processing: Getopt Function. (line 6)
-* command-line options, string extraction: String Extraction. (line 6)
+* command line, arguments <1>: Auto-set. (line 15)
+* command line, arguments <2>: Auto-set. (line 154)
+* command line, arguments <3>: ARGC and ARGV. (line 6)
+* command line, options, processing: Getopt Function. (line 6)
+* command line, options, string extraction: String Extraction.
+ (line 6)
* commands debugger command: Debugger Execution Control.
(line 10)
* commands to execute at breakpoint: Debugger Execution Control.
(line 10)
* commenting: Comments. (line 6)
* commenting, backslash continuation and: Statements/Lines. (line 75)
-* common extensions, ** operator: Arithmetic Ops. (line 30)
-* common extensions, **= operator: Assignment Ops. (line 138)
-* common extensions, /dev/stderr special file: Special FD. (line 48)
+* common extensions, \x escape sequence: Escape Sequences. (line 61)
+* common extensions, RS as a regexp: gawk split records. (line 6)
+* common extensions, single character fields: Single Character Fields.
+ (line 6)
* common extensions, /dev/stdin special file: Special FD. (line 48)
* common extensions, /dev/stdout special file: Special FD. (line 48)
-* common extensions, BINMODE variable: PC Using. (line 20)
+* common extensions, /dev/stderr special file: Special FD. (line 48)
+* common extensions, ** operator: Arithmetic Ops. (line 30)
+* common extensions, **= operator: Assignment Ops. (line 138)
* common extensions, delete to delete entire arrays: Delete. (line 39)
-* common extensions, func keyword: Definition Syntax. (line 99)
* common extensions, length() applied to an array: String Functions.
(line 201)
-* common extensions, RS as a regexp: gawk split records. (line 6)
-* common extensions, single character fields: Single Character Fields.
- (line 6)
-* common extensions, \x escape sequence: Escape Sequences. (line 61)
+* common extensions, func keyword: Definition Syntax. (line 99)
+* common extensions, BINMODE variable: PC Using. (line 20)
* comp.lang.awk newsgroup: Usenet. (line 11)
* comparison expressions: Typing and Comparison.
(line 9)
-* comparison expressions, as patterns: Expression Patterns. (line 14)
* comparison expressions, string vs. regexp: Comparison Operators.
(line 79)
-* compatibility mode (gawk), extensions: POSIX/GNU. (line 6)
+* comparison expressions, as patterns: Expression Patterns. (line 14)
+* compatibility mode (gawk), specifying: Options. (line 86)
* compatibility mode (gawk), file names: Special Caveats. (line 9)
-* compatibility mode (gawk), hexadecimal numbers: Nondecimal-numbers.
- (line 59)
* compatibility mode (gawk), octal numbers: Nondecimal-numbers.
(line 59)
-* compatibility mode (gawk), specifying: Options. (line 86)
+* compatibility mode (gawk), hexadecimal numbers: Nondecimal-numbers.
+ (line 59)
+* compatibility mode (gawk), extensions: POSIX/GNU. (line 6)
* compiled programs: Basic High Level. (line 13)
* compiled programs <1>: Glossary. (line 216)
-* compiling gawk for Cygwin: Cygwin. (line 6)
-* compiling gawk for MS-Windows: PC Compiling. (line 11)
-* compiling gawk for VMS: VMS Compilation. (line 6)
+* compiling gawk, for MS-Windows: PC Compiling. (line 11)
+* compiling gawk, for Cygwin: Cygwin. (line 6)
+* compiling gawk, for VMS: VMS Compilation. (line 6)
* compl: Bitwise Functions. (line 44)
* complement, bitwise: Bitwise Functions. (line 25)
* component name: Qualified Names. (line 6)
-* component names, naming rules: Naming Rules. (line 6)
+* component name, naming rules: Naming Rules. (line 6)
* compound statements, control statements and: Statements. (line 10)
* concatenating: Concatenation. (line 9)
* condition debugger command: Breakpoint Control. (line 54)
@@ -34510,10 +34562,11 @@ Index
(line 46)
* configuration options, gawk: Additional Configuration Options.
(line 6)
-* constant regexps: Regexp Usage. (line 57)
-* constants, nondecimal: Nondecimal Data. (line 6)
-* constants, numeric: Scalar Constants. (line 6)
+* constants, regexp: Regexp Usage. (line 57)
* constants, types of: Constants. (line 6)
+* constants, numeric: Scalar Constants. (line 6)
+* constants, string: Scalar Constants. (line 15)
+* constants, nondecimal: Nondecimal Data. (line 6)
* continue debugger command: Debugger Execution Control.
(line 33)
* continue program, in debugger: Debugger Execution Control.
@@ -34522,37 +34575,38 @@ Index
* control statements: Statements. (line 6)
* controlling array scanning order: Controlling Scanning.
(line 14)
-* convert string to lower case: String Functions. (line 529)
-* convert string to number: String Functions. (line 396)
-* convert string to upper case: String Functions. (line 535)
-* converting integer array subscripts: Numeric Array Subscripts.
+* converting, string to numbers: Strings And Numbers. (line 6)
+* converting, numbers to strings: Strings And Numbers. (line 6)
+* converting, integer array subscripts to strings: Numeric Array Subscripts.
(line 31)
+* converting, string to numbers <1>: String Functions. (line 396)
+* converting, string to lower case: String Functions. (line 529)
+* converting, string to upper case: String Functions. (line 535)
* converting, dates to timestamps: Time Functions. (line 78)
-* converting, numbers to strings: Strings And Numbers. (line 6)
+* converting, string to numbers <2>: Bitwise Functions. (line 109)
* converting, numbers to strings <1>: Bitwise Functions. (line 109)
-* converting, strings to numbers: Strings And Numbers. (line 6)
-* converting, strings to numbers <1>: Bitwise Functions. (line 109)
* CONVFMT variable: Strings And Numbers. (line 29)
* CONVFMT variable <1>: User-modified. (line 30)
* CONVFMT variable, array subscripts and: Numeric Array Subscripts.
(line 6)
* cookie: Glossary. (line 255)
+* coprocesses, getline from: Getline/Coprocess. (line 6)
* coprocesses: Redirection. (line 96)
-* coprocesses <1>: Two-way I/O. (line 27)
* coprocesses, closing: Close Files And Pipes.
(line 6)
-* coprocesses, getline from: Getline/Coprocess. (line 6)
+* coprocesses <1>: Two-way I/O. (line 27)
* cos: Numeric Functions. (line 16)
* cosine: Numeric Functions. (line 16)
-* counting: Wc Program. (line 6)
+* counting words, lines, and characters: Wc Program. (line 6)
* csh utility: Statements/Lines. (line 43)
-* csh utility, POSIXLY_CORRECT environment variable: Options. (line 388)
+* csh utility, POSIXLY_CORRECT environment variable: Options. (line 392)
* csh utility, |& operator, comparison with: Two-way I/O. (line 27)
* ctime() user-defined function: Function Example. (line 74)
* Curreli, Marco: Contributors. (line 147)
* currency symbols, localization: Explaining gettext. (line 104)
* current namespace, pushing and popping: Changing The Namespace.
(line 29)
+* current source file, show in debugger: Debugger Info. (line 37)
* current system time: Time Functions. (line 68)
* custom.h file: Configuration Philosophy.
(line 30)
@@ -34563,62 +34617,61 @@ Index
* cut utility <1>: Cut Program. (line 6)
* cut.awk program: Cut Program. (line 45)
* d debugger command (alias for delete): Breakpoint Control. (line 64)
-* d.c., See dark corner: Conventions. (line 42)
* dark corner: Conventions. (line 42)
-* dark corner <1>: Glossary. (line 266)
-* dark corner, "0" is actually true: Truth Values. (line 24)
-* dark corner, /= operator vs. /=.../ regexp constant: Assignment Ops.
- (line 149)
* dark corner, ARGV variable, value of: Executable Scripts. (line 59)
-* dark corner, array subscripts: Uninitialized Subscripts.
- (line 43)
-* dark corner, break statement: Break Statement. (line 51)
-* dark corner, close() function: Close Files And Pipes.
- (line 132)
-* dark corner, command-line arguments: Assignment Options. (line 43)
-* dark corner, continue statement: Continue Statement. (line 44)
-* dark corner, CONVFMT variable: Strings And Numbers. (line 39)
+* dark corner, invoking awk: Command Line. (line 16)
* dark corner, empty programs: Command Line. (line 20)
* dark corner, escape sequences: Other Arguments. (line 44)
* dark corner, escape sequences, for metacharacters: Escape Sequences.
(line 144)
-* dark corner, exit statement: Exit Statement. (line 30)
+* dark corner, input files: awk split records. (line 117)
+* dark corner, strings, storing: gawk split records. (line 82)
+* dark corner, NF variable, decrementing: Changing Fields. (line 107)
+* dark corner, ^, in FS: Regexp Field Splitting.
+ (line 59)
+* dark corner, FS as null string: Single Character Fields.
+ (line 20)
* dark corner, field separators: Full Line Fields. (line 22)
+* dark corner, multiline records: Multiple Line. (line 35)
* dark corner, FILENAME variable: Getline Notes. (line 19)
-* dark corner, FILENAME variable <1>: Auto-set. (line 108)
-* dark corner, FNR/NR variables: Auto-set. (line 409)
+* dark corner, OFMT variable: OFMT. (line 27)
* dark corner, format-control characters: Control Letters. (line 33)
* dark corner, format-control characters <1>: Control Letters.
(line 108)
-* dark corner, FS as null string: Single Character Fields.
- (line 20)
-* dark corner, input files: awk split records. (line 117)
-* dark corner, invoking awk: Command Line. (line 16)
-* dark corner, length() function: String Functions. (line 187)
-* dark corner, locale's decimal point character: Locale influences conversions.
- (line 17)
-* dark corner, multiline records: Multiple Line. (line 35)
-* dark corner, NF variable, decrementing: Changing Fields. (line 107)
-* dark corner, OFMT variable: OFMT. (line 27)
-* dark corner, range patterns, line continuation and: Ranges. (line 64)
-* dark corner, regexp as second argument to index(): String Functions.
- (line 165)
+* dark corner, close() function: Close Files And Pipes.
+ (line 132)
+* dark corner, string continuation: Scalar Constants. (line 53)
* dark corner, regexp constants: Standard Regexp Constants.
(line 6)
+* dark corner, regexp constants, as arguments to user-defined functions:
Standard Regexp Constants.
+ (line 43)
+* dark corner, command-line arguments: Assignment Options. (line 43)
+* dark corner, CONVFMT variable: Strings And Numbers. (line 39)
+* dark corner, locale's decimal point character: Locale influences conversions.
+ (line 17)
* dark corner, regexp constants, /= operator and: Assignment Ops.
(line 149)
-* dark corner, regexp constants, as arguments to user-defined functions:
Standard Regexp Constants.
+* dark corner, /= operator vs. /=.../ regexp constant: Assignment Ops.
+ (line 149)
+* dark corner, "0" is actually true: Truth Values. (line 24)
+* dark corner, range patterns, line continuation and: Ranges. (line 64)
+* dark corner, break statement: Break Statement. (line 51)
+* dark corner, continue statement: Continue Statement. (line 44)
+* dark corner, exit statement: Exit Statement. (line 30)
+* dark corner, value of ARGV[0]: Auto-set. (line 39)
+* dark corner, FILENAME variable <1>: Auto-set. (line 108)
+* dark corner, FNR/NR variables: Auto-set. (line 409)
+* dark corner, array subscripts: Uninitialized Subscripts.
(line 43)
+* dark corner, regexp as second argument to index(): String Functions.
+ (line 165)
+* dark corner, length() function: String Functions. (line 187)
* dark corner, split() function: String Functions. (line 366)
-* dark corner, string continuation: Scalar Constants. (line 53)
-* dark corner, strings, storing: gawk split records. (line 82)
-* dark corner, value of ARGV[0]: Auto-set. (line 39)
-* dark corner, ^, in FS: Regexp Field Splitting.
- (line 59)
+* dark corner <1>: Glossary. (line 266)
* data, fixed-width: Constant Size. (line 6)
* data-driven languages: Basic High Level. (line 74)
-* database, group, reading: Group Functions. (line 6)
* database, users, reading: Passwd Functions. (line 6)
+* database, group, reading: Group Functions. (line 6)
* date utility, GNU: Time Functions. (line 17)
* date utility, POSIX: Time Functions. (line 255)
* dates, converting to timestamps: Time Functions. (line 78)
@@ -34636,141 +34689,141 @@ Index
* dcngettext() function (gawk), portability and: I18N Portability.
(line 33)
* deadlocks: Two-way I/O. (line 53)
-* debugger capabilities: Debugging Concepts. (line 16)
-* debugger commands, b (break): Breakpoint Control. (line 11)
-* debugger commands, backtrace: Execution Stack. (line 13)
-* debugger commands, break: Breakpoint Control. (line 11)
-* debugger commands, bt (backtrace): Execution Stack. (line 13)
-* debugger commands, c (continue): Debugger Execution Control.
- (line 33)
-* debugger commands, clear: Breakpoint Control. (line 36)
-* debugger commands, commands: Debugger Execution Control.
+* debugger, capabilities: Debugging Concepts. (line 16)
+* debugger, concepts: Debugging Terms. (line 6)
+* debugger, how to start: Debugger Invocation. (line 6)
+* debugger, prompt: Debugger Invocation. (line 23)
+* debugger, setting a breakpoint: Finding The Bug. (line 32)
+* debugger, commands, breakpoint: Finding The Bug. (line 32)
+* debugger, commands, break: Finding The Bug. (line 32)
+* debugger, commands, b (break): Finding The Bug. (line 32)
+* debugger, running the program: Finding The Bug. (line 39)
+* debugger, commands, run: Finding The Bug. (line 39)
+* debugger, stack frames, showing: Finding The Bug. (line 52)
+* debugger, commands, bt (backtrace): Finding The Bug. (line 52)
+* debugger, commands, backtrace: Finding The Bug. (line 52)
+* debugger, commands, print: Finding The Bug. (line 68)
+* debugger, commands, p (print): Finding The Bug. (line 68)
+* debugger, commands, n (next): Finding The Bug. (line 105)
+* debugger, commands, next: Finding The Bug. (line 105)
+* debugger, printing single array elements: Finding The Bug. (line 140)
+* debugger, printing all array elements: Finding The Bug. (line 154)
+* debugger, repeating commands: List of Debugger Commands.
+ (line 21)
+* debugger, commands, b (break) <1>: Breakpoint Control. (line 11)
+* debugger, commands, break <1>: Breakpoint Control. (line 11)
+* debugger, commands, clear: Breakpoint Control. (line 36)
+* debugger, commands, condition: Breakpoint Control. (line 54)
+* debugger, commands, d (delete): Breakpoint Control. (line 64)
+* debugger, commands, delete: Breakpoint Control. (line 64)
+* debugger, commands, disable: Breakpoint Control. (line 69)
+* debugger, commands, e (enable): Breakpoint Control. (line 73)
+* debugger, commands, enable: Breakpoint Control. (line 73)
+* debugger, commands, ignore: Breakpoint Control. (line 87)
+* debugger, commands, t (tbreak): Breakpoint Control. (line 90)
+* debugger, commands, tbreak: Breakpoint Control. (line 90)
+* debugger, commands, commands: Debugger Execution Control.
(line 10)
-* debugger commands, condition: Breakpoint Control. (line 54)
-* debugger commands, continue: Debugger Execution Control.
- (line 33)
-* debugger commands, d (delete): Breakpoint Control. (line 64)
-* debugger commands, delete: Breakpoint Control. (line 64)
-* debugger commands, disable: Breakpoint Control. (line 69)
-* debugger commands, display: Viewing And Changing Data.
- (line 8)
-* debugger commands, down: Execution Stack. (line 23)
-* debugger commands, dump: Miscellaneous Debugger Commands.
- (line 9)
-* debugger commands, e (enable): Breakpoint Control. (line 73)
-* debugger commands, enable: Breakpoint Control. (line 73)
-* debugger commands, end: Debugger Execution Control.
+* debugger, commands, silent: Debugger Execution Control.
(line 10)
-* debugger commands, eval: Viewing And Changing Data.
- (line 23)
-* debugger commands, f (frame): Execution Stack. (line 27)
-* debugger commands, finish: Debugger Execution Control.
+* debugger, commands, end: Debugger Execution Control.
+ (line 10)
+* debugger, commands, c (continue): Debugger Execution Control.
+ (line 33)
+* debugger, commands, continue: Debugger Execution Control.
+ (line 33)
+* debugger, commands, finish: Debugger Execution Control.
(line 39)
-* debugger commands, frame: Execution Stack. (line 27)
-* debugger commands, h (help): Miscellaneous Debugger Commands.
- (line 67)
-* debugger commands, help: Miscellaneous Debugger Commands.
- (line 67)
-* debugger commands, i (info): Debugger Info. (line 13)
-* debugger commands, ignore: Breakpoint Control. (line 87)
-* debugger commands, info: Debugger Info. (line 13)
-* debugger commands, l (list): Miscellaneous Debugger Commands.
- (line 73)
-* debugger commands, list: Miscellaneous Debugger Commands.
- (line 73)
-* debugger commands, n (next): Debugger Execution Control.
+* debugger, commands, n (next) <1>: Debugger Execution Control.
(line 43)
-* debugger commands, next: Debugger Execution Control.
+* debugger, commands, next <1>: Debugger Execution Control.
(line 43)
-* debugger commands, nexti: Debugger Execution Control.
+* debugger, commands, ni (nexti): Debugger Execution Control.
(line 49)
-* debugger commands, ni (nexti): Debugger Execution Control.
+* debugger, commands, nexti: Debugger Execution Control.
(line 49)
-* debugger commands, o (option): Debugger Info. (line 57)
-* debugger commands, option: Debugger Info. (line 57)
-* debugger commands, p (print): Viewing And Changing Data.
- (line 39)
-* debugger commands, print: Viewing And Changing Data.
- (line 39)
-* debugger commands, printf: Viewing And Changing Data.
- (line 57)
-* debugger commands, q (quit): Miscellaneous Debugger Commands.
- (line 100)
-* debugger commands, quit: Miscellaneous Debugger Commands.
- (line 100)
-* debugger commands, r (run): Debugger Execution Control.
- (line 62)
-* debugger commands, return: Debugger Execution Control.
+* debugger, commands, return: Debugger Execution Control.
(line 54)
-* debugger commands, run: Debugger Execution Control.
+* debugger, commands, r (run): Debugger Execution Control.
(line 62)
-* debugger commands, s (step): Debugger Execution Control.
- (line 68)
-* debugger commands, set: Viewing And Changing Data.
+* debugger, commands, run <1>: Debugger Execution Control.
(line 62)
-* debugger commands, si (stepi): Debugger Execution Control.
- (line 75)
-* debugger commands, silent: Debugger Execution Control.
- (line 10)
-* debugger commands, step: Debugger Execution Control.
+* debugger, commands, s (step): Debugger Execution Control.
+ (line 68)
+* debugger, commands, step: Debugger Execution Control.
(line 68)
-* debugger commands, stepi: Debugger Execution Control.
+* debugger, commands, si (stepi): Debugger Execution Control.
(line 75)
-* debugger commands, t (tbreak): Breakpoint Control. (line 90)
-* debugger commands, tbreak: Breakpoint Control. (line 90)
-* debugger commands, trace: Miscellaneous Debugger Commands.
- (line 108)
-* debugger commands, u (until): Debugger Execution Control.
+* debugger, commands, stepi: Debugger Execution Control.
+ (line 75)
+* debugger, commands, u (until): Debugger Execution Control.
(line 82)
-* debugger commands, undisplay: Viewing And Changing Data.
- (line 83)
-* debugger commands, until: Debugger Execution Control.
+* debugger, commands, until: Debugger Execution Control.
(line 82)
-* debugger commands, unwatch: Viewing And Changing Data.
- (line 87)
-* debugger commands, up: Execution Stack. (line 36)
-* debugger commands, w (watch): Viewing And Changing Data.
+* debugger, commands, display: Viewing And Changing Data.
+ (line 8)
+* debugger, commands, eval: Viewing And Changing Data.
+ (line 23)
+* debugger, commands, p (print) <1>: Viewing And Changing Data.
+ (line 39)
+* debugger, commands, print <1>: Viewing And Changing Data.
+ (line 39)
+* debugger, commands, printf: Viewing And Changing Data.
+ (line 57)
+* debugger, commands, set: Viewing And Changing Data.
+ (line 62)
+* debugger, commands, w (watch): Viewing And Changing Data.
(line 70)
-* debugger commands, watch: Viewing And Changing Data.
+* debugger, commands, watch: Viewing And Changing Data.
(line 70)
-* debugger commands, where (backtrace): Execution Stack. (line 13)
-* debugger, b command: Finding The Bug. (line 32)
-* debugger, backtrace command: Finding The Bug. (line 52)
-* debugger, break command: Finding The Bug. (line 32)
-* debugger, breakpoint command: Finding The Bug. (line 32)
-* debugger, bt command: Finding The Bug. (line 52)
-* debugger, command completion: Readline Support. (line 6)
-* debugger, concepts: Debugging Terms. (line 6)
+* debugger, commands, undisplay: Viewing And Changing Data.
+ (line 83)
+* debugger, commands, unwatch: Viewing And Changing Data.
+ (line 87)
+* debugger, commands, bt (backtrace) <1>: Execution Stack. (line 13)
+* debugger, commands, backtrace <1>: Execution Stack. (line 13)
+* debugger, commands, where (backtrace): Execution Stack. (line 13)
+* debugger, commands, down: Execution Stack. (line 23)
+* debugger, commands, f (frame): Execution Stack. (line 27)
+* debugger, commands, frame: Execution Stack. (line 27)
+* debugger, commands, up: Execution Stack. (line 36)
+* debugger, commands, i (info): Debugger Info. (line 13)
+* debugger, commands, info: Debugger Info. (line 13)
+* debugger, commands, o (option): Debugger Info. (line 57)
+* debugger, commands, option: Debugger Info. (line 57)
+* debugger, options: Debugger Info. (line 57)
+* debugger, history size: Debugger Info. (line 65)
* debugger, default list amount: Debugger Info. (line 69)
-* debugger, history expansion: Readline Support. (line 6)
+* debugger, prompt <1>: Debugger Info. (line 78)
* debugger, history file: Debugger Info. (line 81)
-* debugger, history size: Debugger Info. (line 65)
-* debugger, how to start: Debugger Invocation. (line 6)
* debugger, instruction tracing: Debugger Info. (line 90)
+* debugger, save commands to a file: Debugger Info. (line 92)
+* debugger, read commands from a file: Debugger Info. (line 97)
+* debugger, commands, dump: Miscellaneous Debugger Commands.
+ (line 9)
+* debugger, commands, h (help): Miscellaneous Debugger Commands.
+ (line 67)
+* debugger, commands, help: Miscellaneous Debugger Commands.
+ (line 67)
+* debugger, commands, l (list): Miscellaneous Debugger Commands.
+ (line 73)
+* debugger, commands, list: Miscellaneous Debugger Commands.
+ (line 73)
+* debugger, commands, q (quit): Miscellaneous Debugger Commands.
+ (line 100)
+* debugger, commands, quit: Miscellaneous Debugger Commands.
+ (line 100)
+* debugger, commands, trace: Miscellaneous Debugger Commands.
+ (line 108)
+* debugger, command completion: Readline Support. (line 6)
+* debugger, history expansion: Readline Support. (line 6)
+* debugger, limitations: Limitations. (line 6)
* debugger, interaction with namespaces: Namespace And Features.
(line 17)
-* debugger, limitations: Limitations. (line 6)
-* debugger, n command: Finding The Bug. (line 105)
-* debugger, next command: Finding The Bug. (line 105)
-* debugger, options: Debugger Info. (line 57)
-* debugger, p command: Finding The Bug. (line 68)
-* debugger, print command: Finding The Bug. (line 68)
-* debugger, printing all array elements: Finding The Bug. (line 154)
-* debugger, printing single array elements: Finding The Bug. (line 140)
-* debugger, prompt: Debugger Invocation. (line 23)
-* debugger, prompt <1>: Debugger Info. (line 78)
-* debugger, read commands from a file: Debugger Info. (line 97)
-* debugger, repeating commands: List of Debugger Commands.
- (line 21)
-* debugger, run command: Finding The Bug. (line 39)
-* debugger, running the program: Finding The Bug. (line 39)
-* debugger, save commands to a file: Debugger Info. (line 92)
-* debugger, setting a breakpoint: Finding The Bug. (line 32)
-* debugger, stack frames, showing: Finding The Bug. (line 52)
-* debugging awk programs: Debugger. (line 6)
-* debugging gawk, bug reports: Bugs. (line 9)
+* debugging, awk programs: Debugger. (line 6)
* debugging, example session: Sample Debugging Session.
(line 6)
+* debugging gawk, bug reports: Bugs. (line 9)
* decimal point character, locale specific: Options. (line 295)
* decrement operators: Increment Ops. (line 35)
* default keyword: Switch Statement. (line 6)
@@ -34783,118 +34836,119 @@ Index
* delete statement: Delete. (line 6)
* delete watchpoint: Viewing And Changing Data.
(line 87)
-* deleting elements in arrays: Delete. (line 6)
-* deleting entire arrays: Delete. (line 39)
+* deleting, elements in arrays: Delete. (line 6)
+* deleting, entire arrays: Delete. (line 39)
* Demaille, Akim: Acknowledgments. (line 60)
* describe call stack frame, in debugger: Debugger Info. (line 27)
-* differences in awk and gawk, ARGC/ARGV variables: ARGC and ARGV.
- (line 89)
-* differences in awk and gawk, ARGIND variable: Auto-set. (line 44)
-* differences in awk and gawk, array elements, deleting: Delete.
- (line 39)
+* differences in awk and gawk, AWKPATH environment variable: AWKPATH Variable.
+ (line 6)
* differences in awk and gawk, AWKLIBPATH environment variable: AWKLIBPATH
Variable.
(line 6)
-* differences in awk and gawk, AWKPATH environment variable: AWKPATH Variable.
+* differences in awk and gawk, regular expressions: Case-sensitivity.
+ (line 26)
+* differences in awk and gawk, record separators: awk split records.
+ (line 131)
+* differences in awk and gawk, RS/RT variables: awk split records.
+ (line 131)
+* differences in awk and gawk, RS/RT variables <1>: gawk split records.
+ (line 58)
+* differences in awk and gawk, strings, storing: gawk split records.
+ (line 76)
+* differences in awk and gawk, single-character fields: Single Character
Fields.
(line 6)
-* differences in awk and gawk, BEGIN/END patterns: I/O And BEGIN/END.
- (line 15)
-* differences in awk and gawk, BEGINFILE/ENDFILE patterns: BEGINFILE/ENDFILE.
+* differences in awk and gawk, RS/RT variables <2>: Multiple Line.
+ (line 139)
+* differences in awk and gawk, getline command: Getline. (line 19)
+* differences in awk and gawk, input/output operators: Getline/Coprocess.
(line 6)
-* differences in awk and gawk, BINMODE variable: User-modified.
- (line 15)
-* differences in awk and gawk, BINMODE variable <1>: PC Using.
- (line 20)
+* differences in awk and gawk, implementation limitations: Getline Notes.
+ (line 14)
+* differences in awk and gawk, read timeouts: Read Timeout. (line 6)
+* differences in awk and gawk, retrying input: Retrying Input.
+ (line 6)
+* differences in awk and gawk, command-line directories: Command-line
directories.
+ (line 6)
+* differences in awk and gawk, print/printf statements: Format Modifiers.
+ (line 13)
+* differences in awk and gawk, input/output operators <1>: Redirection.
+ (line 96)
+* differences in awk and gawk, implementation limitations <1>: Redirection.
+ (line 129)
+* differences in awk and gawk, error messages: Special FD. (line 19)
* differences in awk and gawk, close() function: Close Files And Pipes.
(line 81)
* differences in awk and gawk, close() function <1>: Close Files And Pipes.
(line 132)
-* differences in awk and gawk, command-line directories: Command-line
directories.
+* differences in awk and gawk, strings: Scalar Constants. (line 20)
+* differences in awk and gawk, strings <1>: Scalar Constants. (line 53)
+* differences in awk and gawk, regexp constants: Standard Regexp Constants.
+ (line 43)
+* differences in awk and gawk, trunc-mod operation: Arithmetic Ops.
+ (line 66)
+* differences in awk and gawk, line continuations: Conditional Exp.
+ (line 34)
+* differences in awk and gawk, BEGIN/END patterns: I/O And BEGIN/END.
+ (line 15)
+* differences in awk and gawk, BEGINFILE/ENDFILE patterns: BEGINFILE/ENDFILE.
(line 6)
-* differences in awk and gawk, ERRNO variable: Auto-set. (line 87)
-* differences in awk and gawk, error messages: Special FD. (line 19)
+* differences in awk and gawk, BINMODE variable: User-modified.
+ (line 15)
* differences in awk and gawk, FIELDWIDTHS variable: User-modified.
(line 37)
* differences in awk and gawk, FPAT variable: User-modified. (line 46)
-* differences in awk and gawk, FUNCTAB variable: Auto-set. (line 134)
-* differences in awk and gawk, function arguments (gawk): Calling Built-in.
- (line 16)
-* differences in awk and gawk, getline command: Getline. (line 19)
* differences in awk and gawk, IGNORECASE variable: User-modified.
(line 79)
-* differences in awk and gawk, implementation limitations: Getline Notes.
- (line 14)
-* differences in awk and gawk, implementation limitations <1>: Redirection.
- (line 129)
-* differences in awk and gawk, indirect function calls: Indirect Calls.
- (line 6)
-* differences in awk and gawk, input/output operators: Getline/Coprocess.
- (line 6)
-* differences in awk and gawk, input/output operators <1>: Redirection.
- (line 96)
+* differences in awk and gawk, LINT variable: User-modified. (line 90)
+* differences in awk and gawk, TEXTDOMAIN variable: User-modified.
+ (line 155)
+* differences in awk and gawk, ARGIND variable: Auto-set. (line 44)
+* differences in awk and gawk, ERRNO variable: Auto-set. (line 87)
+* differences in awk and gawk, FUNCTAB variable: Auto-set. (line 134)
+* differences in awk and gawk, PROCINFO array: Auto-set. (line 148)
+* differences in awk and gawk, RS/RT variables <3>: Auto-set. (line 348)
+* differences in awk and gawk, SYMTAB variable: Auto-set. (line 352)
+* differences in awk and gawk, ARGC/ARGV variables: ARGC and ARGV.
+ (line 89)
+* differences in awk and gawk, array elements, deleting: Delete.
+ (line 39)
+* differences in awk and gawk, function arguments: Calling Built-in.
+ (line 16)
* differences in awk and gawk, length() function: String Functions.
(line 201)
-* differences in awk and gawk, line continuations: Conditional Exp.
- (line 34)
-* differences in awk and gawk, LINT variable: User-modified. (line 90)
* differences in awk and gawk, match() function: String Functions.
(line 263)
-* differences in awk and gawk, print/printf statements: Format Modifiers.
- (line 13)
-* differences in awk and gawk, PROCINFO array: Auto-set. (line 148)
-* differences in awk and gawk, read timeouts: Read Timeout. (line 6)
-* differences in awk and gawk, record separators: awk split records.
- (line 131)
-* differences in awk and gawk, regexp constants: Standard Regexp Constants.
- (line 43)
-* differences in awk and gawk, regular expressions: Case-sensitivity.
- (line 26)
-* differences in awk and gawk, retrying input: Retrying Input.
- (line 6)
-* differences in awk and gawk, RS/RT variables: awk split records.
- (line 131)
-* differences in awk and gawk, RS/RT variables <1>: gawk split records.
- (line 58)
-* differences in awk and gawk, RS/RT variables <2>: Multiple Line.
- (line 139)
-* differences in awk and gawk, RS/RT variables <3>: Auto-set. (line 348)
-* differences in awk and gawk, single-character fields: Single Character
Fields.
- (line 6)
* differences in awk and gawk, split() function: String Functions.
(line 351)
-* differences in awk and gawk, strings: Scalar Constants. (line 20)
-* differences in awk and gawk, strings <1>: Scalar Constants. (line 53)
-* differences in awk and gawk, strings, storing: gawk split records.
- (line 76)
-* differences in awk and gawk, SYMTAB variable: Auto-set. (line 352)
-* differences in awk and gawk, TEXTDOMAIN variable: User-modified.
- (line 155)
-* differences in awk and gawk, trunc-mod operation: Arithmetic Ops.
- (line 66)
-* directories, command-line: Command-line directories.
+* differences in awk and gawk, indirect function calls: Indirect Calls.
+ (line 6)
+* differences in awk and gawk, BINMODE variable <1>: PC Using.
+ (line 20)
+* directories, searching, for source files: AWKPATH Variable. (line 6)
+* directories, searching, for loadable extensions: AWKLIBPATH Variable.
(line 6)
-* directories, searching: Programs Exercises. (line 70)
-* directories, searching for loadable extensions: AWKLIBPATH Variable.
+* directories, command-line: Command-line directories.
(line 6)
-* directories, searching for source files: AWKPATH Variable. (line 6)
+* directories, searching, for source files <1>: Programs Exercises.
+ (line 70)
* disable breakpoint: Breakpoint Control. (line 69)
* disable debugger command: Breakpoint Control. (line 69)
* display debugger command: Viewing And Changing Data.
(line 8)
* display debugger options: Debugger Info. (line 57)
* division: Arithmetic Ops. (line 44)
-* do-while statement: Do Statement. (line 6)
* do-while statement, use of regexps in: Regexp Usage. (line 19)
-* documentation, of awk programs: Library Names. (line 6)
+* do-while statement: Do Statement. (line 6)
* documentation, online: Manual History. (line 11)
+* documentation, of awk programs: Library Names. (line 6)
* documents, searching: Dupword Program. (line 6)
+* dollar sign ($), regexp operator: Regexp Operator Details.
+ (line 31)
* dollar sign ($), $ field operator: Fields. (line 19)
-* dollar sign ($), $ field operator <1>: Precedence. (line 42)
* dollar sign ($), incrementing fields and arrays: Increment Ops.
(line 30)
-* dollar sign ($), regexp operator: Regexp Operator Details.
- (line 31)
-* double quote ("), in regexp constants: Computed Regexps. (line 30)
+* dollar sign ($), $ field operator <1>: Precedence. (line 42)
* double quote ("), in shell commands: Quoting. (line 54)
+* double quote ("), in regexp constants: Computed Regexps. (line 30)
* double-precision: Computer Arithmetic. (line 61)
* down debugger command: Execution Stack. (line 23)
* Drepper, Ulrich: Acknowledgments. (line 52)
@@ -34907,49 +34961,48 @@ Index
* dynamically loaded extensions: Dynamic Extensions. (line 6)
* e debugger command (alias for enable): Breakpoint Control. (line 73)
* EBCDIC: Ordinal Functions. (line 45)
+* EBCDIC <1>: Ranges and Locales. (line 10)
+* EBCDIC <2>: History summary. (line 20)
* effective group ID of gawk user: Auto-set. (line 172)
* effective user ID of gawk user: Auto-set. (line 180)
* egrep utility: Bracket Expressions. (line 34)
* egrep utility <1>: Egrep Program. (line 6)
* egrep.awk program: Egrep Program. (line 53)
+* elements in arrays: Reference to Elements.
+ (line 6)
* elements in arrays, assigning values: Assigning Elements. (line 6)
-* elements in arrays, deleting: Delete. (line 6)
+* elements in arrays, scanning: Scanning an Array. (line 6)
* elements in arrays, order of access by in operator: Scanning an Array.
(line 48)
-* elements in arrays, scanning: Scanning an Array. (line 6)
-* elements of arrays: Reference to Elements.
- (line 6)
+* elements in arrays, deleting: Delete. (line 6)
* email address for bug reports, address@hidden: Bug address.
(line 31)
* empty array elements: Reference to Elements.
(line 18)
* empty pattern: Empty. (line 6)
-* empty strings: awk split records. (line 121)
-* empty strings, See null strings: Regexp Field Splitting.
- (line 43)
* EMRED: TCP/IP Networking. (line 6)
* enable breakpoint: Breakpoint Control. (line 73)
* enable debugger command: Breakpoint Control. (line 73)
* end debugger command: Debugger Execution Control.
(line 10)
+* END pattern, Boolean patterns and: Expression Patterns. (line 70)
* END pattern: BEGIN/END. (line 6)
* END pattern <1>: Using BEGIN/END. (line 6)
-* END pattern, assert() user-defined function and: Assert Function.
- (line 75)
-* END pattern, Boolean patterns and: Expression Patterns. (line 70)
-* END pattern, execution order not affected by @namespace: Changing The
Namespace.
- (line 37)
-* END pattern, exit statement and: Exit Statement. (line 12)
+* END pattern, operators and: Using BEGIN/END. (line 17)
+* END pattern, print statement and: I/O And BEGIN/END. (line 15)
* END pattern, next/nextfile statements and: I/O And BEGIN/END.
(line 36)
* END pattern, next/nextfile statements and <1>: Next Statement.
(line 44)
-* END pattern, operators and: Using BEGIN/END. (line 17)
-* END pattern, print statement and: I/O And BEGIN/END. (line 15)
+* END pattern, exit statement and: Exit Statement. (line 12)
+* END pattern, assert() user-defined function and: Assert Function.
+ (line 75)
* END pattern, profiling and: Profiling. (line 62)
-* ENDFILE pattern: BEGINFILE/ENDFILE. (line 6)
+* END pattern, @namespace directive and: Changing The Namespace.
+ (line 37)
* ENDFILE pattern, Boolean patterns and: Expression Patterns. (line 70)
-* ENDFILE pattern, execution order not affected by @namespace: Changing The
Namespace.
+* ENDFILE pattern: BEGINFILE/ENDFILE. (line 6)
+* ENDFILE pattern, @namespace directive and: Changing The Namespace.
(line 37)
* endfile() user-defined function: Filetrans Function. (line 62)
* endgrent() function (C library): Group Functions. (line 213)
@@ -34958,54 +35011,66 @@ Index
* endpwent() user-defined function: Passwd Functions. (line 211)
* English, Steve: Advanced Features. (line 6)
* ENVIRON array: Auto-set. (line 59)
-* environment variables used by gawk: Environment Variables.
+* environment variables, POSIXLY_CORRECT: Options. (line 377)
+* environment variables, used by gawk: Environment Variables.
(line 6)
+* environment variables, AWKPATH: AWKPATH Variable. (line 6)
+* environment variables, AWKLIBPATH: AWKLIBPATH Variable. (line 6)
+* environment variables, GAWK_READ_TIMEOUT: Read Timeout. (line 71)
+* environment variables, GAWK_SOCK_RETRIES: Nonfatal. (line 53)
* environment variables, in ENVIRON array: Auto-set. (line 59)
+* environment variables, LANGUAGE: Explaining gettext. (line 120)
+* environment variables, GAWK_LOCALE_DIR: Explaining gettext. (line 132)
+* environment variables, LANGUAGE <1>: I18N Example. (line 68)
+* environment variables, LC_ALL: I18N Example. (line 68)
+* environment variables, LANG: I18N Example. (line 68)
+* environment variables, LC_MESSAGES: I18N Example. (line 68)
+* environment variables, AWKPATH <1>: PC Using. (line 13)
* epoch, definition of: Glossary. (line 310)
* equals sign (=), = operator: Assignment Ops. (line 6)
* equals sign (=), == operator: Comparison Operators.
(line 11)
* equals sign (=), == operator <1>: Precedence. (line 64)
* EREs (Extended Regular Expressions): Bracket Expressions. (line 34)
-* ERRNO variable: Auto-set. (line 87)
-* ERRNO variable <1>: TCP/IP Networking. (line 54)
-* ERRNO variable, with BEGINFILE pattern: BEGINFILE/ENDFILE. (line 26)
+* ERRNO variable, with getline command: Getline. (line 19)
* ERRNO variable, with close() function: Close Files And Pipes.
(line 140)
-* ERRNO variable, with getline command: Getline. (line 19)
+* ERRNO variable, with BEGINFILE pattern: BEGINFILE/ENDFILE. (line 26)
+* ERRNO variable: Auto-set. (line 87)
+* ERRNO variable <1>: TCP/IP Networking. (line 54)
* error handling: Special FD. (line 19)
* error handling, ERRNO variable and: Auto-set. (line 87)
* error output: Special FD. (line 6)
* escape processing, gsub()/gensub()/sub() functions: Gory Details.
(line 6)
-* escape sequences, in strings: Escape Sequences. (line 6)
+* escape sequences: Escape Sequences. (line 6)
* eval debugger command: Viewing And Changing Data.
(line 23)
* evaluate expressions, in debugger: Viewing And Changing Data.
(line 23)
-* evaluation order: Increment Ops. (line 60)
* evaluation order, concatenation: Concatenation. (line 41)
+* evaluation order: Increment Ops. (line 60)
* evaluation order, functions: Calling Built-in. (line 30)
* examining fields: Fields. (line 6)
* example debugging session: Sample Debugging Session.
(line 6)
-* exclamation point (!), ! operator: Boolean Ops. (line 69)
-* exclamation point (!), ! operator <1>: Precedence. (line 51)
-* exclamation point (!), ! operator <2>: Egrep Program. (line 174)
-* exclamation point (!), != operator: Comparison Operators.
- (line 11)
-* exclamation point (!), != operator <1>: Precedence. (line 64)
* exclamation point (!), !~ operator: Regexp Usage. (line 19)
* exclamation point (!), !~ operator <1>: Computed Regexps. (line 6)
* exclamation point (!), !~ operator <2>: Case-sensitivity. (line 26)
* exclamation point (!), !~ operator <3>: Regexp Constants. (line 6)
+* exclamation point (!), != operator: Comparison Operators.
+ (line 11)
* exclamation point (!), !~ operator <4>: Comparison Operators.
(line 11)
* exclamation point (!), !~ operator <5>: Comparison Operators.
(line 98)
+* exclamation point (!), ! operator: Boolean Ops. (line 69)
+* exclamation point (!), ! operator <1>: Precedence. (line 51)
+* exclamation point (!), != operator <1>: Precedence. (line 64)
* exclamation point (!), !~ operator <6>: Precedence. (line 79)
* exclamation point (!), !~ operator <7>: Expression Patterns.
(line 24)
+* exclamation point (!), ! operator <2>: Egrep Program. (line 174)
* exit debugger command: Miscellaneous Debugger Commands.
(line 64)
* exit statement: Exit Statement. (line 6)
@@ -35020,55 +35085,55 @@ Index
* Expat XML parser library: gawkextlib. (line 40)
* exponent: Numeric Functions. (line 19)
* expressions: Expressions. (line 6)
-* expressions, as patterns: Expression Patterns. (line 6)
* expressions, assignment: Assignment Ops. (line 6)
-* expressions, Boolean: Boolean Ops. (line 6)
* expressions, comparison: Typing and Comparison.
(line 9)
+* expressions, Boolean: Boolean Ops. (line 6)
* expressions, conditional: Conditional Exp. (line 6)
-* expressions, matching, See comparison expressions: Typing and Comparison.
- (line 9)
* expressions, selecting: Conditional Exp. (line 6)
+* expressions, as patterns: Expression Patterns. (line 6)
* Extended Regular Expressions (EREs): Bracket Expressions. (line 34)
+* extension API, version number: Auto-set. (line 287)
+* extension API, interaction with namespaces: Namespace And Features.
+ (line 22)
* extension API: Extension API Description.
(line 6)
-* extension API informational variables: Extension API Informational Variables.
+* extension API, version number <1>: Extension Versioning.
(line 6)
-* extension API interaction with namespaces: Namespace And Features.
- (line 22)
-* extension API version: Extension Versioning.
- (line 6)
-* extension API, version number: Auto-set. (line 287)
-* extension example: Extension Example. (line 6)
-* extension registration: Registration Functions.
+* extension API, informational variables: Extension API Informational
Variables.
(line 6)
-* extension search path: Finding Extensions. (line 6)
-* extensions distributed with gawk: Extension Samples. (line 6)
-* extensions, allocating memory: Memory Allocation Functions.
+* extensions, loadable, loading, @load directive: Loading Shared Libraries.
+ (line 8)
+* extensions, common, \x escape sequence: Escape Sequences. (line 61)
+* extensions, common, RS as a regexp: gawk split records. (line 6)
+* extensions, common, single character fields: Single Character Fields.
(line 6)
-* extensions, array manipulation in: Array Manipulation. (line 6)
-* extensions, Brian Kernighan's awk: BTL. (line 6)
-* extensions, Brian Kernighan's awk <1>: Common Extensions. (line 6)
-* extensions, common, ** operator: Arithmetic Ops. (line 30)
-* extensions, common, **= operator: Assignment Ops. (line 138)
-* extensions, common, /dev/stderr special file: Special FD. (line 48)
* extensions, common, /dev/stdin special file: Special FD. (line 48)
* extensions, common, /dev/stdout special file: Special FD. (line 48)
-* extensions, common, BINMODE variable: PC Using. (line 20)
+* extensions, common, /dev/stderr special file: Special FD. (line 48)
+* extensions, common, ** operator: Arithmetic Ops. (line 30)
+* extensions, common, **= operator: Assignment Ops. (line 138)
* extensions, common, delete to delete entire arrays: Delete. (line 39)
-* extensions, common, fflush() function: I/O Functions. (line 43)
-* extensions, common, func keyword: Definition Syntax. (line 99)
* extensions, common, length() applied to an array: String Functions.
(line 201)
-* extensions, common, RS as a regexp: gawk split records. (line 6)
-* extensions, common, single character fields: Single Character Fields.
+* extensions, common, fflush() function: I/O Functions. (line 43)
+* extensions, common, func keyword: Definition Syntax. (line 99)
+* extensions, loadable, allocating memory: Memory Allocation Functions.
(line 6)
-* extensions, common, \x escape sequence: Escape Sequences. (line 61)
+* extensions, loadable, registration: Registration Functions.
+ (line 6)
+* extensions, loadable, array manipulation in: Array Manipulation.
+ (line 6)
+* extensions, loadable, search path: Finding Extensions. (line 6)
+* extensions, loadable, example: Extension Example. (line 6)
+* extensions, loadable, distributed with gawk: Extension Samples.
+ (line 6)
+* extensions, loadable, gawkextlib project: gawkextlib. (line 6)
+* extensions, Brian Kernighan's awk: BTL. (line 6)
* extensions, in gawk, not in POSIX awk: POSIX/GNU. (line 6)
-* extensions, loading, @load directive: Loading Shared Libraries.
- (line 8)
+* extensions, Brian Kernighan's awk <1>: Common Extensions. (line 6)
* extensions, mawk: Common Extensions. (line 6)
-* extensions, where to find: gawkextlib. (line 6)
+* extensions, common, BINMODE variable: PC Using. (line 20)
* extract.awk program: Extract Program. (line 79)
* extraction, of marked strings (internationalization): String Extraction.
(line 6)
@@ -35076,109 +35141,112 @@ Index
* false, logical: Truth Values. (line 6)
* FDL (Free Documentation License): GNU Free Documentation License.
(line 8)
-* features, adding to gawk: Adding Code. (line 6)
* features, deprecated: Obsolete. (line 6)
* features, undocumented: Undocumented. (line 6)
+* features, adding to gawk: Adding Code. (line 6)
* Fenlason, Jay: History. (line 30)
* Fenlason, Jay <1>: Contributors. (line 19)
* fflush: I/O Functions. (line 28)
* field numbers: Nonconstant Fields. (line 6)
* field operator $: Fields. (line 19)
* field operators, dollar sign as: Fields. (line 19)
-* field separator, backslash (\) as: Command Line Field Separator.
- (line 24)
-* field separator, in multiline records: Multiple Line. (line 41)
-* field separator, on command line: Command Line Field Separator.
+* 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, whitespace as: Default Field Splitting.
(line 6)
-* field separator, POSIX and: Full Line Fields. (line 16)
-* field separators: Field Separators. (line 15)
-* field separators <1>: User-modified. (line 53)
-* field separators <2>: User-modified. (line 116)
-* field separators, choice of: Field Separators. (line 50)
-* field separators, FIELDWIDTHS variable and: User-modified. (line 37)
-* field separators, FPAT variable and: User-modified. (line 46)
-* field separators, regular expressions as: Field Separators. (line 50)
-* field separators, regular expressions as <1>: Regexp Field Splitting.
+* field separator, FS variable and: Default Field Splitting.
+ (line 6)
+* field separator, regular expression as <1>: Regexp Field Splitting.
(line 6)
-* field separators, See Also OFS: Changing Fields. (line 64)
-* field separators, spaces as: Cut Program. (line 103)
-* field separators, whitespace as: Default Field Splitting.
+* field separator, on command line: Command Line Field Separator.
(line 6)
+* field separator, backslash (\) as: Command Line Field Separator.
+ (line 24)
+* field separator, POSIX and: Full Line Fields. (line 16)
+* field separator, in multiline records: Multiple Line. (line 41)
+* field separator, FIELDWIDTHS variable and: User-modified. (line 37)
+* 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 <3>: Changing Fields. (line 64)
* fields: Reading Files. (line 14)
* fields <1>: Fields. (line 6)
-* fields <2>: Basic High Level. (line 62)
-* fields, adding: Changing Fields. (line 53)
-* fields, changing contents of: Changing Fields. (line 6)
-* fields, cutting: Cut Program. (line 6)
* fields, examining: Fields. (line 6)
* fields, number of: Fields. (line 33)
* fields, numbers: Nonconstant Fields. (line 6)
-* fields, printing: Print Examples. (line 20)
+* 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, single-character: Single Character Fields.
(line 6)
+* fields, printing: Print Examples. (line 20)
+* fields, cutting: Cut Program. (line 6)
+* fields <2>: Basic High Level. (line 62)
* FIELDWIDTHS variable: Fixed width data. (line 17)
* FIELDWIDTHS variable <1>: User-modified. (line 37)
* file descriptors: Special FD. (line 6)
* file inclusion, @include directive: Include Files. (line 8)
-* file names, assignments as: Ignoring Assigns. (line 6)
-* file names, distinguishing: Auto-set. (line 55)
-* file names, in compatibility mode: Special Caveats. (line 9)
* file names, standard streams in gawk: Special FD. (line 48)
+* file names, in compatibility mode: Special Caveats. (line 9)
+* file names, distinguishing: Auto-set. (line 55)
+* file names, assignments as: Ignoring Assigns. (line 6)
* FILENAME variable: Reading Files. (line 6)
-* FILENAME variable <1>: Auto-set. (line 108)
* FILENAME variable, getline, setting with: Getline Notes. (line 19)
-* files, .gmo: Explaining gettext. (line 42)
-* files, .gmo, specifying directory of: Explaining gettext. (line 54)
-* files, .gmo, specifying directory of <1>: Programmer i18n. (line 48)
-* files, .mo, converting from .po: I18N Example. (line 80)
-* files, .po: Explaining gettext. (line 37)
-* files, .po <1>: Translator i18n. (line 6)
-* files, .po, converting to .mo: I18N Example. (line 80)
-* files, .pot: Explaining gettext. (line 31)
-* files, /dev/... special files: Special FD. (line 48)
-* files, /inet/... (gawk): TCP/IP Networking. (line 6)
-* files, /inet4/... (gawk): TCP/IP Networking. (line 6)
-* files, /inet6/... (gawk): TCP/IP Networking. (line 6)
+* FILENAME variable <1>: Auto-set. (line 108)
+* files, input: Read Terminal. (line 16)
* files, awk programs in: Long. (line 6)
-* files, awkprof.out: Profiling. (line 6)
* files, awkvars.out: Options. (line 98)
+* files, portable object, generating: Options. (line 169)
+* files, multiple passes over: Other Arguments. (line 62)
+* files, reading, multiline records: Multiple Line. (line 6)
+* files, descriptors: Special FD. (line 6)
+* files, /dev/... special files: Special FD. (line 48)
+* files, output: Close Files And Pipes.
+ (line 6)
+* files, processing, ARGIND variable and: Auto-set. (line 50)
* files, closing: I/O Functions. (line 10)
-* files, descriptors, See file descriptors: Special FD. (line 6)
-* files, group: Group Functions. (line 6)
-* files, initialization and cleanup: Filetrans Function. (line 6)
-* files, input, See input files: Read Terminal. (line 16)
* files, log, timestamps in: Time Functions. (line 6)
* files, managing: Data File Management.
(line 6)
* files, managing, data file boundaries: Filetrans Function. (line 6)
+* files, initialization and cleanup: Filetrans Function. (line 6)
+* files, reading: Rewind Function. (line 6)
+* files, skipping: File Checking. (line 6)
+* files, password: Passwd Functions. (line 16)
+* files, group: Group Functions. (line 6)
+* files, searching for regular expressions: Egrep Program. (line 6)
+* files, splitting: Split Program. (line 6)
+* files, multiple, duplicating output into: Tee Program. (line 6)
+* files, Texinfo, extracting programs from: Extract Program. (line 6)
+* files, source, search path for: Programs Exercises. (line 70)
+* files, /inet/... (gawk): TCP/IP Networking. (line 6)
+* files, /inet4/... (gawk): TCP/IP Networking. (line 6)
+* files, /inet6/... (gawk): TCP/IP Networking. (line 6)
+* files, awkprof.out: Profiling. (line 6)
+* files, .pot: Explaining gettext. (line 31)
+* files, portable object, template file (.pot): Explaining gettext.
+ (line 31)
+* files, .po: Explaining gettext. (line 37)
+* files, portable object: Explaining gettext. (line 37)
+* files, .gmo: Explaining gettext. (line 42)
* files, message object: Explaining gettext. (line 42)
-* files, message object, converting from portable object files: I18N Example.
- (line 80)
+* files, .gmo, specifying directory of: Explaining gettext. (line 54)
* files, message object, specifying directory of: Explaining gettext.
(line 54)
+* files, .gmo, specifying directory of <1>: Programmer i18n. (line 48)
* files, message object, specifying directory of <1>: Programmer i18n.
(line 48)
-* files, multiple passes over: Other Arguments. (line 62)
-* files, multiple, duplicating output into: Tee Program. (line 6)
-* files, output, See output files: Close Files And Pipes.
- (line 6)
-* files, password: Passwd Functions. (line 16)
-* files, portable object: Explaining gettext. (line 37)
+* files, .po <1>: Translator i18n. (line 6)
* files, portable object <1>: Translator i18n. (line 6)
-* files, portable object template: Explaining gettext. (line 31)
+* files, .po, converting to .mo: I18N Example. (line 80)
+* files, .mo, converting from .po: I18N Example. (line 80)
* files, portable object, converting to message object files: I18N Example.
(line 80)
-* files, portable object, generating: Options. (line 169)
-* files, processing, ARGIND variable and: Auto-set. (line 50)
-* files, reading: Rewind Function. (line 6)
-* files, reading, multiline records: Multiple Line. (line 6)
-* files, searching for regular expressions: Egrep Program. (line 6)
-* files, skipping: File Checking. (line 6)
-* files, source, search path for: Programs Exercises. (line 70)
-* files, splitting: Split Program. (line 6)
-* files, Texinfo, extracting programs from: Extract Program. (line 6)
+* files, message object, converting from portable object files: I18N Example.
+ (line 80)
* find substring in string: String Functions. (line 156)
* finding extensions: Finding Extensions. (line 6)
* finish debugger command: Debugger Execution Control.
@@ -35187,16 +35255,16 @@ Index
* fixed-width data: Constant Size. (line 6)
* flag variables: Boolean Ops. (line 69)
* flag variables <1>: Tee Program. (line 20)
-* floating-point, numbers: Computer Arithmetic. (line 49)
* floating-point, numbers, arbitrary-precision: Arbitrary Precision Arithmetic.
(line 6)
-* floating-point, numbers, arbitrary-precision <1>: Computer Arithmetic.
+* floating-point, numbers: Computer Arithmetic. (line 49)
+* floating-point, numbers, single-precision: Computer Arithmetic.
(line 61)
* floating-point, numbers, double-precision: Computer Arithmetic.
(line 61)
-* floating-point, numbers, single-precision: Computer Arithmetic.
+* floating-point, numbers, arbitrary-precision <1>: Computer Arithmetic.
(line 61)
-* floating-point, VAX/VMS: VMS Running. (line 50)
+* floating-point, numbers, VAX/VMS: VMS Running. (line 50)
* flush buffered output: I/O Functions. (line 28)
* fnmatch() extension function: Extension Sample Fnmatch.
(line 12)
@@ -35208,21 +35276,21 @@ Index
* fork() extension function: Extension Sample Fork.
(line 11)
* format specifiers: Basic Printf. (line 15)
-* format specifiers, mixing regular with positional specifiers: Printf
Ordering.
- (line 57)
* format specifiers, printf statement: Control Letters. (line 6)
* format specifiers, strftime() function (gawk): Time Functions.
(line 91)
+* format specifiers, mixing regular with positional specifiers: Printf
Ordering.
+ (line 57)
* format time string: Time Functions. (line 50)
* formats, numeric output: OFMT. (line 6)
-* formatting output: Printf. (line 6)
-* formatting strings: String Functions. (line 389)
-* forward slash (/) to enclose regular expressions: Regexp. (line 10)
-* forward slash (/), / operator: Precedence. (line 54)
+* formatting, output: Printf. (line 6)
+* formatting, strings: String Functions. (line 389)
+* forward slash (/), to enclose regular expressions: Regexp. (line 10)
* forward slash (/), /= operator: Assignment Ops. (line 129)
-* forward slash (/), /= operator <1>: Precedence. (line 94)
-* forward slash (/), /= operator, vs. /=.../ regexp constant: Assignment Ops.
+* forward slash (/), /= operator, vs. /=.../ regexp constant: Assignment Ops.
(line 149)
+* forward slash (/), / operator: Precedence. (line 54)
+* forward slash (/), /= operator <1>: Precedence. (line 94)
* forward slash (/), patterns and: Expression Patterns. (line 24)
* FPAT variable: Splitting By Content.
(line 25)
@@ -35235,19 +35303,19 @@ Index
* Free Software Foundation (FSF) <2>: Glossary. (line 370)
* Free Software Foundation (FSF) <3>: Glossary. (line 403)
* FreeBSD: Glossary. (line 746)
-* FS variable: Field Separators. (line 15)
-* FS variable <1>: User-modified. (line 53)
* FS variable, --field-separator option and: Options. (line 21)
-* FS variable, as null string: Single Character Fields.
- (line 20)
+* FS variable, TAB character as: Options. (line 292)
+* FS variable: Field Separators. (line 15)
* FS variable, changing value of: Field Separators. (line 34)
-* FS variable, running awk programs and: Cut Program. (line 63)
+* FS variable, containing ^: Regexp Field Splitting.
+ (line 59)
+* FS variable, null string as: Single Character Fields.
+ (line 20)
* FS variable, setting from command line: Command Line Field Separator.
(line 6)
-* FS variable, TAB character as: Options. (line 292)
-* FS, containing ^: Regexp Field Splitting.
- (line 59)
-* FS, in multiline records: Multiple Line. (line 41)
+* 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)
* FSF (Free Software Foundation): Manual History. (line 6)
* FSF (Free Software Foundation) <1>: Getting. (line 10)
* FSF (Free Software Foundation) <2>: Glossary. (line 370)
@@ -35255,150 +35323,154 @@ Index
* fts() extension function: Extension Sample File Functions.
(line 60)
* FUNCTAB array: Auto-set. (line 134)
+* function arguments, show in debugger: Debugger Info. (line 18)
* function calls: Function Calls. (line 6)
* function calls, indirect: Indirect Calls. (line 6)
* function calls, indirect, @-notation for: Indirect Calls. (line 47)
* function definition example: Function Example. (line 6)
+* function definitions, list in debugger: Debugger Info. (line 30)
* function pointers: Indirect Calls. (line 6)
-* functions, arrays as parameters to: Pass By Value/Reference.
- (line 44)
* functions, built-in: Function Calls. (line 10)
+* functions, user-defined, next/nextfile statements and: Next Statement.
+ (line 44)
+* functions, user-defined, next/nextfile statements and <1>: Nextfile
Statement.
+ (line 47)
* functions, built-in <1>: Functions. (line 6)
* functions, built-in, evaluation order: Calling Built-in. (line 30)
+* functions, string-translation: I18N Functions. (line 6)
+* functions, user-defined: User-defined. (line 6)
* functions, defining: Definition Syntax. (line 10)
+* functions, names of: Definition Syntax. (line 24)
+* functions, recursive: Definition Syntax. (line 89)
+* functions, user-defined, calling: Function Calling. (line 6)
+* functions, arrays as parameters to: Pass By Value/Reference.
+ (line 44)
+* functions, undefined: Function Caveats. (line 6)
* functions, library: Library Functions. (line 6)
-* functions, library, assertions: Assert Function. (line 6)
+* functions, user-defined, library of: Library Functions. (line 6)
* functions, library, associative arrays and: Library Names. (line 58)
-* functions, library, C library: Getopt Function. (line 6)
-* functions, library, character values as numbers: Ordinal Functions.
- (line 6)
+* functions, library, assertions: Assert Function. (line 6)
+* functions, library, rounding numbers: Round Function. (line 6)
* functions, library, Cliff random numbers: Cliff Random Function.
(line 6)
-* functions, library, command-line options: Getopt Function. (line 6)
-* functions, library, example program for using: Igawk Program.
- (line 6)
-* functions, library, group database, reading: Group Functions.
+* functions, library, character values as numbers: Ordinal Functions.
(line 6)
-* functions, library, managing data files: Data File Management.
+* functions, library, merging arrays into strings: Join Function.
(line 6)
* functions, library, managing time: Getlocaltime Function.
(line 6)
-* functions, library, merging arrays into strings: Join Function.
+* functions, library, managing data files: Data File Management.
(line 6)
-* functions, library, rounding numbers: Round Function. (line 6)
+* functions, library, command-line options: Getopt Function. (line 6)
+* functions, library, C library: Getopt Function. (line 6)
* functions, library, user database, reading: Passwd Functions.
(line 6)
-* functions, names of: Definition Syntax. (line 24)
-* functions, recursive: Definition Syntax. (line 89)
-* functions, string-translation: I18N Functions. (line 6)
-* functions, undefined: Function Caveats. (line 6)
-* functions, user-defined: User-defined. (line 6)
-* functions, user-defined, calling: Function Calling. (line 6)
+* functions, library, group database, reading: Group Functions.
+ (line 6)
+* functions, library, example program for using: Igawk Program.
+ (line 6)
* functions, user-defined, counts, in a profile: Profiling. (line 137)
-* functions, user-defined, library of: Library Functions. (line 6)
-* functions, user-defined, next/nextfile statements and: Next Statement.
- (line 44)
-* functions, user-defined, next/nextfile statements and <1>: Nextfile
Statement.
- (line 47)
* G-d: Acknowledgments. (line 94)
* G., Daniel Richard: Acknowledgments. (line 60)
* G., Daniel Richard <1>: Maintainers. (line 14)
* Garfinkle, Scott: Contributors. (line 35)
-* gawk program, dynamic profiling: Profiling. (line 179)
-* gawk version: Auto-set. (line 262)
-* gawk, ARGIND variable in: Other Arguments. (line 21)
+* gawk: Preface. (line 13)
* gawk, awk and: Preface. (line 21)
+* gawk, uses for: Preface. (line 34)
* gawk, awk and <1>: This Manual. (line 14)
-* gawk, bitwise operations in: Bitwise Functions. (line 40)
-* gawk, break statement in: Break Statement. (line 51)
+* gawk, newlines in: Statements/Lines. (line 12)
+* gawk, extensions, disabling: Options. (line 283)
+* gawk, version of, printing information about: Options. (line 331)
+* gawk, ARGIND variable in: Other Arguments. (line 21)
+* gawk, escape sequences: Escape Sequences. (line 121)
+* gawk, escape sequences <1>: Escape Sequences. (line 121)
+* gawk, regular expressions, precedence: Regexp Operator Details.
+ (line 142)
+* gawk, interval expressions and: Interval Expressions.
+ (line 10)
* gawk, character classes and: Bracket Expressions. (line 112)
-* gawk, coding style in: Adding Code. (line 37)
-* gawk, command-line options, and regular expressions: GNU Regexp Operators.
- (line 73)
-* gawk, configuring: Configuration Philosophy.
- (line 6)
-* gawk, configuring, options: Additional Configuration Options.
+* gawk, regular expressions, operators: GNU Regexp Operators.
(line 6)
-* gawk, continue statement in: Continue Statement. (line 44)
-* gawk, distribution: Distribution contents.
+* gawk, word-boundary operator: GNU Regexp Operators.
+ (line 66)
+* gawk, command-line options, regular expressions and: GNU Regexp Operators.
+ (line 73)
+* gawk, regular expressions, case sensitivity: Case-sensitivity.
+ (line 26)
+* gawk, IGNORECASE variable in: Case-sensitivity. (line 26)
+* gawk, RT variable in: awk split records. (line 131)
+* gawk, RT variable in <1>: gawk split records. (line 58)
+* gawk, FIELDWIDTHS variable in: Fixed width data. (line 17)
+* gawk, FPAT variable in: Splitting By Content.
+ (line 25)
+* gawk, splitting fields and: Testing field creation.
(line 6)
+* gawk, RT variable in <2>: Multiple Line. (line 139)
* gawk, ERRNO variable in: Getline. (line 19)
+* gawk, implementation issues, limits: Getline Notes. (line 14)
+* gawk, format-control characters: Control Letters. (line 33)
+* gawk, format-control characters <1>: Control Letters. (line 108)
+* gawk, implementation issues, pipes: Redirection. (line 129)
+* gawk, file names in: Special Files. (line 6)
* gawk, ERRNO variable in <1>: Close Files And Pipes.
(line 140)
+* gawk, octal numbers and: Nondecimal-numbers. (line 41)
+* gawk, hexadecimal numbers and: Nondecimal-numbers. (line 41)
+* gawk, regexp constants and: Standard Regexp Constants.
+ (line 28)
+* gawk, line continuation in: Conditional Exp. (line 34)
* gawk, ERRNO variable in <2>: BEGINFILE/ENDFILE. (line 26)
-* gawk, ERRNO variable in <3>: Auto-set. (line 87)
-* gawk, ERRNO variable in <4>: TCP/IP Networking. (line 54)
-* gawk, escape sequences: Escape Sequences. (line 121)
-* gawk, extensions, disabling: Options. (line 283)
-* gawk, features, adding: Adding Code. (line 6)
-* gawk, features, advanced: Advanced Features. (line 6)
-* gawk, field separators and: User-modified. (line 74)
-* gawk, FIELDWIDTHS variable in: Fixed width data. (line 17)
+* gawk, break statement in: Break Statement. (line 51)
+* gawk, continue statement in: Continue Statement. (line 44)
+* gawk, predefined variables and: Built-in Variables. (line 14)
* gawk, FIELDWIDTHS variable in <1>: User-modified. (line 37)
-* gawk, file names in: Special Files. (line 6)
-* gawk, format-control characters: Control Letters. (line 33)
-* gawk, format-control characters <1>: Control Letters. (line 108)
-* gawk, FPAT variable in: Splitting By Content.
- (line 25)
* gawk, FPAT variable in <1>: User-modified. (line 46)
-* gawk, FUNCTAB array in: Auto-set. (line 134)
-* gawk, function arguments and: Calling Built-in. (line 16)
-* gawk, hexadecimal numbers and: Nondecimal-numbers. (line 41)
-* gawk, IGNORECASE variable in: Case-sensitivity. (line 26)
+* gawk, field separators and: User-modified. (line 74)
* gawk, IGNORECASE variable in <1>: User-modified. (line 79)
+* gawk, LINT variable in: User-modified. (line 90)
+* gawk, TEXTDOMAIN variable in: User-modified. (line 155)
+* gawk, ERRNO variable in <3>: Auto-set. (line 87)
+* gawk, FUNCTAB array in: Auto-set. (line 134)
+* gawk, PROCINFO array in: Auto-set. (line 148)
+* gawk, version of: Auto-set. (line 262)
+* gawk, RT variable in <3>: Auto-set. (line 348)
+* gawk, SYMTAB array in: Auto-set. (line 352)
* gawk, IGNORECASE variable in <2>: Array Intro. (line 100)
+* gawk, function arguments and: Calling Built-in. (line 16)
* gawk, IGNORECASE variable in <3>: String Functions. (line 58)
+* gawk, timestamps: Time Functions. (line 6)
+* gawk, PROCINFO array in <1>: Time Functions. (line 49)
+* gawk, bitwise operations in: Bitwise Functions. (line 40)
+* gawk, string-translation functions: I18N Functions. (line 6)
+* gawk, features, advanced: Advanced Features. (line 6)
* gawk, IGNORECASE variable in <4>: Array Sorting Functions.
(line 83)
-* gawk, implementation issues: Notes. (line 6)
-* gawk, implementation issues, debugging: Compatibility Mode. (line 6)
-* gawk, implementation issues, downward compatibility: Compatibility Mode.
- (line 6)
-* gawk, implementation issues, limits: Getline Notes. (line 14)
-* gawk, implementation issues, pipes: Redirection. (line 129)
-* gawk, installing: Installation. (line 6)
-* gawk, internationalization and, See internationalization:
Internationalization.
+* gawk, PROCINFO array in <2>: Two-way I/O. (line 114)
+* gawk, ERRNO variable in <4>: TCP/IP Networking. (line 54)
+* gawk, dynamic profiling: Profiling. (line 179)
+* gawk, profiling programs: Profiling. (line 179)
+* gawk, internationalization: Internationalization.
(line 13)
* gawk, interpreter, adding code to: Using Internal File Ops.
(line 6)
-* gawk, interval expressions and: Interval Expressions.
- (line 10)
-* gawk, line continuation in: Conditional Exp. (line 34)
-* gawk, LINT variable in: User-modified. (line 90)
* gawk, list of contributors to: Contributors. (line 6)
-* gawk, MS-Windows version of: PC Using. (line 13)
-* gawk, newlines in: Statements/Lines. (line 12)
-* gawk, octal numbers and: Nondecimal-numbers. (line 41)
-* gawk, predefined variables and: Built-in Variables. (line 14)
-* gawk, PROCINFO array in: Auto-set. (line 148)
-* gawk, PROCINFO array in <1>: Time Functions. (line 49)
-* gawk, PROCINFO array in <2>: Two-way I/O. (line 114)
-* gawk, regexp constants and: Standard Regexp Constants.
- (line 28)
-* gawk, regular expressions, case sensitivity: Case-sensitivity.
- (line 26)
-* gawk, regular expressions, operators: GNU Regexp Operators.
- (line 6)
-* gawk, regular expressions, precedence: Regexp Operator Details.
- (line 142)
-* gawk, RT variable in: awk split records. (line 131)
-* gawk, RT variable in <1>: gawk split records. (line 58)
-* gawk, RT variable in <2>: Multiple Line. (line 139)
-* gawk, RT variable in <3>: Auto-set. (line 348)
-* gawk, See Also awk: Preface. (line 34)
+* gawk, installing: Installation. (line 6)
* gawk, source code, obtaining: Getting. (line 6)
-* gawk, splitting fields and: Testing field creation.
+* gawk, distribution: Distribution contents.
(line 6)
-* gawk, string-translation functions: I18N Functions. (line 6)
-* gawk, SYMTAB array in: Auto-set. (line 352)
-* gawk, TEXTDOMAIN variable in: User-modified. (line 155)
-* gawk, timestamps: Time Functions. (line 6)
-* gawk, uses for: Preface. (line 34)
-* gawk, versions of, information about, printing: Options. (line 331)
+* gawk, configuring, options: Additional Configuration Options.
+ (line 6)
+* gawk, configuring: Configuration Philosophy.
+ (line 6)
+* gawk, MS-Windows version of: PC Using. (line 13)
* gawk, VMS version of: VMS Installation. (line 6)
-* gawk, word-boundary operator: GNU Regexp Operators.
- (line 66)
-* gawkextlib: gawkextlib. (line 6)
+* gawk, implementation issues: Notes. (line 6)
+* gawk, implementation issues, downward compatibility: Compatibility Mode.
+ (line 6)
+* gawk, implementation issues, debugging: Compatibility Mode. (line 6)
+* gawk, features, adding: Adding Code. (line 6)
+* gawk, coding style in: Adding Code. (line 37)
+* gawk <1>: Preface. (line 34)
* gawkextlib project: gawkextlib. (line 6)
* gawklibpath_append shell function: Shell Startup Files. (line 29)
* gawklibpath_default shell function: Shell Startup Files. (line 22)
@@ -35406,8 +35478,9 @@ Index
* gawkpath_append shell function: Shell Startup Files. (line 19)
* gawkpath_default shell function: Shell Startup Files. (line 12)
* gawkpath_prepend shell function: Shell Startup Files. (line 15)
-* General Public License (GPL): Glossary. (line 394)
-* General Public License, See GPL: Manual History. (line 11)
+* GAWK_LOCALE_DIR environment variable: Explaining gettext. (line 132)
+* GAWK_READ_TIMEOUT environment variable: Read Timeout. (line 71)
+* GAWK_SOCK_RETRIES environment variable: Nonfatal. (line 53)
* generate time values: Time Functions. (line 25)
* gensub: Standard Regexp Constants.
(line 43)
@@ -35423,24 +35496,24 @@ Index
* getgrnam() function (C library): Group Functions. (line 173)
* getgrnam() user-defined function: Group Functions. (line 178)
* getgruser() function (C library): Group Functions. (line 193)
-* getgruser() function, user-defined: Group Functions. (line 196)
+* getgruser() user-defined function: Group Functions. (line 196)
* getline command: Reading Files. (line 20)
+* getline command, explicit input with: Getline. (line 6)
+* getline command, return values: Getline. (line 19)
+* getline command, into a variable: Getline/Variable. (line 6)
+* getline command, from a file: Getline/File. (line 6)
* getline command, coprocesses, using from: Getline/Coprocess.
(line 6)
-* getline command, coprocesses, using from <1>: Close Files And Pipes.
- (line 6)
-* getline command, deadlock and: Two-way I/O. (line 53)
-* getline command, explicit input with: Getline. (line 6)
* getline command, FILENAME variable and: Getline Notes. (line 19)
-* getline command, return values: Getline. (line 19)
* getline command, variants: Getline Summary. (line 6)
+* getline command, coprocesses, using from <1>: Close Files And Pipes.
+ (line 6)
+* getline command, BEGINFILE/ENDFILE patterns and: BEGINFILE/ENDFILE.
+ (line 54)
+* getline command, _pw_init() function: Passwd Functions. (line 154)
* getline command, _gr_init() user-defined function: Group Functions.
(line 83)
-* getline command, _pw_init() function: Passwd Functions. (line 154)
-* getline from a file: Getline/File. (line 6)
-* getline into a variable: Getline/Variable. (line 6)
-* getline statement, BEGINFILE/ENDFILE patterns and: BEGINFILE/ENDFILE.
- (line 54)
+* getline command, deadlock and: Two-way I/O. (line 53)
* getlocaltime() user-defined function: Getlocaltime Function.
(line 16)
* getopt() function (C library): Getopt Function. (line 15)
@@ -35465,11 +35538,11 @@ Index
(line 10)
* git utility <3>: Adding Code. (line 112)
* Git, use of for gawk source code: Derived Files. (line 6)
+* global variables, show in debugger: Debugger Info. (line 48)
* GNITS mailing list: Acknowledgments. (line 52)
-* GNU awk, See gawk: Preface. (line 51)
+* GNU awk: Preface. (line 51)
* GNU Free Documentation License: GNU Free Documentation License.
(line 8)
-* GNU General Public License: Glossary. (line 394)
* GNU Lesser General Public License: Glossary. (line 489)
* GNU long options: Command Line. (line 13)
* GNU long options <1>: Options. (line 6)
@@ -35483,8 +35556,8 @@ Index
* goawk: Other Versions. (line 113)
* Gordon, Assaf: Contributors. (line 108)
* GPL (General Public License): Manual History. (line 11)
-* GPL (General Public License) <1>: Glossary. (line 394)
* GPL (General Public License), printing: Options. (line 93)
+* GPL (General Public License) <1>: Glossary. (line 394)
* grcat program: Group Functions. (line 16)
* Grigera, Juan: Contributors. (line 58)
* group database, reading: Group Functions. (line 6)
@@ -35504,8 +35577,8 @@ Index
* Hankerson, Darrel: Acknowledgments. (line 60)
* Hankerson, Darrel <1>: Contributors. (line 61)
* Haque, John: Contributors. (line 111)
-* Hartholz, Elaine: Acknowledgments. (line 38)
* Hartholz, Marshall: Acknowledgments. (line 38)
+* Hartholz, Elaine: Acknowledgments. (line 38)
* Hasegawa, Isamu: Contributors. (line 97)
* help debugger command: Miscellaneous Debugger Commands.
(line 67)
@@ -35515,49 +35588,50 @@ Index
* histsort.awk program: History Sorting. (line 25)
* Hughes, Phil: Acknowledgments. (line 43)
* HUP signal, for dynamic profiling: Profiling. (line 211)
-* hyphen (-), - operator: Precedence. (line 51)
-* hyphen (-), - operator <1>: Precedence. (line 57)
+* hyphen (-), file names beginning with: Options. (line 64)
+* hyphen (-), -- end of options marker: Options. (line 336)
+* hyphen (-), in bracket expressions: Bracket Expressions. (line 25)
+* hyphen (-), -= operator: Assignment Ops. (line 129)
* hyphen (-), -- operator: Increment Ops. (line 48)
* hyphen (-), -- operator <1>: Precedence. (line 45)
-* hyphen (-), -= operator: Assignment Ops. (line 129)
+* hyphen (-), - operator: Precedence. (line 51)
+* hyphen (-), - operator <1>: Precedence. (line 57)
* hyphen (-), -= operator <1>: Precedence. (line 94)
-* hyphen (-), file names beginning with: Options. (line 64)
-* hyphen (-), in bracket expressions: Bracket Expressions. (line 25)
* i debugger command (alias for info): Debugger Info. (line 13)
* id utility: Id Program. (line 6)
* id.awk program: Id Program. (line 31)
-* if statement: If Statement. (line 6)
-* if statement, actions, changing: Ranges. (line 25)
* if statement, use of regexps in: Regexp Usage. (line 19)
+* if statement, actions, changing: Ranges. (line 25)
+* if statement: If Statement. (line 6)
* igawk.sh program: Igawk Program. (line 124)
* ignore breakpoint: Breakpoint Control. (line 87)
* ignore debugger command: Breakpoint Control. (line 87)
+* IGNORECASE variable, with ~ and !~ operators: Case-sensitivity.
+ (line 26)
* IGNORECASE variable: User-modified. (line 79)
* IGNORECASE variable, array indices and: Array Intro. (line 100)
-* IGNORECASE variable, array sorting functions and: Array Sorting Functions.
- (line 83)
* IGNORECASE variable, in example programs: Library Functions.
(line 53)
-* IGNORECASE variable, with ~ and !~ operators: Case-sensitivity.
- (line 26)
-* Illumos: Other Versions. (line 105)
+* IGNORECASE variable, array sorting functions and: Array Sorting Functions.
+ (line 83)
* Illumos, POSIX-compliant awk: Other Versions. (line 105)
-* implementation issues, gawk: Notes. (line 6)
-* implementation issues, gawk, debugging: Compatibility Mode. (line 6)
* implementation issues, gawk, limits: Getline Notes. (line 14)
* implementation issues, gawk, limits <1>: Redirection. (line 129)
+* implementation issues, gawk: Notes. (line 6)
+* implementation issues, gawk, debugging: Compatibility Mode. (line 6)
* implicit namespace: Changing The Namespace.
(line 25)
* in operator: Comparison Operators.
(line 11)
* in operator <1>: Precedence. (line 82)
* in operator <2>: For Statement. (line 75)
-* in operator, index existence in multidimensional arrays: Multidimensional.
- (line 41)
-* in operator, order of array access: Scanning an Array. (line 48)
* in operator, testing if array element exists: Reference to Elements.
(line 38)
* in operator, use in loops: Scanning an Array. (line 17)
+* in operator, order of array access: Scanning an Array. (line 48)
+* in operator, index existence in multidimensional arrays: Multidimensional.
+ (line 41)
+* @include directive: Include Files. (line 8)
* including files, @include directive: Include Files. (line 8)
* increment operators: Increment Ops. (line 6)
* index: String Functions. (line 156)
@@ -35570,52 +35644,59 @@ Index
* initialization, automatic: More Complex. (line 39)
* inplace extension: Extension Sample Inplace.
(line 6)
+* input, standard: Read Terminal. (line 6)
+* input, splitting into records: Records. (line 6)
+* input, multiline records: Multiple Line. (line 6)
+* input, explicit: Getline. (line 6)
+* input, standard <1>: Special FD. (line 6)
+* input, data, nondecimal: Nondecimal Data. (line 6)
+* input files, running awk without: Read Terminal. (line 6)
+* input files, running awk without <1>: Read Terminal. (line 16)
+* input files, examples: Sample Data Files. (line 6)
+* input files, variable assignments and: Other Arguments. (line 32)
+* input files, reading: Reading Files. (line 6)
* input files: Reading Files. (line 6)
* input files, closing: Close Files And Pipes.
(line 6)
* input files, counting elements in: Wc Program. (line 6)
-* input files, examples: Sample Data Files. (line 6)
-* input files, reading: Reading Files. (line 6)
-* input files, running awk without: Read Terminal. (line 6)
-* input files, running awk without <1>: Read Terminal. (line 16)
-* input files, variable assignments and: Other Arguments. (line 32)
* input pipeline: Getline/Pipe. (line 10)
* input record, length of: String Functions. (line 178)
* input redirection: Getline/File. (line 6)
-* input, data, nondecimal: Nondecimal Data. (line 6)
-* input, explicit: Getline. (line 6)
-* input, files, See input files: Multiple Line. (line 6)
-* input, multiline records: Multiple Line. (line 6)
-* input, splitting into records: Records. (line 6)
-* input, standard: Read Terminal. (line 6)
-* input, standard <1>: Special FD. (line 6)
-* input/output functions: I/O Functions. (line 6)
-* input/output, binary: User-modified. (line 15)
* input/output, from BEGIN and END: I/O And BEGIN/END. (line 6)
+* input/output, binary: User-modified. (line 15)
+* input/output, functions: I/O Functions. (line 6)
* input/output, two-way: Two-way I/O. (line 27)
* insomnia, cure for: Alarm Program. (line 6)
-* installation, VMS: VMS Installation. (line 6)
* installing gawk: Installation. (line 6)
+* installing gawk, MS-Windows: PC Binary Installation.
+ (line 6)
+* installing gawk, Cygwin: Cygwin. (line 21)
+* installing gawk, VMS: VMS Installation. (line 6)
* instruction tracing, in debugger: Debugger Info. (line 90)
* int: Numeric Functions. (line 24)
* INT signal (MS-Windows): Profiling. (line 214)
* integer array indices: Numeric Array Subscripts.
(line 31)
+* integers, unsigned: Computer Arithmetic. (line 41)
* integers, arbitrary precision: Arbitrary Precision Integers.
(line 6)
-* integers, unsigned: Computer Arithmetic. (line 41)
* interacting with other programs: I/O Functions. (line 106)
-* internationalization: I18N Functions. (line 6)
-* internationalization <1>: I18N and L10N. (line 6)
+* internationalization, localization, character classes: Bracket Expressions.
+ (line 112)
* internationalization, localization: User-modified. (line 155)
+* internationalization: I18N Functions. (line 6)
* internationalization, localization <1>: Internationalization.
(line 13)
-* internationalization, localization, character classes: Bracket Expressions.
- (line 112)
* internationalization, localization, gawk and: Internationalization.
(line 13)
+* internationalization <1>: I18N and L10N. (line 6)
+* internationalization, localization <2>: I18N and L10N. (line 6)
* internationalization, localization, locale categories: Explaining gettext.
(line 81)
+* internationalization, localization, monetary information: Explaining gettext.
+ (line 104)
+* internationalization, localization, currency symbols: Explaining gettext.
+ (line 104)
* internationalization, localization, marked strings: Programmer i18n.
(line 13)
* internationalization, localization, portability and: I18N Portability.
@@ -35628,9 +35709,10 @@ Index
* inventory-shipped file: Sample Data Files. (line 32)
* invoke shell command: I/O Functions. (line 106)
* isarray: Type Functions. (line 11)
+* ISO, ISO 8601 date and time standard: Time Functions. (line 186)
+* ISO, ISO 8859-1 character set: Glossary. (line 194)
+* ISO, ISO Latin-1 character set: Glossary. (line 194)
* ISO: Glossary. (line 454)
-* ISO 8859-1: Glossary. (line 194)
-* ISO Latin-1: Glossary. (line 194)
* Jacobs, Andrew: Passwd Functions. (line 90)
* Jaegermann, Michal: Acknowledgments. (line 60)
* Jaegermann, Michal <1>: Contributors. (line 46)
@@ -35640,8 +35722,8 @@ Index
* jedi knights: Undocumented. (line 6)
* Johansen, Chris: Signature Program. (line 25)
* join() user-defined function: Join Function. (line 18)
-* Kahrs, Ju"rgen: Acknowledgments. (line 60)
-* Kahrs, Ju"rgen <1>: Contributors. (line 71)
+* Kahrs, Jürgen: Acknowledgments. (line 60)
+* Kahrs, Jürgen <1>: Contributors. (line 71)
* Kasal, Stepan: Acknowledgments. (line 60)
* Kenobi, Obi-Wan: Undocumented. (line 6)
* Kernighan, Brian: History. (line 17)
@@ -35661,26 +35743,29 @@ Index
* l debugger command (alias for list): Miscellaneous Debugger Commands.
(line 73)
* labels.awk program: Labels Program. (line 51)
+* LANG environment variable: I18N Example. (line 68)
* Langston, Peter: Advanced Features. (line 6)
* LANGUAGE environment variable: Explaining gettext. (line 120)
+* LANGUAGE environment variable <1>: I18N Example. (line 68)
* languages, data-driven: Basic High Level. (line 74)
+* LC_ALL environment variable: I18N Example. (line 68)
* LC_ALL locale category: Explaining gettext. (line 117)
* LC_COLLATE locale category: Explaining gettext. (line 94)
* LC_CTYPE locale category: Explaining gettext. (line 98)
+* LC_MESSAGES environment variable: I18N Example. (line 68)
* LC_MESSAGES locale category: Explaining gettext. (line 88)
* LC_MESSAGES locale category, bindtextdomain() function (gawk): Programmer
i18n.
(line 103)
* LC_MONETARY locale category: Explaining gettext. (line 104)
* LC_NUMERIC locale category: Explaining gettext. (line 108)
* LC_TIME locale category: Explaining gettext. (line 112)
+* left angle bracket (<), < operator (I/O): Getline/File. (line 6)
* left angle bracket (<), < operator: Comparison Operators.
(line 11)
-* left angle bracket (<), < operator <1>: Precedence. (line 64)
-* left angle bracket (<), < operator (I/O): Getline/File. (line 6)
* left angle bracket (<), <= operator: Comparison Operators.
(line 11)
+* left angle bracket (<), < operator <1>: Precedence. (line 64)
* left angle bracket (<), <= operator <1>: Precedence. (line 64)
-* left shift: Bitwise Functions. (line 47)
* left shift, bitwise: Bitwise Functions. (line 32)
* leftmost longest match: Multiple Line. (line 26)
* length: String Functions. (line 171)
@@ -35690,81 +35775,77 @@ Index
* LGPL (Lesser General Public License): Glossary. (line 489)
* libmawk: Other Versions. (line 129)
* libraries of awk functions: Library Functions. (line 6)
-* libraries of awk functions, assertions: Assert Function. (line 6)
* libraries of awk functions, associative arrays and: Library Names.
(line 58)
-* libraries of awk functions, character values as numbers: Ordinal Functions.
+* libraries of awk functions, assertions: Assert Function. (line 6)
+* libraries of awk functions, rounding numbers: Round Function.
(line 6)
-* libraries of awk functions, command-line options: Getopt Function.
+* libraries of awk functions, character values as numbers: Ordinal Functions.
(line 6)
-* libraries of awk functions, example program for using: Igawk Program.
+* libraries of awk functions, merging arrays into strings: Join Function.
(line 6)
-* libraries of awk functions, group database, reading: Group Functions.
+* libraries of awk functions, managing, time: Getlocaltime Function.
(line 6)
* libraries of awk functions, managing, data files: Data File Management.
(line 6)
-* libraries of awk functions, managing, time: Getlocaltime Function.
+* libraries of awk functions, command-line options: Getopt Function.
(line 6)
-* libraries of awk functions, merging arrays into strings: Join Function.
+* libraries of awk functions, user database, reading: Passwd Functions.
(line 6)
-* libraries of awk functions, rounding numbers: Round Function.
+* libraries of awk functions, group database, reading: Group Functions.
(line 6)
-* libraries of awk functions, user database, reading: Passwd Functions.
+* libraries of awk functions, example program for using: Igawk Program.
(line 6)
* line breaks: Statements/Lines. (line 6)
+* line continuations, with C shell: More Complex. (line 31)
+* line continuations, in print statement: Print Examples. (line 75)
* line continuations: Boolean Ops. (line 64)
* line continuations, gawk: Conditional Exp. (line 34)
-* line continuations, in print statement: Print Examples. (line 75)
-* line continuations, with C shell: More Complex. (line 31)
* lines, blank, printing: Print. (line 22)
-* lines, counting: Wc Program. (line 6)
-* lines, duplicate, removing: History Sorting. (line 6)
* lines, matching ranges of: Ranges. (line 6)
* lines, skipping between markers: Ranges. (line 43)
-* lint checking: User-modified. (line 90)
-* lint checking, array elements: Delete. (line 34)
-* lint checking, array subscripts: Uninitialized Subscripts.
- (line 43)
+* lines, counting: Wc Program. (line 6)
+* lines, duplicate, removing: History Sorting. (line 6)
* lint checking, empty programs: Command Line. (line 16)
* lint checking, issuing warnings: Options. (line 210)
* lint checking, POSIXLY_CORRECT environment variable: Options.
- (line 373)
+ (line 377)
+* lint checking: User-modified. (line 90)
+* lint checking, array subscripts: Uninitialized Subscripts.
+ (line 43)
+* lint checking, array subscripts <1>: Delete. (line 34)
* lint checking, undefined functions: Function Caveats. (line 23)
* LINT variable: User-modified. (line 90)
-* Linux: Manual History. (line 28)
-* Linux <1>: I18N Example. (line 57)
-* Linux <2>: Glossary. (line 746)
* list all global variables, in debugger: Debugger Info. (line 48)
* list debugger command: Miscellaneous Debugger Commands.
(line 73)
* list function definitions, in debugger: Debugger Info. (line 30)
+* @load directive: Loading Shared Libraries.
+ (line 8)
+* loading extensions: Options. (line 198)
* loading extensions, @load directive: Loading Shared Libraries.
(line 8)
-* loading, extensions: Options. (line 198)
* local variables, in a function: Variable Scope. (line 6)
+* local variables, show in debugger: Debugger Info. (line 34)
* locale categories: Explaining gettext. (line 81)
* locale decimal point character: Options. (line 295)
* locale, definition of: Locales. (line 6)
-* localization: I18N and L10N. (line 6)
-* localization, See internationalization, localization: I18N and L10N.
- (line 6)
* log: Numeric Functions. (line 29)
* log files, timestamps in: Time Functions. (line 6)
* logarithm: Numeric Functions. (line 29)
* logical false/true: Truth Values. (line 6)
-* logical operators, See Boolean expressions: Boolean Ops. (line 6)
* login information: Passwd Functions. (line 16)
* long options: Command Line. (line 13)
* loops: While Statement. (line 6)
-* loops, break statement and: Break Statement. (line 6)
-* loops, continue statements and: For Statement. (line 64)
-* loops, count for header, in a profile: Profiling. (line 131)
+* loops, while: While Statement. (line 6)
* loops, do-while: Do Statement. (line 6)
+* loops, for, iterative: For Statement. (line 6)
+* loops, continue statement and: For Statement. (line 64)
* loops, exiting: Break Statement. (line 6)
+* loops, break statement and: Break Statement. (line 6)
* loops, for, array scanning: Scanning an Array. (line 6)
-* loops, for, iterative: For Statement. (line 6)
-* loops, See Also while statement: While Statement. (line 6)
-* loops, while: While Statement. (line 6)
+* loops, count for header, in a profile: Profiling. (line 131)
+* loops <1>: While Statement. (line 6)
* ls utility: More Complex. (line 15)
* lshift: Bitwise Functions. (line 47)
* lvalues/rvalues: Assignment Ops. (line 31)
@@ -35782,9 +35863,10 @@ Index
* match regexp in string: String Functions. (line 211)
* match() function, RSTART/RLENGTH variables: String Functions.
(line 228)
-* matching, expressions, See comparison expressions: Typing and Comparison.
- (line 9)
+* match() function, side effects: String Functions. (line 228)
* matching, leftmost longest: Multiple Line. (line 26)
+* matching, expressions: Typing and Comparison.
+ (line 9)
* matching, null strings: String Functions. (line 542)
* mawk utility: Escape Sequences. (line 121)
* mawk utility <1>: Getline/Pipe. (line 62)
@@ -35793,26 +35875,25 @@ Index
* mawk utility <4>: Other Versions. (line 39)
* maximum precision supported by MPFR library: Auto-set. (line 276)
* McIlroy, Doug: Glossary. (line 255)
-* McPhee, Patrick: Contributors. (line 103)
+* McPhee, Patrick T.J.: Contributors. (line 103)
* memory, allocating for extensions: Memory Allocation Functions.
(line 6)
* message object files: Explaining gettext. (line 42)
-* message object files, converting from portable object files: I18N Example.
- (line 80)
* message object files, specifying directory of: Explaining gettext.
(line 54)
* message object files, specifying directory of <1>: Programmer i18n.
(line 48)
+* message object files, converting from portable object files: I18N Example.
+ (line 80)
* messages from extensions: Printing Messages. (line 6)
-* metacharacters in regular expressions: Regexp Operators. (line 6)
* metacharacters, escape sequences for: Escape Sequences. (line 140)
+* metacharacters, in regular expressions: Regexp Operators. (line 6)
* minimum precision required by MPFR library: Auto-set. (line 279)
* mktime: Time Functions. (line 25)
* modifiers, in format specifiers: Format Modifiers. (line 6)
* module, definition of: Global Namespace. (line 18)
* monetary information, localization: Explaining gettext. (line 104)
* Moore, Duncan: Getline Notes. (line 40)
-* MPFR, checking availability of: Checking for MPFR. (line 6)
* MPFR, checking for: Checking for MPFR. (line 6)
* msgfmt utility: I18N Example. (line 80)
* multiple precision: Arbitrary Precision Arithmetic.
@@ -35822,45 +35903,49 @@ Index
(line 43)
* name management: Internal Name Management.
(line 6)
-* names, arrays/variables: Library Names. (line 6)
* names, functions: Definition Syntax. (line 24)
+* names, arrays/variables: Library Names. (line 6)
* names, functions <1>: Library Names. (line 6)
-* namespace issues: Library Names. (line 6)
-* namespace issues, functions: Definition Syntax. (line 24)
-* namespace names, naming rules: Naming Rules. (line 6)
-* namespace, awk: Default Namespace. (line 6)
-* namespace, default: Default Namespace. (line 6)
* namespace, definition of: Global Namespace. (line 6)
-* namespace, example code: Namespace Example. (line 6)
+* namespace, standard awk, global: Global Namespace. (line 6)
+* namespace, default: Default Namespace. (line 6)
+* namespace, awk: Default Namespace. (line 6)
* namespace, implicit: Changing The Namespace.
(line 25)
* namespace, pushing and popping: Changing The Namespace.
(line 29)
-* namespace, standard awk, global: Global Namespace. (line 6)
-* namespaces, backwards compatibility: Namespace Summary. (line 28)
+* namespace, example code: Namespace Example. (line 6)
+* @namespace directive: Changing The Namespace.
+ (line 6)
+* @namespace directive <1>: Changing The Namespace.
+ (line 37)
+* namespaces, qualified names: Qualified Names. (line 6)
* namespaces, changing: Changing The Namespace.
(line 6)
-* namespaces, interaction with debugger: Namespace And Features.
- (line 17)
-* namespaces, interaction with extension API: Namespace And Features.
- (line 22)
-* namespaces, interaction with pretty printer: Namespace And Features.
+* namespaces, naming rules: Naming Rules. (line 6)
+* namespaces, interaction with, profiler: Namespace And Features.
(line 9)
-* namespaces, interaction with profiler: Namespace And Features.
+* namespaces, interaction with, pretty printer: Namespace And Features.
(line 9)
-* namespaces, qualified names: Qualified Names. (line 6)
-* naming rules, namespaces and component names: Naming Rules. (line 6)
+* namespaces, interaction with, debugger: Namespace And Features.
+ (line 17)
+* namespaces, interaction with, extension API: Namespace And Features.
+ (line 22)
+* namespaces, backwards compatibility: Namespace Summary. (line 28)
+* naming issues, functions: Definition Syntax. (line 24)
+* naming issues: Library Names. (line 6)
+* naming rules, namespace and component names: Naming Rules. (line 6)
* Neacsu, Mircea: Other Versions. (line 132)
* NetBSD: Glossary. (line 746)
-* networks, programming: TCP/IP Networking. (line 6)
* networks, support for: Special Network. (line 6)
+* networks, programming: TCP/IP Networking. (line 6)
* newlines: Statements/Lines. (line 6)
* newlines <1>: Options. (line 289)
-* newlines <2>: Boolean Ops. (line 69)
-* newlines, as record separators: awk split records. (line 12)
* newlines, in dynamic regexps: Computed Regexps. (line 60)
* newlines, in regexp constants: Computed Regexps. (line 70)
+* newlines, as record separators: awk split records. (line 12)
* newlines, printing: Print Examples. (line 11)
+* newlines <2>: Boolean Ops. (line 69)
* newlines, separating statements in actions: Action Overview.
(line 19)
* newlines, separating statements in actions <1>: Statements. (line 10)
@@ -35868,23 +35953,23 @@ Index
(line 43)
* next file statement: Feature History. (line 168)
* next statement: Boolean Ops. (line 95)
-* next statement <1>: Next Statement. (line 6)
* next statement, BEGIN/END patterns and: I/O And BEGIN/END. (line 36)
* next statement, BEGINFILE/ENDFILE patterns and: BEGINFILE/ENDFILE.
(line 50)
+* next statement <1>: Next Statement. (line 6)
* next statement, user-defined functions and: Next Statement. (line 44)
-* nextfile statement: Nextfile Statement. (line 6)
* nextfile statement, BEGIN/END patterns and: I/O And BEGIN/END.
(line 36)
* nextfile statement, BEGINFILE/ENDFILE patterns and: BEGINFILE/ENDFILE.
(line 26)
+* nextfile statement: Nextfile Statement. (line 6)
* nextfile statement, user-defined functions and: Nextfile Statement.
(line 47)
* nexti debugger command: Debugger Execution Control.
(line 49)
* NF variable: Fields. (line 33)
-* NF variable <1>: Auto-set. (line 123)
* NF variable, decrementing: Changing Fields. (line 107)
+* NF variable <1>: Auto-set. (line 123)
* ni debugger command (alias for nexti): Debugger Execution Control.
(line 49)
* noassign.awk program: Ignoring Assigns. (line 15)
@@ -35894,97 +35979,94 @@ Index
* NR variable: Records. (line 6)
* NR variable <1>: Auto-set. (line 143)
* NR variable, changing: Auto-set. (line 409)
+* null strings, in gawk arguments, quoting and: Quoting. (line 82)
* null strings: awk split records. (line 121)
* null strings <1>: Regexp Field Splitting.
(line 43)
+* null strings, converting numbers to strings: Strings And Numbers.
+ (line 21)
* null strings <2>: Truth Values. (line 6)
-* null strings <3>: Basic Data Typing. (line 26)
-* null strings in gawk arguments, quoting and: Quoting. (line 82)
* null strings, as array subscripts: Uninitialized Subscripts.
(line 43)
-* null strings, converting numbers to strings: Strings And Numbers.
- (line 21)
* null strings, deleting array elements and: Delete. (line 27)
* null strings, matching: String Functions. (line 542)
+* null strings <3>: Basic Data Typing. (line 26)
* number of array elements: String Functions. (line 201)
* number sign (#), #! (executable scripts): Executable Scripts.
(line 6)
* number sign (#), commenting: Comments. (line 6)
+* numbers, octal: Nondecimal-numbers. (line 6)
+* numbers, hexadecimal: Nondecimal-numbers. (line 6)
+* numbers, converting: Strings And Numbers. (line 6)
+* numbers, converting, to strings: User-modified. (line 30)
+* numbers, converting, to strings <1>: User-modified. (line 107)
* numbers, as array subscripts: Numeric Array Subscripts.
(line 6)
+* numbers, converting <1>: Bitwise Functions. (line 109)
* numbers, as string of bits: Bitwise Functions. (line 109)
-* numbers, as values of characters: Ordinal Functions. (line 6)
+* numbers, rounding: Round Function. (line 6)
* numbers, Cliff random: Cliff Random Function.
(line 6)
-* numbers, converting: Strings And Numbers. (line 6)
-* numbers, converting <1>: Bitwise Functions. (line 109)
-* numbers, converting, to strings: User-modified. (line 30)
-* numbers, converting, to strings <1>: User-modified. (line 107)
-* numbers, hexadecimal: Nondecimal-numbers. (line 6)
-* numbers, octal: Nondecimal-numbers. (line 6)
-* numbers, rounding: Round Function. (line 6)
-* numeric constants: Scalar Constants. (line 6)
-* numeric functions: Numeric Functions. (line 6)
+* numbers, as values of characters: Ordinal Functions. (line 6)
* numeric, output format: OFMT. (line 6)
+* numeric, constants: Scalar Constants. (line 6)
* numeric, strings: Variable Typing. (line 67)
+* numeric, functions: Numeric Functions. (line 6)
* o debugger command (alias for option): Debugger Info. (line 57)
* obsolete features: Obsolete. (line 6)
* octal numbers: Nondecimal-numbers. (line 6)
* octal values, enabling interpretation of: Options. (line 236)
* OFMT variable: OFMT. (line 15)
+* OFMT variable, POSIX awk and: OFMT. (line 27)
* OFMT variable <1>: Strings And Numbers. (line 56)
* OFMT variable <2>: User-modified. (line 107)
-* OFMT variable, POSIX awk and: OFMT. (line 27)
* OFS variable: Changing Fields. (line 64)
* OFS variable <1>: Output Separators. (line 6)
* OFS variable <2>: User-modified. (line 116)
* OpenBSD: Glossary. (line 746)
* OpenSolaris: Other Versions. (line 96)
* operating systems, BSD-based: Manual History. (line 28)
-* operating systems, PC, gawk on: PC Using. (line 6)
+* operating systems: Installation. (line 6)
* operating systems, PC, gawk on, installing: PC Installation.
(line 6)
+* operating systems, PC, gawk on: PC Using. (line 6)
* operating systems, porting gawk to: New Ports. (line 6)
-* operating systems, See Also GNU/Linux, PC operating systems, Unix:
Installation.
- (line 6)
* operations, bitwise: Bitwise Functions. (line 6)
-* operators, arithmetic: Arithmetic Ops. (line 6)
-* operators, assignment: Assignment Ops. (line 6)
-* operators, assignment <1>: Assignment Ops. (line 31)
-* operators, assignment, evaluation order: Assignment Ops. (line 110)
-* operators, Boolean, See Boolean expressions: Boolean Ops. (line 6)
-* operators, decrement/increment: Increment Ops. (line 6)
+* operators, string-matching: Regexp Usage. (line 19)
* operators, GNU-specific: GNU Regexp Operators.
(line 6)
+* operators, string-matching, for buffers: GNU Regexp Operators.
+ (line 51)
+* operators, word-boundary (gawk): GNU Regexp Operators.
+ (line 66)
* operators, input/output: Getline/File. (line 6)
* operators, input/output <1>: Getline/Pipe. (line 10)
* operators, input/output <2>: Getline/Coprocess. (line 6)
* operators, input/output <3>: Redirection. (line 22)
* operators, input/output <4>: Redirection. (line 96)
+* operators, arithmetic: Arithmetic Ops. (line 6)
+* operators, string: Concatenation. (line 9)
+* operators, assignment: Assignment Ops. (line 6)
+* operators, assignment <1>: Assignment Ops. (line 31)
+* operators, assignment, evaluation order: Assignment Ops. (line 110)
+* operators, decrement/increment: Increment Ops. (line 6)
+* operators, precedence of: Increment Ops. (line 60)
+* operators, comparison: Comparison Operators.
+ (line 6)
+* operators, short-circuit: Boolean Ops. (line 59)
+* operators, precedence of <1>: Precedence. (line 6)
* operators, input/output <5>: Precedence. (line 64)
* operators, input/output <6>: Precedence. (line 64)
* operators, input/output <7>: Precedence. (line 64)
-* operators, logical, See Boolean expressions: Boolean Ops. (line 6)
-* operators, precedence: Precedence. (line 6)
-* operators, precedence of: Increment Ops. (line 60)
-* operators, relational, See operators, comparison: Typing and Comparison.
- (line 9)
-* operators, short-circuit: Boolean Ops. (line 59)
-* operators, string: Concatenation. (line 9)
-* operators, string-matching: Regexp Usage. (line 19)
-* operators, string-matching, for buffers: GNU Regexp Operators.
- (line 51)
-* operators, word-boundary (gawk): GNU Regexp Operators.
- (line 66)
* option debugger command: Debugger Info. (line 57)
-* options, command-line: Options. (line 6)
-* options, command-line, end of: Options. (line 59)
* options, command-line, invoking awk: Command Line. (line 6)
-* options, command-line, processing: Getopt Function. (line 6)
-* options, deprecated: Obsolete. (line 6)
* options, long: Command Line. (line 13)
+* options, command-line: Options. (line 6)
* options, long <1>: Options. (line 6)
+* options, command-line, end of: Options. (line 59)
* options, printing list of: Options. (line 176)
+* options, deprecated: Obsolete. (line 6)
+* options, command-line, processing: Getopt Function. (line 6)
* or: Bitwise Functions. (line 50)
* OR bitwise operation: Bitwise Functions. (line 6)
* or Boolean-logic operator: Boolean Ops. (line 6)
@@ -35994,255 +36076,269 @@ Index
* order of evaluation, concatenation: Concatenation. (line 41)
* ORS variable: Output Separators. (line 20)
* ORS variable <1>: User-modified. (line 122)
-* output field separator, See OFS variable: Changing Fields. (line 64)
-* output record separator, See ORS variable: Output Separators.
- (line 20)
-* output redirection: Redirection. (line 6)
-* output wrapper: Output Wrappers. (line 6)
-* output, buffering: I/O Functions. (line 32)
-* output, buffering <1>: I/O Functions. (line 168)
-* output, duplicating into files: Tee Program. (line 6)
-* output, files, closing: Close Files And Pipes.
- (line 6)
+* output, records: Output Separators. (line 20)
* output, format specifier, OFMT: OFMT. (line 15)
* output, formatted: Printf. (line 6)
* output, pipes: Redirection. (line 57)
-* output, printing, See printing: Printing. (line 6)
-* output, records: Output Separators. (line 20)
* output, standard: Special FD. (line 6)
+* output, files, closing: Close Files And Pipes.
+ (line 6)
+* output, buffering: I/O Functions. (line 32)
+* output, buffering <1>: I/O Functions. (line 168)
+* output, duplicating into files: Tee Program. (line 6)
+* output field separator: Changing Fields. (line 64)
+* output record separator: Output Separators. (line 20)
+* output redirection: Redirection. (line 6)
+* output wrapper: Output Wrappers. (line 6)
* p debugger command (alias for print): Viewing And Changing Data.
(line 39)
* package, definition of: Global Namespace. (line 18)
* Papadopoulos, Panos: Contributors. (line 131)
* parent process ID of gawk process: Auto-set. (line 251)
-* parentheses (), in a profile: Profiling. (line 146)
* parentheses (), regexp operator: Regexp Operator Details.
(line 77)
+* parentheses (), in a profile: Profiling. (line 146)
* password file: Passwd Functions. (line 16)
* patsplit: String Functions. (line 297)
-* patterns: Patterns and Actions.
- (line 6)
-* patterns, Boolean expressions as: Expression Patterns. (line 39)
-* patterns, comparison expressions as: Expression Patterns. (line 14)
-* patterns, counts, in a profile: Profiling. (line 118)
* patterns, default: Very Simple. (line 35)
-* patterns, empty: Empty. (line 6)
+* patterns, regexp constants as: Regexp Usage. (line 6)
+* patterns: Patterns and Actions.
+ (line 6)
+* patterns, types of: Pattern Overview. (line 15)
+* patterns, regexp constants as <1>: Regexp Patterns. (line 6)
* patterns, expressions as: Expression Patterns. (line 6)
+* patterns, comparison expressions as: Expression Patterns. (line 14)
+* patterns, regexp constants as <2>: Expression Patterns. (line 34)
+* patterns, Boolean expressions as: Expression Patterns. (line 39)
* patterns, ranges in: Ranges. (line 6)
-* patterns, regexp constants as: Expression Patterns. (line 34)
-* patterns, regular expressions as: Regexp Usage. (line 6)
-* patterns, regular expressions as <1>: Regexp Patterns. (line 6)
-* patterns, types of: Pattern Overview. (line 15)
+* patterns, empty: Empty. (line 6)
+* patterns, counts, in a profile: Profiling. (line 118)
* pawk (profiling version of Brian Kernighan's awk): Other Versions.
(line 78)
* pawk, awk-like facilities for Python: Other Versions. (line 137)
-* PC operating systems, gawk on: PC Using. (line 6)
* PC operating systems, gawk on, installing: PC Installation. (line 6)
-* percent sign (%), % operator: Precedence. (line 54)
+* PC operating systems, gawk on: PC Using. (line 6)
* percent sign (%), %= operator: Assignment Ops. (line 129)
+* percent sign (%), % operator: Precedence. (line 54)
* percent sign (%), %= operator <1>: Precedence. (line 94)
* period (.), regexp operator: Regexp Operator Details.
(line 40)
* Perl: Future Extensions. (line 6)
* Peters, Arno: Contributors. (line 88)
* Peterson, Hal: Contributors. (line 40)
-* pipe, closing: Close Files And Pipes.
- (line 6)
* pipe, input: Getline/Pipe. (line 10)
* pipe, output: Redirection. (line 57)
+* pipe, closing: Close Files And Pipes.
+ (line 6)
* Pitts, Dave: Acknowledgments. (line 60)
* Pitts, Dave <1>: Maintainers. (line 14)
* platform running on: Auto-set. (line 224)
* Plauger, P.J.: Library Functions. (line 12)
* plug-in: Extension Intro. (line 6)
-* plus sign (+), + operator: Precedence. (line 51)
-* plus sign (+), + operator <1>: Precedence. (line 57)
+* plus sign (+), regexp operator: Regexp Operator Details.
+ (line 107)
+* plus sign (+), += operator: Assignment Ops. (line 81)
* plus sign (+), ++ operator: Increment Ops. (line 11)
* plus sign (+), ++ operator <1>: Increment Ops. (line 40)
* plus sign (+), ++ operator <2>: Precedence. (line 45)
-* plus sign (+), += operator: Assignment Ops. (line 81)
+* plus sign (+), + operator: Precedence. (line 51)
+* plus sign (+), + operator <1>: Precedence. (line 57)
* plus sign (+), += operator <1>: Precedence. (line 94)
-* plus sign (+), regexp operator: Regexp Operator Details.
- (line 107)
* pointers to functions: Indirect Calls. (line 6)
-* portability: Escape Sequences. (line 103)
* portability, #! (executable scripts): Executable Scripts. (line 33)
-* portability, ** operator and: Arithmetic Ops. (line 81)
-* portability, **= operator and: Assignment Ops. (line 144)
* portability, ARGV variable: Executable Scripts. (line 59)
* portability, backslash continuation and: Statements/Lines. (line 30)
+* portability, POSIXLY_CORRECT environment variable: Options. (line 397)
+* portability: Escape Sequences. (line 103)
* portability, backslash in escape sequences: Escape Sequences.
(line 108)
-* portability, close() function and: Close Files And Pipes.
- (line 81)
* portability, data files as single record: gawk split records.
(line 65)
-* portability, deleting array elements: Delete. (line 56)
-* portability, example programs: Library Functions. (line 42)
-* portability, functions, defining: Definition Syntax. (line 114)
-* portability, gawk: New Ports. (line 6)
-* portability, gettext library and: Explaining gettext. (line 11)
-* portability, internationalization and: I18N Portability. (line 6)
-* portability, length() function: String Functions. (line 180)
-* portability, new awk vs. old awk: Strings And Numbers. (line 56)
-* portability, next statement in user-defined functions: Function Caveats.
- (line 26)
* portability, NF variable, decrementing: Changing Fields. (line 115)
+* portability, close() function and: Close Files And Pipes.
+ (line 81)
+* portability, new awk vs. old awk: Strings And Numbers. (line 56)
+* portability, ** operator and: Arithmetic Ops. (line 81)
+* portability, **= operator and: Assignment Ops. (line 144)
* portability, operators: Increment Ops. (line 60)
* portability, operators, not in POSIX awk: Precedence. (line 97)
-* portability, POSIXLY_CORRECT environment variable: Options. (line 393)
+* portability, deleting array elements: Delete. (line 56)
+* portability, length() function: String Functions. (line 180)
* portability, substr() function: String Functions. (line 518)
-* portable object files: Explaining gettext. (line 37)
-* portable object files <1>: Translator i18n. (line 6)
-* portable object files, converting to message object files: I18N Example.
+* portability, functions, defining: Definition Syntax. (line 114)
+* portability, next statement in user-defined functions: Function Caveats.
+ (line 26)
+* portability, example programs: Library Functions. (line 42)
+* portability, gettext library and: Explaining gettext. (line 11)
+* portability, internationalization and: I18N Portability. (line 6)
+* portability, gawk: New Ports. (line 6)
+* portable object, files, generating: Options. (line 169)
+* portable object, template files: Explaining gettext. (line 31)
+* portable object, files: Explaining gettext. (line 37)
+* portable object, files <1>: Translator i18n. (line 6)
+* portable object, files, converting to message object files: I18N Example.
(line 80)
-* portable object files, generating: Options. (line 169)
-* portable object template files: Explaining gettext. (line 31)
* porting gawk: New Ports. (line 6)
* positional specifiers, printf statement: Format Modifiers. (line 13)
* positional specifiers, printf statement <1>: Printf Ordering.
(line 6)
* positional specifiers, printf statement, mixing with regular formats: Printf
Ordering.
(line 57)
+* POSIX, awk and: Preface. (line 21)
+* POSIX, programs, implementing in awk: Clones. (line 6)
+* POSIX, gawk extensions not included in: POSIX/GNU. (line 6)
* POSIX awk: This Manual. (line 14)
-* POSIX awk <1>: Assignment Ops. (line 138)
-* POSIX awk, ** operator and: Precedence. (line 97)
-* POSIX awk, **= operator and: Assignment Ops. (line 144)
-* POSIX awk, < operator and: Getline/File. (line 26)
-* POSIX awk, arithmetic operators and: Arithmetic Ops. (line 30)
+* POSIX awk, GNU long options and: Options. (line 15)
* POSIX awk, backslashes in string constants: Escape Sequences.
(line 108)
-* POSIX awk, BEGIN/END patterns: I/O And BEGIN/END. (line 15)
+* POSIX awk, period (.), using: Regexp Operator Details.
+ (line 47)
+* POSIX awk, regular expressions and: Regexp Operator Details.
+ (line 142)
+* POSIX awk, interval expressions in: Interval Expressions.
+ (line 6)
* POSIX awk, bracket expressions and: Bracket Expressions. (line 34)
* POSIX awk, bracket expressions and, character classes: Bracket Expressions.
(line 40)
* POSIX awk, bracket expressions and, character classes <1>: Bracket
Expressions.
(line 112)
+* POSIX awk, field separators and: Full Line Fields. (line 16)
+* POSIX awk, < operator and: Getline/File. (line 26)
+* POSIX awk, | I/O operator and: Getline/Pipe. (line 56)
+* POSIX awk, OFMT variable and: OFMT. (line 27)
+* POSIX awk, printf format strings and: Format Modifiers. (line 157)
+* POSIX awk, OFMT variable and <1>: Strings And Numbers. (line 56)
+* POSIX awk, arithmetic operators and: Arithmetic Ops. (line 30)
+* POSIX awk <1>: Assignment Ops. (line 138)
+* POSIX awk, **= operator and: Assignment Ops. (line 144)
+* POSIX awk, numeric strings and: Variable Typing. (line 67)
+* POSIX awk, ** operator and: Precedence. (line 97)
+* POSIX awk, BEGIN/END patterns: I/O And BEGIN/END. (line 15)
* POSIX awk, break statement and: Break Statement. (line 51)
-* POSIX awk, changes in awk versions: POSIX. (line 6)
* POSIX awk, continue statement and: Continue Statement. (line 44)
+* POSIX awk, next/nextfile statements and: Next Statement. (line 44)
* POSIX awk, CONVFMT variable and: User-modified. (line 30)
-* POSIX awk, date utility and: Time Functions. (line 255)
-* POSIX awk, field separators and: Full Line Fields. (line 16)
-* POSIX awk, function keyword in: Definition Syntax. (line 99)
-* POSIX awk, functions and, gsub()/sub(): Gory Details. (line 90)
* POSIX awk, functions and, length(): String Functions. (line 180)
-* POSIX awk, GNU long options and: Options. (line 15)
-* POSIX awk, interval expressions in: Interval Expressions.
- (line 6)
-* POSIX awk, next/nextfile statements and: Next Statement. (line 44)
-* POSIX awk, numeric strings and: Variable Typing. (line 67)
-* POSIX awk, OFMT variable and: OFMT. (line 27)
-* POSIX awk, OFMT variable and <1>: Strings And Numbers. (line 56)
-* POSIX awk, period (.), using: Regexp Operator Details.
- (line 47)
-* POSIX awk, printf format strings and: Format Modifiers. (line 157)
-* POSIX awk, regular expressions and: Regexp Operator Details.
- (line 142)
+* POSIX awk, functions and, gsub()/sub(): Gory Details. (line 90)
* POSIX awk, timestamps and: Time Functions. (line 6)
-* POSIX awk, | I/O operator and: Getline/Pipe. (line 56)
+* POSIX awk, date utility and: Time Functions. (line 255)
+* POSIX awk, function keyword in: Definition Syntax. (line 99)
+* POSIX awk, changes in awk versions: POSIX. (line 6)
* POSIX mode: Options. (line 283)
-* POSIX mode <1>: Options. (line 373)
-* POSIX, awk and: Preface. (line 21)
-* POSIX, gawk extensions not included in: POSIX/GNU. (line 6)
-* POSIX, programs, implementing in awk: Clones. (line 6)
-* POSIXLY_CORRECT environment variable: Options. (line 373)
+* POSIX mode <1>: Options. (line 377)
+* POSIX mode <2>: Regexp Operator Details.
+ (line 47)
+* POSIX mode <3>: Input Summary. (line 69)
+* POSIX mode <4>: Special Caveats. (line 9)
+* POSIX mode <5>: Close Files And Pipes.
+ (line 164)
+* POSIX mode <6>: Scalar Constants. (line 63)
+* POSIX mode <7>: Locale influences conversions.
+ (line 41)
+* POSIX mode <8>: POSIX String Comparison.
+ (line 12)
+* POSIX mode <9>: POSIX String Comparison.
+ (line 34)
+* POSIX mode <10>: String Functions. (line 385)
+* POSIX mode <11>: Controlling Array Traversal.
+ (line 226)
+* POSIX mode <12>: POSIX Floating Point Problems.
+ (line 83)
+* POSIX mode <13>: Feature History. (line 313)
+* POSIXLY_CORRECT environment variable: Options. (line 377)
* PREC variable: User-modified. (line 127)
-* precedence: Increment Ops. (line 60)
-* precedence <1>: Precedence. (line 6)
* precedence, regexp operators: Regexp Operator Details.
(line 137)
-* predefined variables: Built-in Variables. (line 6)
+* precedence: Increment Ops. (line 60)
+* precedence <1>: Precedence. (line 6)
* predefined variables, -v option, setting with: Options. (line 45)
-* predefined variables, conveying information: Auto-set. (line 6)
+* predefined variables: Built-in Variables. (line 6)
* predefined variables, user-modifiable: User-modified. (line 6)
+* predefined variables, conveying information: Auto-set. (line 6)
* pretty printer, interaction with namespaces: Namespace And Features.
(line 9)
* pretty printing: Options. (line 248)
* pretty printing <1>: Profiling. (line 222)
-* pretty-printing, profiling, difference with: Profiling. (line 229)
+* pretty printing, profiling, difference with: Profiling. (line 229)
* print debugger command: Viewing And Changing Data.
(line 39)
* print statement: Printing. (line 16)
-* print statement, BEGIN/END patterns and: I/O And BEGIN/END. (line 15)
* print statement, commas, omitting: Print Examples. (line 30)
-* print statement, I/O operators in: Precedence. (line 70)
* print statement, line continuations and: Print Examples. (line 75)
+* print statement, I/O operators in: Precedence. (line 70)
+* print statement, BEGIN/END patterns and: I/O And BEGIN/END. (line 15)
* print statement, OFMT variable and: User-modified. (line 116)
-* print statement, See Also redirection, of output: Redirection.
- (line 17)
* print statement, sprintf() function and: Round Function. (line 6)
* print variables, in debugger: Viewing And Changing Data.
(line 39)
* printf debugger command: Viewing And Changing Data.
(line 57)
* printf statement: Printing. (line 16)
-* printf statement <1>: Printf. (line 6)
* printf statement, columns, aligning: Print Examples. (line 69)
+* printf statement <1>: Printf. (line 6)
+* printf statement, syntax of: Basic Printf. (line 6)
* printf statement, format-control characters: Control Letters.
(line 6)
-* printf statement, I/O operators in: Precedence. (line 70)
* printf statement, modifiers: Format Modifiers. (line 6)
* printf statement, positional specifiers: Format Modifiers. (line 13)
+* printf statement, I/O operators in: Precedence. (line 70)
+* printf statement, sprintf() function and: Round Function. (line 6)
* printf statement, positional specifiers <1>: Printf Ordering.
(line 6)
* printf statement, positional specifiers, mixing with regular formats: Printf
Ordering.
(line 57)
-* printf statement, See Also redirection, of output: Redirection.
- (line 17)
-* printf statement, sprintf() function and: Round Function. (line 6)
-* printf statement, syntax of: Basic Printf. (line 6)
-* printing: Printing. (line 6)
-* printing messages from extensions: Printing Messages. (line 6)
* printing, list of options: Options. (line 176)
-* printing, mailing labels: Labels Program. (line 6)
-* printing, unduplicated lines of text: Uniq Program. (line 6)
+* printing: Printing. (line 6)
* printing, user information: Id Program. (line 6)
+* printing, unduplicated lines of text: Uniq Program. (line 6)
+* printing, mailing labels: Labels Program. (line 6)
+* printing, messages from extensions: Printing Messages. (line 6)
* private variables: Library Names. (line 11)
* process group ID of gawk process: Auto-set. (line 245)
* process ID of gawk process: Auto-set. (line 248)
* processes, two-way communications with: Two-way I/O. (line 6)
* processing data: Basic High Level. (line 6)
* PROCINFO array: Auto-set. (line 148)
+* PROCINFO array, platform running on: Auto-set. (line 224)
+* PROCINFO array, values of sorted_in: Controlling Scanning.
+ (line 26)
* PROCINFO array <1>: Time Functions. (line 49)
* PROCINFO array <2>: Passwd Functions. (line 6)
-* PROCINFO array, communications via ptys and: Two-way I/O. (line 114)
-* PROCINFO array, group membership and: Group Functions. (line 6)
* PROCINFO array, testing the field splitting: Passwd Functions.
(line 154)
+* PROCINFO array, group membership and: Group Functions. (line 6)
* PROCINFO array, user and group ID numbers and: Id Program. (line 15)
-* PROCINFO, values of sorted_in: Controlling Scanning.
- (line 26)
+* PROCINFO array, communications via ptys and: Two-way I/O. (line 114)
* profiler, interaction with namespaces: Namespace And Features.
(line 9)
* profiling awk programs: Profiling. (line 6)
* profiling awk programs, dynamically: Profiling. (line 179)
-* profiling, pretty-printing, difference with: Profiling. (line 229)
+* profiling, pretty printing, difference with: Profiling. (line 229)
* program identifiers: Auto-set. (line 193)
* program, definition of: Getting Started. (line 21)
-* programming conventions, --non-decimal-data option: Nondecimal Data.
- (line 35)
-* programming conventions, ARGC/ARGV variables: Auto-set. (line 35)
+* programming, concepts: Basic Concepts. (line 6)
+* programming, concepts <1>: Basic Concepts. (line 6)
+* programming, basic steps: Basic High Level. (line 18)
* programming conventions, exit statement: Exit Statement. (line 38)
-* programming conventions, function parameters: Return Statement.
- (line 44)
+* programming conventions, ARGC/ARGV variables: Auto-set. (line 35)
* programming conventions, functions, calling: Calling Built-in.
(line 10)
* programming conventions, functions, writing: Definition Syntax.
(line 71)
-* programming conventions, gawk extensions: Internal File Ops.
- (line 45)
+* programming conventions, function parameters: Return Statement.
+ (line 44)
* programming conventions, private variable names: Library Names.
(line 23)
+* programming conventions, --non-decimal-data option: Nondecimal Data.
+ (line 35)
+* programming conventions, gawk extensions: Internal File Ops.
+ (line 45)
* programming language, recipe for: History. (line 6)
-* programming languages, Ada: Glossary. (line 11)
* programming languages, data-driven vs. procedural: Getting Started.
(line 12)
* programming languages, Go: Other Versions. (line 113)
+* programming languages, Ada: Glossary. (line 11)
* programming languages, Java: Glossary. (line 466)
-* programming, basic steps: Basic High Level. (line 18)
-* programming, concepts: Basic Concepts. (line 6)
-* programming, concepts <1>: Basic Concepts. (line 6)
* pwcat program: Passwd Functions. (line 23)
* q debugger command (alias for quit): Miscellaneous Debugger Commands.
(line 100)
@@ -36250,17 +36346,17 @@ Index
* qualified name, definition of: Qualified Names. (line 6)
* qualified name, use of: Qualified Names. (line 17)
* Quanstrom, Erik: Alarm Program. (line 8)
-* question mark (?), ?: operator: Precedence. (line 91)
* question mark (?), regexp operator: Regexp Operator Details.
(line 113)
* question mark (?), regexp operator <1>: GNU Regexp Operators.
(line 62)
+* question mark (?), ?: operator: Precedence. (line 91)
* QuikTrim Awk: Other Versions. (line 147)
* quit debugger command: Miscellaneous Debugger Commands.
(line 100)
* QUIT signal (MS-Windows): Profiling. (line 214)
-* quoting, for small awk programs: Comments. (line 27)
* quoting, in gawk command lines: Long. (line 26)
+* quoting, for small awk programs: Comments. (line 27)
* quoting, in gawk command lines, tricks for: Quoting. (line 91)
* r debugger command (alias for run): Debugger Execution Control.
(line 62)
@@ -36268,11 +36364,11 @@ Index
* Ramey, Chet: Acknowledgments. (line 60)
* Ramey, Chet <1>: General Data Types. (line 6)
* rand: Numeric Functions. (line 34)
-* random numbers, Cliff: Cliff Random Function.
- (line 6)
* random numbers, rand()/srand() functions: Numeric Functions.
(line 34)
* random numbers, seed of: Numeric Functions. (line 64)
+* random numbers, Cliff: Cliff Random Function.
+ (line 6)
* range expressions (regexps): Bracket Expressions. (line 6)
* range patterns: Ranges. (line 6)
* range patterns, line continuation and: Ranges. (line 64)
@@ -36292,75 +36388,71 @@ Index
* reading input files: Reading Files. (line 6)
* recipe for a programming language: History. (line 6)
* record separators: awk split records. (line 6)
-* record separators <1>: User-modified. (line 136)
-* record separators, changing: awk split records. (line 85)
* record separators, newlines as: awk split records. (line 12)
+* record separators, changing: awk split records. (line 85)
* record separators, regular expressions as: awk split records.
(line 131)
* record separators, with multiline records: Multiple Line. (line 10)
+* record separators <1>: User-modified. (line 136)
* records: Reading Files. (line 14)
-* records <1>: Basic High Level. (line 62)
-* records, multiline: Multiple Line. (line 6)
-* records, printing: Print. (line 22)
* records, splitting input into: Records. (line 6)
* records, terminating: awk split records. (line 131)
* records, treating files as: gawk split records. (line 92)
+* records, multiline: Multiple Line. (line 6)
+* records, printing: Print. (line 22)
+* records <1>: Basic High Level. (line 62)
* recursive functions: Definition Syntax. (line 89)
* redirect gawk output, in debugger: Debugger Info. (line 73)
-* redirection of input: Getline/File. (line 6)
-* redirection of output: Redirection. (line 6)
-* redirection on VMS: VMS Running. (line 64)
+* redirection, of input: Getline/File. (line 6)
+* redirection, of output: Redirection. (line 6)
+* redirection, on VMS: VMS Running. (line 64)
* reference counting, sorting arrays: Array Sorting Functions.
(line 77)
* regexp: Regexp. (line 6)
* regexp constants: Regexp Usage. (line 57)
+* regexp constants, slashes vs. quotes: Computed Regexps. (line 30)
+* regexp constants, vs. string constants: Computed Regexps. (line 40)
* regexp constants <1>: Regexp Constants. (line 6)
+* regexp constants, in gawk: Standard Regexp Constants.
+ (line 28)
+* regexp constants, /=.../, /= operator and: Assignment Ops. (line 149)
* regexp constants <2>: Comparison Operators.
(line 103)
-* regexp constants, /=.../, /= operator and: Assignment Ops. (line 149)
* regexp constants, as patterns: Expression Patterns. (line 34)
-* regexp constants, in gawk: Standard Regexp Constants.
- (line 28)
-* regexp constants, slashes vs. quotes: Computed Regexps. (line 30)
-* regexp constants, vs. string constants: Computed Regexps. (line 40)
-* register extension: Registration Functions.
+* register loadable extension: Registration Functions.
(line 6)
+* regular expressions, interval expressions and: Options. (line 304)
* regular expressions: Regexp. (line 6)
+* regular expressions, as patterns: Regexp Usage. (line 6)
+* regular expressions, operators: Regexp Usage. (line 19)
+* regular expressions, operators <1>: Regexp Operators. (line 6)
* regular expressions, anchors in: Regexp Operator Details.
(line 18)
-* regular expressions, as field separators: Field Separators. (line 50)
-* regular expressions, as field separators <1>: Regexp Field Splitting.
+* regular expressions, operators, precedence of: Regexp Operator Details.
+ (line 137)
+* regular expressions, leftmost longest match: Leftmost Longest.
(line 6)
-* regular expressions, as patterns: Regexp Usage. (line 6)
-* regular expressions, as patterns <1>: Regexp Patterns. (line 6)
-* regular expressions, as record separators: awk split records.
- (line 131)
-* regular expressions, case sensitivity: Case-sensitivity. (line 6)
-* regular expressions, case sensitivity <1>: User-modified. (line 79)
* regular expressions, computed: Computed Regexps. (line 6)
-* regular expressions, constants, See regexp constants: Regexp Usage.
- (line 57)
* regular expressions, dynamic: Computed Regexps. (line 6)
* regular expressions, dynamic, with embedded newlines: Computed Regexps.
(line 60)
-* regular expressions, gawk, command-line options: GNU Regexp Operators.
- (line 73)
-* regular expressions, interval expressions and: Options. (line 304)
-* regular expressions, leftmost longest match: Leftmost Longest.
+* regular expressions, operators, gawk: GNU Regexp Operators.
(line 6)
-* regular expressions, operators: Regexp Usage. (line 19)
-* regular expressions, operators <1>: Regexp Operators. (line 6)
-* regular expressions, operators, for buffers: GNU Regexp Operators.
- (line 51)
* regular expressions, operators, for words: GNU Regexp Operators.
(line 6)
-* regular expressions, operators, gawk: GNU Regexp Operators.
+* regular expressions, operators, for buffers: GNU Regexp Operators.
+ (line 51)
+* regular expressions, gawk, command-line options: GNU Regexp Operators.
+ (line 73)
+* regular expressions, case sensitivity: Case-sensitivity. (line 6)
+* regular expressions, as record separators: awk split records.
+ (line 131)
+* regular expressions, as field separators: Field Separators. (line 50)
+* regular expressions, as field separators <1>: Regexp Field Splitting.
(line 6)
-* regular expressions, operators, precedence of: Regexp Operator Details.
- (line 137)
+* regular expressions, as patterns <1>: Regexp Patterns. (line 6)
+* regular expressions, case sensitivity <1>: User-modified. (line 79)
* regular expressions, searching for: Egrep Program. (line 6)
-* relational operators, See comparison operators: Typing and Comparison.
- (line 9)
* replace in string: String Functions. (line 414)
* retrying input: Retrying Input. (line 6)
* return debugger command: Debugger Execution Control.
@@ -36374,35 +36466,34 @@ Index
* revtwoway extension: Extension Sample Rev2way.
(line 12)
* rewind() user-defined function: Rewind Function. (line 15)
-* right angle bracket (>), > operator: Comparison Operators.
- (line 11)
-* right angle bracket (>), > operator <1>: Precedence. (line 64)
* right angle bracket (>), > operator (I/O): Redirection. (line 22)
+* right angle bracket (>), >> operator (I/O): Redirection. (line 50)
* right angle bracket (>), >= operator: Comparison Operators.
(line 11)
+* right angle bracket (>), > operator: Comparison Operators.
+ (line 11)
* right angle bracket (>), >= operator <1>: Precedence. (line 64)
-* right angle bracket (>), >> operator (I/O): Redirection. (line 50)
+* right angle bracket (>), > operator <1>: Precedence. (line 64)
* right angle bracket (>), >> operator (I/O) <1>: Precedence. (line 64)
-* right shift: Bitwise Functions. (line 54)
* right shift, bitwise: Bitwise Functions. (line 32)
* Ritchie, Dennis: Basic Data Typing. (line 54)
* RLENGTH variable: Auto-set. (line 335)
* RLENGTH variable, match() function and: String Functions. (line 228)
+* Robbins, Miriam: Acknowledgments. (line 94)
+* Robbins, Jean: Acknowledgments. (line 94)
+* Robbins, Harry: Acknowledgments. (line 94)
* Robbins, Arnold: Command Line Field Separator.
(line 71)
+* Robbins, Bill: Getline/Pipe. (line 40)
+* Robbins, Miriam <1>: Getline/Pipe. (line 40)
* Robbins, Arnold <1>: Getline/Pipe. (line 40)
* Robbins, Arnold <2>: Passwd Functions. (line 90)
+* Robbins, Miriam <2>: Passwd Functions. (line 90)
* Robbins, Arnold <3>: Alarm Program. (line 6)
* Robbins, Arnold <4>: General Data Types. (line 6)
* Robbins, Arnold <5>: Contributors. (line 152)
* Robbins, Arnold <6>: Maintainers. (line 14)
* Robbins, Arnold <7>: Future Extensions. (line 6)
-* Robbins, Bill: Getline/Pipe. (line 40)
-* Robbins, Harry: Acknowledgments. (line 94)
-* Robbins, Jean: Acknowledgments. (line 94)
-* Robbins, Miriam: Acknowledgments. (line 94)
-* Robbins, Miriam <1>: Getline/Pipe. (line 40)
-* Robbins, Miriam <2>: Passwd Functions. (line 90)
* Rommel, Kai Uwe: Contributors. (line 43)
* round to nearest integer: Numeric Functions. (line 24)
* round() user-defined function: Round Function. (line 16)
@@ -36411,8 +36502,8 @@ Index
* ROUNDMODE variable <1>: Setting the rounding mode.
(line 6)
* RS variable: awk split records. (line 12)
-* RS variable <1>: User-modified. (line 136)
* RS variable, multiline records and: Multiple Line. (line 17)
+* RS variable <1>: User-modified. (line 136)
* rshift: Bitwise Functions. (line 54)
* RSTART variable: Auto-set. (line 341)
* RSTART variable, match() function and: String Functions. (line 228)
@@ -36442,14 +36533,14 @@ Index
* Schreiber, Bert: Acknowledgments. (line 38)
* Schreiber, Rita: Acknowledgments. (line 38)
* search and replace in strings: String Functions. (line 89)
-* search in string: String Functions. (line 156)
-* search paths: Programs Exercises. (line 70)
-* search paths <1>: PC Using. (line 13)
-* search paths <2>: VMS Running. (line 57)
-* search paths, for loadable extensions: AWKLIBPATH Variable. (line 6)
+* search for substring: String Functions. (line 156)
* search paths, for source files: AWKPATH Variable. (line 6)
+* search paths, for loadable extensions: AWKLIBPATH Variable. (line 6)
+* search paths: Programs Exercises. (line 70)
* search paths, for source files <1>: Programs Exercises. (line 70)
+* search paths <1>: PC Using. (line 13)
* search paths, for source files <2>: PC Using. (line 13)
+* search paths <2>: VMS Running. (line 57)
* search paths, for source files <3>: VMS Running. (line 57)
* searching, files for regular expressions: Egrep Program. (line 6)
* searching, for words: Dupword Program. (line 6)
@@ -36457,24 +36548,26 @@ Index
* sed utility <1>: Simple Sed. (line 6)
* sed utility <2>: Glossary. (line 16)
* seeding random number generator: Numeric Functions. (line 64)
-* semicolon (;), AWKPATH variable and: PC Using. (line 13)
-* semicolon (;), separating rules: Statements/Lines. (line 90)
* semicolon (;), separating statements in actions: Statements/Lines.
(line 90)
+* semicolon (;), separating rules: Statements/Lines. (line 90)
* semicolon (;), separating statements in actions <1>: Action Overview.
(line 19)
* semicolon (;), separating statements in actions <2>: Statements.
(line 10)
-* separators, field: User-modified. (line 53)
-* separators, field <1>: User-modified. (line 116)
-* separators, field, FIELDWIDTHS variable and: User-modified. (line 37)
-* separators, field, FPAT variable and: User-modified. (line 46)
+* semicolon (;), AWKPATH variable and: PC Using. (line 13)
* separators, for records: awk split records. (line 6)
* separators, for records <1>: awk split records. (line 85)
-* separators, for records <2>: User-modified. (line 136)
* separators, for records, regular expressions as: awk split records.
(line 131)
+* separators, field, FS variable and: Default Field Splitting.
+ (line 6)
* separators, for statements in actions: Action Overview. (line 19)
+* separators, field, FIELDWIDTHS variable and: User-modified. (line 37)
+* separators, field, FPAT variable and: User-modified. (line 46)
+* separators, field: User-modified. (line 53)
+* separators, field <1>: User-modified. (line 116)
+* separators, for records <2>: User-modified. (line 136)
* separators, subscript: User-modified. (line 149)
* set breakpoint: Breakpoint Control. (line 11)
* set debugger command: Viewing And Changing Data.
@@ -36483,81 +36576,92 @@ Index
* set watchpoint: Viewing And Changing Data.
(line 70)
* shadowing of variable values: Definition Syntax. (line 77)
+* shell function, gawkpath_default: Shell Startup Files. (line 12)
+* shell function, gawkpath_prepend: Shell Startup Files. (line 15)
+* shell function, gawkpath_append: Shell Startup Files. (line 19)
+* shell function, gawklibpath_default: Shell Startup Files. (line 22)
+* shell function, gawklibpath_prepend: Shell Startup Files. (line 25)
+* shell function, gawklibpath_append: Shell Startup Files. (line 29)
* shell quoting, rules for: Quoting. (line 6)
-* shells, piping commands into: Redirection. (line 136)
-* shells, quoting: Using Shell Variables.
- (line 12)
-* shells, quoting, rules for: Quoting. (line 18)
* shells, scripts: One-shot. (line 22)
+* shells, quoting, rules for: Quoting. (line 18)
* shells, sea: Undocumented. (line 9)
+* shells, piping commands into: Redirection. (line 136)
* shells, variables: Using Shell Variables.
(line 6)
+* shells, quoting: Using Shell Variables.
+ (line 12)
* shift, bitwise: Bitwise Functions. (line 32)
* short-circuit operators: Boolean Ops. (line 59)
-* show all source files, in debugger: Debugger Info. (line 45)
-* show breakpoints: Debugger Info. (line 21)
-* show function arguments, in debugger: Debugger Info. (line 18)
-* show local variables, in debugger: Debugger Info. (line 34)
-* show name of current source file, in debugger: Debugger Info.
+* show in debugger, function arguments: Debugger Info. (line 18)
+* show in debugger, breakpoints: Debugger Info. (line 21)
+* show in debugger, local variables: Debugger Info. (line 34)
+* show in debugger, name of current source file: Debugger Info.
(line 37)
-* show watchpoints: Debugger Info. (line 51)
+* show in debugger, all source files: Debugger Info. (line 45)
+* show in debugger, watchpoints: Debugger Info. (line 51)
* si debugger command (alias for stepi): Debugger Execution Control.
(line 75)
+* side effects, FILENAME variable: Getline Notes. (line 19)
* side effects: Concatenation. (line 41)
+* side effects, assignment expressions: Assignment Ops. (line 22)
* side effects <1>: Increment Ops. (line 11)
+* side effects, decrement/increment operators: Increment Ops. (line 11)
* side effects <2>: Increment Ops. (line 75)
-* side effects, array indexing: Reference to Elements.
- (line 43)
-* side effects, asort() function: Array Sorting Functions.
- (line 24)
-* side effects, assignment expressions: Assignment Ops. (line 22)
* side effects, Boolean operators: Boolean Ops. (line 30)
* side effects, conditional expressions: Conditional Exp. (line 22)
-* side effects, decrement/increment operators: Increment Ops. (line 11)
-* side effects, FILENAME variable: Getline Notes. (line 19)
* side effects, function calls: Function Calls. (line 57)
* side effects, statements: Action Overview. (line 32)
-* sidebar, A Constant's Base Does Not Affect Its Value: Nondecimal-numbers.
- (line 63)
+* side effects, array indexing: Reference to Elements.
+ (line 43)
+* side effects, match() function: String Functions. (line 228)
+* side effects, sub() function: String Functions. (line 468)
+* side effects, gsub() function: String Functions. (line 468)
+* side effects, asort() function: Array Sorting Functions.
+ (line 24)
+* side effects, asorti() function: Array Sorting Functions.
+ (line 24)
+* sidebar, Recipe for a Programming Language: History. (line 6)
+* sidebar, Understanding #!: Executable Scripts. (line 31)
* sidebar, Backslash Before Regular Characters: Escape Sequences.
(line 106)
-* sidebar, Beware The Smoke and Mirrors!: Bitwise Functions. (line 127)
-* sidebar, Changing FS Does Not Affect the Fields: Full Line Fields.
- (line 14)
-* sidebar, Changing NR and FNR: Auto-set. (line 407)
-* sidebar, Controlling Output Buffering with system(): I/O Functions.
- (line 166)
* sidebar, Escape Sequences for Metacharacters: Escape Sequences.
(line 138)
+* sidebar, Using \n in Bracket Expressions of Dynamic Regexps: Computed
Regexps.
+ (line 58)
+* sidebar, RS = "\0" Is Not Portable: gawk split records. (line 63)
+* sidebar, Understanding $0: Changing Fields. (line 135)
+* sidebar, Changing FS Does Not Affect the Fields: Full Line Fields.
+ (line 14)
* sidebar, FS and IGNORECASE: Field Splitting Summary.
(line 37)
-* sidebar, Interactive Versus Noninteractive Buffering: I/O Functions.
- (line 74)
-* sidebar, Matching the Null String: String Functions. (line 540)
-* sidebar, Operator Evaluation Order: Increment Ops. (line 58)
* sidebar, Piping into sh: Redirection. (line 134)
+* sidebar, Using close()'s Return Value: Close Files And Pipes.
+ (line 130)
+* sidebar, A Constant's Base Does Not Affect Its Value: Nondecimal-numbers.
+ (line 63)
* sidebar, Pre-POSIX awk Used OFMT for String Conversion: Strings And Numbers.
(line 54)
-* sidebar, Recipe for a Programming Language: History. (line 6)
-* sidebar, Rounding Modes and Conversion: Setting the rounding mode.
- (line 65)
-* sidebar, RS = "\0" Is Not Portable: gawk split records. (line 63)
-* sidebar, So Why Does gawk Have BEGINFILE and ENDFILE?: Filetrans Function.
- (line 83)
* sidebar, Syntactic Ambiguities Between /= and Regular Expressions:
Assignment Ops.
(line 147)
-* sidebar, Understanding #!: Executable Scripts. (line 31)
-* sidebar, Understanding $0: Changing Fields. (line 135)
-* sidebar, Using close()'s Return Value: Close Files And Pipes.
- (line 130)
-* sidebar, Using \n in Bracket Expressions of Dynamic Regexps: Computed
Regexps.
- (line 58)
+* sidebar, Operator Evaluation Order: Increment Ops. (line 58)
+* sidebar, Changing NR and FNR: Auto-set. (line 407)
+* sidebar, Matching the Null String: String Functions. (line 540)
+* sidebar, Interactive Versus Noninteractive Buffering: I/O Functions.
+ (line 74)
+* sidebar, Controlling Output Buffering with system(): I/O Functions.
+ (line 166)
+* sidebar, Beware The Smoke and Mirrors!: Bitwise Functions. (line 127)
+* sidebar, So Why Does gawk Have BEGINFILE and ENDFILE?: Filetrans Function.
+ (line 83)
+* sidebar, Rounding Modes and Conversion: Setting the rounding mode.
+ (line 65)
* SIGHUP signal, for dynamic profiling: Profiling. (line 211)
* SIGINT signal (MS-Windows): Profiling. (line 214)
+* signals, USR1/SIGUSR1, for profiling: Profiling. (line 188)
* signals, HUP/SIGHUP, for profiling: Profiling. (line 211)
* signals, INT/SIGINT (MS-Windows): Profiling. (line 214)
* signals, QUIT/SIGQUIT (MS-Windows): Profiling. (line 214)
-* signals, USR1/SIGUSR1, for profiling: Profiling. (line 188)
* signature program: Signature Program. (line 6)
* SIGQUIT signal (MS-Windows): Profiling. (line 214)
* SIGUSR1 signal, for dynamic profiling: Profiling. (line 188)
@@ -36566,9 +36670,9 @@ Index
* sin: Numeric Functions. (line 75)
* sine: Numeric Functions. (line 75)
* single quote ('): One-shot. (line 15)
-* single quote (') in gawk command lines: Long. (line 35)
-* single quote ('), in shell commands: Quoting. (line 48)
+* single quote ('), in gawk command lines: Long. (line 35)
* single quote ('), vs. apostrophe: Comments. (line 27)
+* single quote ('), in shell commands: Quoting. (line 48)
* single quote ('), with double quotes: Quoting. (line 73)
* single records, treating files as: gawk split records. (line 92)
* single-character fields: Single Character Fields.
@@ -36589,22 +36693,24 @@ Index
* sort utility, coprocesses and: Two-way I/O. (line 66)
* sorting characters in different languages: Explaining gettext.
(line 94)
-* source code, awka: Other Versions. (line 64)
+* source code, mixing: Options. (line 121)
+* source code, gawk: Gawk Distribution. (line 6)
* source code, Brian Kernighan's awk: Other Versions. (line 13)
+* source code, mawk: Other Versions. (line 39)
+* source code, awka: Other Versions. (line 64)
+* source code, pawk (profiling version of Brian Kernighan's awk): Other
Versions.
+ (line 78)
* source code, BusyBox Awk: Other Versions. (line 88)
-* source code, embeddable awk interpreter: Other Versions. (line 132)
-* source code, gawk: Gawk Distribution. (line 6)
-* source code, goawk: Other Versions. (line 113)
+* source code, Solaris awk: Other Versions. (line 96)
* source code, Illumos awk: Other Versions. (line 105)
+* source code, goawk: Other Versions. (line 113)
* source code, jawk: Other Versions. (line 121)
* source code, libmawk: Other Versions. (line 129)
-* source code, mawk: Other Versions. (line 39)
-* source code, mixing: Options. (line 121)
-* source code, pawk: Other Versions. (line 78)
+* source code, embeddable awk interpreter: Other Versions. (line 132)
* source code, pawk (Python version): Other Versions. (line 137)
* source code, QSE awk: Other Versions. (line 143)
* source code, QuikTrim Awk: Other Versions. (line 147)
-* source code, Solaris awk: Other Versions. (line 96)
+* source file, show in debugger: Debugger Info. (line 37)
* source files, search path for: Programs Exercises. (line 70)
* sparse arrays: Array Intro. (line 76)
* Spencer, Henry: Glossary. (line 16)
@@ -36634,9 +36740,9 @@ Index
* starting the debugger: Debugger Invocation. (line 6)
* stat() extension function: Extension Sample File Functions.
(line 18)
-* statements, compound, control statements and: Statements. (line 10)
-* statements, control, in actions: Statements. (line 6)
* statements, multiple: Statements/Lines. (line 90)
+* statements, control, in actions: Statements. (line 6)
+* statements, compound, control statements and: Statements. (line 10)
* step debugger command: Debugger Execution Control.
(line 68)
* stepi debugger command: Debugger Execution Control.
@@ -36646,31 +36752,31 @@ Index
* stream editors: Full Line Fields. (line 22)
* stream editors <1>: Simple Sed. (line 6)
* strftime: Time Functions. (line 50)
-* string constants: Scalar Constants. (line 15)
-* string constants, vs. regexp constants: Computed Regexps. (line 40)
-* string extraction (internationalization): String Extraction.
+* string, constants, vs. regexp constants: Computed Regexps. (line 40)
+* string, constants: Scalar Constants. (line 15)
+* string, operators: Concatenation. (line 9)
+* string, length: String Functions. (line 171)
+* string, regular expression match of: String Functions. (line 211)
+* string, extraction (internationalization): String Extraction.
(line 6)
-* string length: String Functions. (line 171)
-* string operators: Concatenation. (line 9)
-* string, regular expression match: String Functions. (line 211)
* string-manipulation functions: String Functions. (line 6)
* string-matching operators: Regexp Usage. (line 19)
* string-translation functions: I18N Functions. (line 6)
-* strings splitting, example: String Functions. (line 337)
+* strings, empty: awk split records. (line 121)
+* strings, null: Regexp Field Splitting.
+ (line 43)
+* strings, length limitations: Scalar Constants. (line 20)
* strings, continuation across lines: Scalar Constants. (line 53)
* strings, converting: Strings And Numbers. (line 6)
-* strings, converting <1>: Bitwise Functions. (line 109)
-* strings, converting letter case: String Functions. (line 528)
+* strings, numeric: Variable Typing. (line 67)
* strings, converting, numbers to: User-modified. (line 30)
* strings, converting, numbers to <1>: User-modified. (line 107)
-* strings, empty, See null strings: awk split records. (line 121)
-* strings, extracting: String Extraction. (line 6)
-* strings, for localization: Programmer i18n. (line 13)
-* strings, length limitations: Scalar Constants. (line 20)
+* strings, splitting, example: String Functions. (line 337)
+* strings, converting letter case: String Functions. (line 528)
+* strings, converting <1>: Bitwise Functions. (line 109)
* strings, merging arrays into: Join Function. (line 6)
-* strings, null: Regexp Field Splitting.
- (line 43)
-* strings, numeric: Variable Typing. (line 67)
+* strings, for localization: Programmer i18n. (line 13)
+* strings, extracting: String Extraction. (line 6)
* strtonum: String Functions. (line 396)
* strtonum() function (gawk), --non-decimal-data option and: Nondecimal Data.
(line 35)
@@ -36680,13 +36786,13 @@ Index
* sub() function, arguments of: String Functions. (line 468)
* sub() function, escape processing: Gory Details. (line 6)
* subscript separators: User-modified. (line 149)
-* subscripts in arrays, multidimensional: Multidimensional. (line 10)
-* subscripts in arrays, multidimensional, scanning: Multiscanning.
- (line 11)
* subscripts in arrays, numbers as: Numeric Array Subscripts.
(line 6)
* subscripts in arrays, uninitialized variables as: Uninitialized Subscripts.
(line 6)
+* subscripts in arrays, multidimensional: Multidimensional. (line 10)
+* subscripts in arrays, multidimensional, scanning: Multiscanning.
+ (line 11)
* SUBSEP variable: User-modified. (line 149)
* SUBSEP variable, multidimensional arrays and: Multidimensional.
(line 16)
@@ -36704,8 +36810,8 @@ Index
* t debugger command (alias for tbreak): Breakpoint Control. (line 90)
* tbreak debugger command: Breakpoint Control. (line 90)
* Tcl: Library Names. (line 58)
-* TCP/IP: TCP/IP Networking. (line 6)
* TCP/IP, support for: Special Network. (line 6)
+* TCP/IP: TCP/IP Networking. (line 6)
* tee utility: Tee Program. (line 6)
* tee.awk program: Tee Program. (line 26)
* temporary breakpoint: Breakpoint Control. (line 90)
@@ -36714,16 +36820,16 @@ Index
* testext extension: Extension Sample API Tests.
(line 6)
* Texinfo: Conventions. (line 6)
+* Texinfo, chapter beginnings in files: Regexp Operator Details.
+ (line 18)
* Texinfo <1>: Library Functions. (line 33)
* Texinfo <2>: Dupword Program. (line 17)
+* Texinfo, extracting programs from source files: Extract Program.
+ (line 6)
* Texinfo <3>: Extract Program. (line 12)
* Texinfo <4>: Distribution contents.
(line 83)
* Texinfo <5>: Adding Code. (line 100)
-* Texinfo, chapter beginnings in files: Regexp Operator Details.
- (line 18)
-* Texinfo, extracting programs from source files: Extract Program.
- (line 6)
* text, printing: Print. (line 22)
* text, printing, unduplicated lines of: Uniq Program. (line 6)
* TEXTDOMAIN variable: User-modified. (line 155)
@@ -36741,12 +36847,12 @@ Index
(line 98)
* tilde (~), ~ operator <6>: Precedence. (line 79)
* tilde (~), ~ operator <7>: Expression Patterns. (line 24)
-* time functions: Time Functions. (line 6)
-* time, alarm clock example program: Alarm Program. (line 11)
-* time, localization and: Explaining gettext. (line 112)
+* time, retrieving: Time Functions. (line 17)
* time, managing: Getlocaltime Function.
(line 6)
-* time, retrieving: Time Functions. (line 17)
+* time, alarm clock example program: Alarm Program. (line 11)
+* time, localization and: Explaining gettext. (line 112)
+* time functions: Time Functions. (line 6)
* timeout, reading input: Read Timeout. (line 6)
* timestamps: Time Functions. (line 6)
* timestamps <1>: Time Functions. (line 68)
@@ -36762,56 +36868,57 @@ Index
* translate string: I18N Functions. (line 21)
* translate.awk program: Translate Program. (line 55)
* treating files, as single records: gawk split records. (line 92)
+* troubleshooting, typographical errors, global variables: Options.
+ (line 103)
* troubleshooting, --non-decimal-data option: Options. (line 236)
-* troubleshooting, == operator: Comparison Operators.
- (line 37)
-* troubleshooting, awk uses FS not IFS: Field Separators. (line 29)
* troubleshooting, backslash before nonspecial character: Escape Sequences.
(line 108)
-* troubleshooting, division: Arithmetic Ops. (line 44)
+* troubleshooting, regexp constants vs. string constants: Computed Regexps.
+ (line 40)
+* troubleshooting, awk uses FS not IFS: Field Separators. (line 29)
* troubleshooting, fatal errors, field widths, specifying: Fixed width data.
(line 17)
+* troubleshooting, print statement, omitting commas: Print Examples.
+ (line 30)
* troubleshooting, fatal errors, printf format strings: Format Modifiers.
(line 157)
-* troubleshooting, fflush() function: I/O Functions. (line 63)
+* troubleshooting, printing: Redirection. (line 112)
+* troubleshooting, quotes with file names: Special FD. (line 62)
+* troubleshooting, division: Arithmetic Ops. (line 44)
+* troubleshooting, string concatenation: Concatenation. (line 27)
+* troubleshooting, == operator: Comparison Operators.
+ (line 37)
* troubleshooting, function call syntax: Function Calls. (line 30)
-* troubleshooting, gawk: Compatibility Mode. (line 6)
-* troubleshooting, gawk, bug reports: Bugs. (line 9)
* troubleshooting, gawk, fatal errors, function arguments: Calling Built-in.
(line 16)
-* troubleshooting, getline function: File Checking. (line 25)
-* troubleshooting, gsub()/sub() functions: String Functions. (line 478)
* troubleshooting, match() function: String Functions. (line 292)
-* troubleshooting, print statement, omitting commas: Print Examples.
- (line 30)
-* troubleshooting, printing: Redirection. (line 112)
-* troubleshooting, quotes with file names: Special FD. (line 62)
-* troubleshooting, readable data files: File Checking. (line 6)
-* troubleshooting, regexp constants vs. string constants: Computed Regexps.
- (line 40)
-* troubleshooting, string concatenation: Concatenation. (line 27)
+* troubleshooting, gsub()/sub() functions: String Functions. (line 478)
* troubleshooting, substr() function: String Functions. (line 505)
+* troubleshooting, fflush() function: I/O Functions. (line 63)
* troubleshooting, system() function: I/O Functions. (line 128)
-* troubleshooting, typographical errors, global variables: Options.
- (line 103)
+* troubleshooting, readable data files: File Checking. (line 6)
+* troubleshooting, getline command: File Checking. (line 25)
+* troubleshooting, gawk, bug reports: Bugs. (line 9)
+* troubleshooting, gawk: Compatibility Mode. (line 6)
* true, logical: Truth Values. (line 6)
* Trueman, David: History. (line 30)
* Trueman, David <1>: Acknowledgments. (line 47)
* Trueman, David <2>: Contributors. (line 31)
* trunc-mod operation: Arithmetic Ops. (line 66)
* truth values: Truth Values. (line 6)
-* type conversion: Strings And Numbers. (line 21)
-* type, of variable: Type Functions. (line 14)
+* type, conversion: Strings And Numbers. (line 21)
+* type, of variable, typeof() function (gawk): Type Functions.
+ (line 14)
* typeof: Type Functions. (line 14)
* u debugger command (alias for until): Debugger Execution Control.
(line 82)
* unassigned array elements: Reference to Elements.
(line 18)
* undefined functions: Function Caveats. (line 6)
-* underscore (_), C macro: Explaining gettext. (line 71)
* underscore (_), in names of private variables: Library Names.
(line 29)
-* underscore (_), translatable string: Programmer i18n. (line 69)
+* underscore (_), C macro: Explaining gettext. (line 71)
+* underscore (_), translatable strings: Programmer i18n. (line 69)
* undisplay debugger command: Viewing And Changing Data.
(line 83)
* undocumented features: Undocumented. (line 6)
@@ -36822,14 +36929,14 @@ Index
(line 6)
* uniq utility: Uniq Program. (line 6)
* uniq.awk program: Uniq Program. (line 65)
+* Unix, awk scripts and: Executable Scripts. (line 6)
* Unix: Glossary. (line 746)
* Unix awk, backslashes in escape sequences: Escape Sequences.
(line 121)
-* Unix awk, close() function and: Close Files And Pipes.
- (line 132)
* Unix awk, password files, field separators and: Command Line Field Separator.
(line 62)
-* Unix, awk scripts and: Executable Scripts. (line 6)
+* Unix awk, close() function and: Close Files And Pipes.
+ (line 132)
* unsigned integers: Computer Arithmetic. (line 41)
* until debugger command: Debugger Execution Control.
(line 82)
@@ -36838,26 +36945,56 @@ Index
* up debugger command: Execution Stack. (line 36)
* uppercase names, namespace for: Default Namespace. (line 10)
* user database, reading: Passwd Functions. (line 6)
-* user-defined functions: User-defined. (line 6)
-* user-defined, functions, counts, in a profile: Profiling. (line 137)
* user-defined, variables: Variables. (line 6)
+* user-defined, function, bits2str(): Bitwise Functions. (line 69)
+* user-defined, functions: User-defined. (line 6)
+* user-defined, function, rev(): Function Example. (line 54)
+* user-defined, function, ctime(): Function Example. (line 74)
+* user-defined, function, assert(): Assert Function. (line 28)
+* user-defined, function, round(): Round Function. (line 16)
+* user-defined, function, cliff_rand(): Cliff Random Function.
+ (line 12)
+* user-defined, function, ord(): Ordinal Functions. (line 16)
+* user-defined, function, chr(): Ordinal Functions. (line 16)
+* user-defined, function, _ord_init(): Ordinal Functions. (line 16)
+* user-defined, function, join(): Join Function. (line 18)
+* user-defined, function, getlocaltime(): Getlocaltime Function.
+ (line 16)
+* user-defined, function, readfile(): Readfile Function. (line 30)
+* user-defined, function, beginfile(): Filetrans Function. (line 62)
+* user-defined, function, endfile(): Filetrans Function. (line 62)
+* user-defined, function, rewind(): Rewind Function. (line 15)
+* user-defined, function, getopt(): Getopt Function. (line 108)
+* user-defined, function, getopt() <1>: Getopt Function. (line 134)
+* user-defined, function, getpwent(): Passwd Functions. (line 16)
+* user-defined, function, _pw_init(): Passwd Functions. (line 105)
+* user-defined, function, getpwnam(): Passwd Functions. (line 180)
+* user-defined, function, getpwuid(): Passwd Functions. (line 190)
+* user-defined, function, getpwent() <1>: Passwd Functions. (line 200)
+* user-defined, function, endpwent(): Passwd Functions. (line 211)
+* user-defined, function, getgrent(): Group Functions. (line 6)
+* user-defined, function, _gr_init(): Group Functions. (line 83)
+* user-defined, function, getgrnam(): Group Functions. (line 178)
+* user-defined, function, getgrgid(): Group Functions. (line 187)
+* user-defined, function, getgruser(): Group Functions. (line 196)
+* user-defined, function, getgrent() <1>: Group Functions. (line 205)
+* user-defined, function, endgrent(): Group Functions. (line 216)
+* user-defined, function, walk_array(): Walking Arrays. (line 14)
+* user-defined, functions, counts, in a profile: Profiling. (line 137)
* user-modifiable variables: User-modified. (line 6)
-* users, information about, printing: Id Program. (line 6)
* users, information about, retrieving: Passwd Functions. (line 16)
+* users, information about, printing: Id Program. (line 6)
* USR1 signal, for dynamic profiling: Profiling. (line 188)
-* values, numeric: Basic Data Typing. (line 13)
* values, regexp: Strong Regexp Constants.
(line 24)
+* values, numeric: Basic Data Typing. (line 13)
* values, string: Basic Data Typing. (line 13)
* variable assignments and input files: Other Arguments. (line 32)
-* variable type: Type Functions. (line 14)
-* variable typing: Typing and Comparison.
- (line 9)
+* variable type, typeof() function (gawk): Type Functions. (line 14)
* variables: Other Features. (line 6)
-* variables <1>: Basic Data Typing. (line 6)
-* variables, assigning on command line: Assignment Options. (line 6)
-* variables, built-in: Using Variables. (line 23)
-* variables, flag: Boolean Ops. (line 69)
+* variables, setting: Options. (line 36)
+* variables, predefined, -v option, setting with: Options. (line 45)
+* variables, global, printing list of: Options. (line 98)
* variables, getline command into, using: Getline/Variable. (line 6)
* variables, getline command into, using <1>: Getline/Variable/File.
(line 6)
@@ -36865,35 +37002,36 @@ Index
(line 6)
* variables, getline command into, using <3>: Getline/Variable/Coprocess.
(line 6)
-* variables, global, for library functions: Library Names. (line 11)
-* variables, global, printing list of: Options. (line 98)
+* variables, user-defined: Variables. (line 6)
+* variables, built-in: Using Variables. (line 23)
* variables, initializing: Using Variables. (line 23)
-* variables, local to a function: Variable Scope. (line 6)
-* variables, predefined: Built-in Variables. (line 6)
-* variables, predefined, -v option, setting with: Options. (line 45)
-* variables, predefined, conveying information: Auto-set. (line 6)
-* variables, private: Library Names. (line 11)
-* variables, setting: Options. (line 36)
-* variables, shadowing: Definition Syntax. (line 77)
+* variables, assigning on command line: Assignment Options. (line 6)
* variables, types of: Assignment Ops. (line 39)
* variables, types of, comparison expressions and: Typing and Comparison.
(line 9)
+* variables, flag: Boolean Ops. (line 69)
+* variables, predefined: Built-in Variables. (line 6)
+* variables, predefined, conveying information: Auto-set. (line 6)
* variables, uninitialized, as array subscripts: Uninitialized Subscripts.
(line 6)
-* variables, user-defined: Variables. (line 6)
-* version of gawk: Auto-set. (line 262)
-* version of gawk extension API: Auto-set. (line 287)
-* version of GNU MP library: Auto-set. (line 270)
-* version of GNU MPFR library: Auto-set. (line 272)
+* variables, shadowing: Definition Syntax. (line 77)
+* variables, local to a function: Variable Scope. (line 6)
+* variables, global, for library functions: Library Names. (line 11)
+* variables, private: Library Names. (line 11)
+* variables <1>: Basic Data Typing. (line 6)
+* version of, gawk: Auto-set. (line 262)
+* version of, GNU MP library: Auto-set. (line 270)
+* version of, GNU MPFR library: Auto-set. (line 272)
+* version of, gawk extension API: Auto-set. (line 287)
* vertical bar (|): Regexp Operator Details.
(line 66)
* vertical bar (|), | operator (I/O): Getline/Pipe. (line 10)
-* vertical bar (|), | operator (I/O) <1>: Precedence. (line 64)
* vertical bar (|), |& operator (I/O): Getline/Coprocess. (line 6)
-* vertical bar (|), |& operator (I/O) <1>: Precedence. (line 64)
-* vertical bar (|), |& operator (I/O) <2>: Two-way I/O. (line 27)
* vertical bar (|), || operator: Boolean Ops. (line 59)
+* vertical bar (|), | operator (I/O) <1>: Precedence. (line 64)
+* vertical bar (|), |& operator (I/O) <1>: Precedence. (line 64)
* vertical bar (|), || operator <1>: Precedence. (line 88)
+* vertical bar (|), |& operator (I/O) <2>: Two-way I/O. (line 27)
* Vinschen, Corinna: Acknowledgments. (line 60)
* w debugger command (alias for watch): Viewing And Changing Data.
(line 70)
@@ -36910,18 +37048,19 @@ Index
* watch debugger command: Viewing And Changing Data.
(line 70)
* watchpoint (debugger): Debugging Terms. (line 42)
+* watchpoints, show in debugger: Debugger Info. (line 51)
* wc utility: Wc Program. (line 6)
* wc.awk program: Wc Program. (line 46)
* Weinberger, Peter: History. (line 17)
* Weinberger, Peter <1>: Contributors. (line 12)
* where debugger command (alias for backtrace): Execution Stack.
(line 13)
-* while statement: While Statement. (line 6)
* while statement, use of regexps in: Regexp Usage. (line 19)
+* while statement: While Statement. (line 6)
+* whitespace, newlines as: Options. (line 289)
* whitespace, as field separators: Default Field Splitting.
(line 6)
* whitespace, functions, calling: Calling Built-in. (line 10)
-* whitespace, newlines as: Options. (line 289)
* Williams, Kent: Contributors. (line 35)
* Woehlke, Matthew: Contributors. (line 82)
* Woods, John: Contributors. (line 28)
@@ -36991,557 +37130,562 @@ Node: Intro Summary116373
Node: Invoking Gawk117257
Node: Command Line118771
Node: Options119569
-Ref: Options-Footnote-1137023
-Ref: Options-Footnote-2137254
-Node: Other Arguments137279
-Node: Naming Standard Input140460
-Node: Environment Variables141670
-Node: AWKPATH Variable142228
-Ref: AWKPATH Variable-Footnote-1145640
-Ref: AWKPATH Variable-Footnote-2145674
-Node: AWKLIBPATH Variable145935
-Node: Other Environment Variables147593
-Node: Exit Status151414
-Node: Include Files152091
-Node: Loading Shared Libraries155781
-Node: Obsolete157209
-Node: Undocumented157901
-Node: Invoking Summary158198
-Node: Regexp161039
-Node: Regexp Usage162493
-Node: Escape Sequences164530
-Node: Regexp Operators170762
-Node: Regexp Operator Details171247
-Ref: Regexp Operator Details-Footnote-1177679
-Node: Interval Expressions177826
-Ref: Interval Expressions-Footnote-1179261
-Node: Bracket Expressions179359
-Ref: table-char-classes181835
-Node: Leftmost Longest185161
-Node: Computed Regexps186464
-Node: GNU Regexp Operators189891
-Node: Case-sensitivity193570
-Ref: Case-sensitivity-Footnote-1196436
-Ref: Case-sensitivity-Footnote-2196671
-Node: Regexp Summary196779
-Node: Reading Files198245
-Node: Records200514
-Node: awk split records201589
-Node: gawk split records206864
-Ref: gawk split records-Footnote-1211450
-Node: Fields211487
-Node: Nonconstant Fields214228
-Ref: Nonconstant Fields-Footnote-1216464
-Node: Changing Fields216668
-Node: Field Separators222699
-Node: Default Field Splitting225397
-Node: Regexp Field Splitting226515
-Node: Single Character Fields229868
-Node: Command Line Field Separator230928
-Node: Full Line Fields234146
-Ref: Full Line Fields-Footnote-1235668
-Ref: Full Line Fields-Footnote-2235714
-Node: Field Splitting Summary235815
-Node: Constant Size237889
-Node: Fixed width data238621
-Node: Skipping intervening242088
-Node: Allowing trailing data242886
-Node: Fields with fixed data243923
-Node: Splitting By Content245441
-Ref: Splitting By Content-Footnote-1249091
-Node: Testing field creation249254
-Node: Multiple Line250879
-Node: Getline257156
-Node: Plain Getline259625
-Node: Getline/Variable262198
-Node: Getline/File263349
-Node: Getline/Variable/File264737
-Ref: Getline/Variable/File-Footnote-1266342
-Node: Getline/Pipe266430
-Node: Getline/Variable/Pipe269134
-Node: Getline/Coprocess270269
-Node: Getline/Variable/Coprocess271536
-Node: Getline Notes272278
-Node: Getline Summary275075
-Ref: table-getline-variants275499
-Node: Read Timeout276247
-Ref: Read Timeout-Footnote-1280153
-Node: Retrying Input280211
-Node: Command-line directories281410
-Node: Input Summary282316
-Node: Input Exercises285488
-Node: Printing285922
-Node: Print287756
-Node: Print Examples289213
-Node: Output Separators291993
-Node: OFMT294010
-Node: Printf295366
-Node: Basic Printf296151
-Node: Control Letters297725
-Node: Format Modifiers302889
-Node: Printf Examples308904
-Node: Redirection311390
-Node: Special FD318231
-Ref: Special FD-Footnote-1321399
-Node: Special Files321473
-Node: Other Inherited Files322090
-Node: Special Network323091
-Node: Special Caveats323951
-Node: Close Files And Pipes324900
-Ref: table-close-pipe-return-values331807
-Ref: Close Files And Pipes-Footnote-1332620
-Ref: Close Files And Pipes-Footnote-2332768
-Node: Nonfatal332920
-Node: Output Summary335258
-Node: Output Exercises336480
-Node: Expressions337159
-Node: Values338347
-Node: Constants339025
-Node: Scalar Constants339716
-Ref: Scalar Constants-Footnote-1342240
-Node: Nondecimal-numbers342490
-Node: Regexp Constants345491
-Node: Using Constant Regexps346017
-Node: Standard Regexp Constants346639
-Node: Strong Regexp Constants349827
-Node: Variables352785
-Node: Using Variables353442
-Node: Assignment Options355352
-Node: Conversion357819
-Node: Strings And Numbers358343
-Ref: Strings And Numbers-Footnote-1361406
-Node: Locale influences conversions361515
-Ref: table-locale-affects364273
-Node: All Operators364891
-Node: Arithmetic Ops365520
-Node: Concatenation368026
-Ref: Concatenation-Footnote-1370873
-Node: Assignment Ops370980
-Ref: table-assign-ops375971
-Node: Increment Ops377284
-Node: Truth Values and Conditions380744
-Node: Truth Values381818
-Node: Typing and Comparison382866
-Node: Variable Typing383686
-Ref: Variable Typing-Footnote-1390149
-Ref: Variable Typing-Footnote-2390221
-Node: Comparison Operators390298
-Ref: table-relational-ops390717
-Node: POSIX String Comparison394212
-Ref: POSIX String Comparison-Footnote-1395907
-Ref: POSIX String Comparison-Footnote-2396046
-Node: Boolean Ops396130
-Ref: Boolean Ops-Footnote-1400612
-Node: Conditional Exp400704
-Node: Function Calls402440
-Node: Precedence406317
-Node: Locales409976
-Node: Expressions Summary411608
-Node: Patterns and Actions414181
-Node: Pattern Overview415301
-Node: Regexp Patterns416978
-Node: Expression Patterns417520
-Node: Ranges421301
-Node: BEGIN/END424409
-Node: Using BEGIN/END425170
-Ref: Using BEGIN/END-Footnote-1427906
-Node: I/O And BEGIN/END428012
-Node: BEGINFILE/ENDFILE430326
-Node: Empty433239
-Node: Using Shell Variables433556
-Node: Action Overview435830
-Node: Statements438155
-Node: If Statement440003
-Node: While Statement441498
-Node: Do Statement443526
-Node: For Statement444674
-Node: Switch Statement447845
-Node: Break Statement450231
-Node: Continue Statement452323
-Node: Next Statement454150
-Node: Nextfile Statement456533
-Node: Exit Statement459185
-Node: Built-in Variables461588
-Node: User-modified462721
-Node: Auto-set470488
-Ref: Auto-set-Footnote-1487295
-Ref: Auto-set-Footnote-2487501
-Node: ARGC and ARGV487557
-Node: Pattern Action Summary491770
-Node: Arrays494200
-Node: Array Basics495529
-Node: Array Intro496373
-Ref: figure-array-elements498348
-Ref: Array Intro-Footnote-1501052
-Node: Reference to Elements501180
-Node: Assigning Elements503644
-Node: Array Example504135
-Node: Scanning an Array505894
-Node: Controlling Scanning508916
-Ref: Controlling Scanning-Footnote-1514315
-Node: Numeric Array Subscripts514631
-Node: Uninitialized Subscripts516815
-Node: Delete518434
-Ref: Delete-Footnote-1521186
-Node: Multidimensional521243
-Node: Multiscanning524338
-Node: Arrays of Arrays525929
-Node: Arrays Summary530697
-Node: Functions532790
-Node: Built-in533828
-Node: Calling Built-in534909
-Node: Numeric Functions536905
-Ref: Numeric Functions-Footnote-1540933
-Ref: Numeric Functions-Footnote-2541581
-Ref: Numeric Functions-Footnote-3541629
-Node: String Functions541901
-Ref: String Functions-Footnote-1565759
-Ref: String Functions-Footnote-2565887
-Ref: String Functions-Footnote-3566135
-Node: Gory Details566222
-Ref: table-sub-escapes568013
-Ref: table-sub-proposed569532
-Ref: table-posix-sub570895
-Ref: table-gensub-escapes572436
-Ref: Gory Details-Footnote-1573259
-Node: I/O Functions573413
-Ref: table-system-return-values579881
-Ref: I/O Functions-Footnote-1581961
-Ref: I/O Functions-Footnote-2582109
-Node: Time Functions582229
-Ref: Time Functions-Footnote-1592900
-Ref: Time Functions-Footnote-2592968
-Ref: Time Functions-Footnote-3593126
-Ref: Time Functions-Footnote-4593237
-Ref: Time Functions-Footnote-5593349
-Ref: Time Functions-Footnote-6593576
-Node: Bitwise Functions593842
-Ref: table-bitwise-ops594436
-Ref: Bitwise Functions-Footnote-1600499
-Ref: Bitwise Functions-Footnote-2600672
-Node: Type Functions600863
-Node: I18N Functions603726
-Node: User-defined605377
-Node: Definition Syntax606189
-Ref: Definition Syntax-Footnote-1611876
-Node: Function Example611947
-Ref: Function Example-Footnote-1614869
-Node: Function Calling614891
-Node: Calling A Function615479
-Node: Variable Scope616437
-Node: Pass By Value/Reference619431
-Node: Function Caveats622075
-Ref: Function Caveats-Footnote-1624122
-Node: Return Statement624242
-Node: Dynamic Typing627221
-Node: Indirect Calls628151
-Ref: Indirect Calls-Footnote-1638403
-Node: Functions Summary638531
-Node: Library Functions641236
-Ref: Library Functions-Footnote-1644843
-Ref: Library Functions-Footnote-2644986
-Node: Library Names645157
-Ref: Library Names-Footnote-1648824
-Ref: Library Names-Footnote-2649047
-Node: General Functions649133
-Node: Strtonum Function650236
-Node: Assert Function653258
-Node: Round Function656584
-Node: Cliff Random Function658124
-Node: Ordinal Functions659140
-Ref: Ordinal Functions-Footnote-1662203
-Ref: Ordinal Functions-Footnote-2662455
-Node: Join Function662665
-Ref: Join Function-Footnote-1664435
-Node: Getlocaltime Function664635
-Node: Readfile Function668377
-Node: Shell Quoting670354
-Node: Data File Management671755
-Node: Filetrans Function672387
-Node: Rewind Function676483
-Node: File Checking678392
-Ref: File Checking-Footnote-1679726
-Node: Empty Files679927
-Node: Ignoring Assigns681906
-Node: Getopt Function683456
-Ref: Getopt Function-Footnote-1694925
-Node: Passwd Functions695125
-Ref: Passwd Functions-Footnote-1703964
-Node: Group Functions704052
-Ref: Group Functions-Footnote-1711950
-Node: Walking Arrays712157
-Node: Library Functions Summary715165
-Node: Library Exercises716571
-Node: Sample Programs717036
-Node: Running Examples717806
-Node: Clones718534
-Node: Cut Program719758
-Node: Egrep Program729687
-Ref: Egrep Program-Footnote-1737199
-Node: Id Program737309
-Node: Split Program740989
-Ref: Split Program-Footnote-1744447
-Node: Tee Program744576
-Node: Uniq Program747366
-Node: Wc Program754987
-Ref: Wc Program-Footnote-1759242
-Node: Miscellaneous Programs759336
-Node: Dupword Program760549
-Node: Alarm Program762579
-Node: Translate Program767434
-Ref: Translate Program-Footnote-1771999
-Node: Labels Program772269
-Ref: Labels Program-Footnote-1775620
-Node: Word Sorting775704
-Node: History Sorting779776
-Node: Extract Program781611
-Node: Simple Sed789665
-Node: Igawk Program792739
-Ref: Igawk Program-Footnote-1807070
-Ref: Igawk Program-Footnote-2807272
-Ref: Igawk Program-Footnote-3807394
-Node: Anagram Program807509
-Node: Signature Program810571
-Node: Programs Summary811818
-Node: Programs Exercises813032
-Ref: Programs Exercises-Footnote-1817161
-Node: Advanced Features817252
-Node: Nondecimal Data819242
-Node: Array Sorting820833
-Node: Controlling Array Traversal821533
-Ref: Controlling Array Traversal-Footnote-1829901
-Node: Array Sorting Functions830019
-Ref: Array Sorting Functions-Footnote-1835110
-Node: Two-way I/O835306
-Ref: Two-way I/O-Footnote-1843027
-Ref: Two-way I/O-Footnote-2843214
-Node: TCP/IP Networking843296
-Node: Profiling846414
-Node: Advanced Features Summary855429
-Node: Internationalization857273
-Node: I18N and L10N858753
-Node: Explaining gettext859440
-Ref: Explaining gettext-Footnote-1865332
-Ref: Explaining gettext-Footnote-2865517
-Node: Programmer i18n865682
-Ref: Programmer i18n-Footnote-1870631
-Node: Translator i18n870680
-Node: String Extraction871474
-Ref: String Extraction-Footnote-1872606
-Node: Printf Ordering872692
-Ref: Printf Ordering-Footnote-1875478
-Node: I18N Portability875542
-Ref: I18N Portability-Footnote-1877998
-Node: I18N Example878061
-Ref: I18N Example-Footnote-1881336
-Ref: I18N Example-Footnote-2881409
-Node: Gawk I18N881518
-Node: I18N Summary882167
-Node: Debugger883508
-Node: Debugging884508
-Node: Debugging Concepts884949
-Node: Debugging Terms886758
-Node: Awk Debugging889333
-Ref: Awk Debugging-Footnote-1890278
-Node: Sample Debugging Session890410
-Node: Debugger Invocation890944
-Node: Finding The Bug892330
-Node: List of Debugger Commands898804
-Node: Breakpoint Control900137
-Node: Debugger Execution Control903831
-Node: Viewing And Changing Data907193
-Node: Execution Stack910734
-Node: Debugger Info912371
-Node: Miscellaneous Debugger Commands916442
-Node: Readline Support921504
-Node: Limitations922400
-Node: Debugging Summary924954
-Node: Namespaces926233
-Node: Global Namespace927344
-Node: Qualified Names928742
-Node: Default Namespace929741
-Node: Changing The Namespace930482
-Node: Naming Rules932096
-Node: Internal Name Management933944
-Node: Namespace Example934986
-Node: Namespace And Features937548
-Node: Namespace Summary938983
-Node: Arbitrary Precision Arithmetic940460
-Node: Computer Arithmetic941947
-Ref: table-numeric-ranges945713
-Ref: table-floating-point-ranges946206
-Ref: Computer Arithmetic-Footnote-1946864
-Node: Math Definitions946921
-Ref: table-ieee-formats950237
-Ref: Math Definitions-Footnote-1950840
-Node: MPFR features950945
-Node: FP Math Caution952663
-Ref: FP Math Caution-Footnote-1953735
-Node: Inexactness of computations954104
-Node: Inexact representation955064
-Node: Comparing FP Values956424
-Node: Errors accumulate957665
-Node: Getting Accuracy959098
-Node: Try To Round961808
-Node: Setting precision962707
-Ref: table-predefined-precision-strings963404
-Node: Setting the rounding mode965234
-Ref: table-gawk-rounding-modes965608
-Ref: Setting the rounding mode-Footnote-1969539
-Node: Arbitrary Precision Integers969718
-Ref: Arbitrary Precision Integers-Footnote-1972893
-Node: Checking for MPFR973042
-Node: POSIX Floating Point Problems974516
-Ref: POSIX Floating Point Problems-Footnote-1978801
-Node: Floating point summary978839
-Node: Dynamic Extensions981029
-Node: Extension Intro982582
-Node: Plugin License983848
-Node: Extension Mechanism Outline984645
-Ref: figure-load-extension985084
-Ref: figure-register-new-function986649
-Ref: figure-call-new-function987741
-Node: Extension API Description989803
-Node: Extension API Functions Introduction991445
-Ref: table-api-std-headers993281
-Node: General Data Types997146
-Ref: General Data Types-Footnote-11005507
-Node: Memory Allocation Functions1005806
-Ref: Memory Allocation Functions-Footnote-11010016
-Node: Constructor Functions1010115
-Node: Registration Functions1013701
-Node: Extension Functions1014386
-Node: Exit Callback Functions1019708
-Node: Extension Version String1020958
-Node: Input Parsers1021621
-Node: Output Wrappers1034342
-Node: Two-way processors1038854
-Node: Printing Messages1041119
-Ref: Printing Messages-Footnote-11042290
-Node: Updating ERRNO1042443
-Node: Requesting Values1043182
-Ref: table-value-types-returned1043919
-Node: Accessing Parameters1044855
-Node: Symbol Table Access1046090
-Node: Symbol table by name1046602
-Ref: Symbol table by name-Footnote-11049626
-Node: Symbol table by cookie1049754
-Ref: Symbol table by cookie-Footnote-11053939
-Node: Cached values1054003
-Ref: Cached values-Footnote-11057539
-Node: Array Manipulation1057692
-Ref: Array Manipulation-Footnote-11058783
-Node: Array Data Types1058820
-Ref: Array Data Types-Footnote-11061478
-Node: Array Functions1061570
-Node: Flattening Arrays1066068
-Node: Creating Arrays1073044
-Node: Redirection API1077811
-Node: Extension API Variables1080644
-Node: Extension Versioning1081355
-Ref: gawk-api-version1081784
-Node: Extension GMP/MPFR Versioning1083515
-Node: Extension API Informational Variables1085143
-Node: Extension API Boilerplate1086216
-Node: Changes from API V11090190
-Node: Finding Extensions1091762
-Node: Extension Example1092321
-Node: Internal File Description1093119
-Node: Internal File Ops1097199
-Ref: Internal File Ops-Footnote-11108549
-Node: Using Internal File Ops1108689
-Ref: Using Internal File Ops-Footnote-11111072
-Node: Extension Samples1111346
-Node: Extension Sample File Functions1112875
-Node: Extension Sample Fnmatch1120524
-Node: Extension Sample Fork1122011
-Node: Extension Sample Inplace1123229
-Node: Extension Sample Ord1126854
-Node: Extension Sample Readdir1127690
-Ref: table-readdir-file-types1128579
-Node: Extension Sample Revout1129384
-Node: Extension Sample Rev2way1129973
-Node: Extension Sample Read write array1130713
-Node: Extension Sample Readfile1132655
-Node: Extension Sample Time1133750
-Node: Extension Sample API Tests1135098
-Node: gawkextlib1135590
-Node: Extension summary1138508
-Node: Extension Exercises1142210
-Node: Language History1143452
-Node: V7/SVR3.11145108
-Node: SVR41147260
-Node: POSIX1148694
-Node: BTL1150074
-Node: POSIX/GNU1150803
-Node: Feature History1156581
-Node: Common Extensions1172774
-Node: Ranges and Locales1174057
-Ref: Ranges and Locales-Footnote-11178673
-Ref: Ranges and Locales-Footnote-21178700
-Ref: Ranges and Locales-Footnote-31178935
-Node: Contributors1179156
-Node: History summary1185109
-Node: Installation1186489
-Node: Gawk Distribution1187433
-Node: Getting1187917
-Node: Extracting1188880
-Node: Distribution contents1190518
-Node: Unix Installation1196998
-Node: Quick Installation1197680
-Node: Shell Startup Files1200094
-Node: Additional Configuration Options1201183
-Node: Configuration Philosophy1203498
-Node: Non-Unix Installation1205867
-Node: PC Installation1206327
-Node: PC Binary Installation1207165
-Node: PC Compiling1207600
-Node: PC Using1208717
-Node: Cygwin1212270
-Node: MSYS1213369
-Node: VMS Installation1213870
-Node: VMS Compilation1214661
-Ref: VMS Compilation-Footnote-11215890
-Node: VMS Dynamic Extensions1215948
-Node: VMS Installation Details1217633
-Node: VMS Running1219886
-Node: VMS GNV1224165
-Node: VMS Old Gawk1224900
-Node: Bugs1225371
-Node: Bug address1226034
-Node: Usenet1229016
-Node: Maintainers1230020
-Node: Other Versions1231281
-Node: Installation summary1238369
-Node: Notes1239571
-Node: Compatibility Mode1240365
-Node: Additions1241147
-Node: Accessing The Source1242072
-Node: Adding Code1243509
-Node: New Ports1249728
-Node: Derived Files1254103
-Ref: Derived Files-Footnote-11259763
-Ref: Derived Files-Footnote-21259798
-Ref: Derived Files-Footnote-31260396
-Node: Future Extensions1260510
-Node: Implementation Limitations1261168
-Node: Extension Design1262351
-Node: Old Extension Problems1263495
-Ref: Old Extension Problems-Footnote-11265013
-Node: Extension New Mechanism Goals1265070
-Ref: Extension New Mechanism Goals-Footnote-11268434
-Node: Extension Other Design Decisions1268623
-Node: Extension Future Growth1270736
-Node: Notes summary1271572
-Node: Basic Concepts1272730
-Node: Basic High Level1273411
-Ref: figure-general-flow1273693
-Ref: figure-process-flow1274378
-Ref: Basic High Level-Footnote-11277679
-Node: Basic Data Typing1277864
-Node: Glossary1281192
-Node: Copying1313030
-Node: GNU Free Documentation License1350573
-Node: Index1375693
+Ref: Options-Footnote-1137171
+Ref: Options-Footnote-2137402
+Node: Other Arguments137427
+Node: Naming Standard Input140608
+Node: Environment Variables141818
+Node: AWKPATH Variable142376
+Ref: AWKPATH Variable-Footnote-1145788
+Ref: AWKPATH Variable-Footnote-2145822
+Node: AWKLIBPATH Variable146083
+Node: Other Environment Variables147741
+Node: Exit Status151562
+Node: Include Files152239
+Node: Loading Shared Libraries155929
+Node: Obsolete157357
+Node: Undocumented158049
+Node: Invoking Summary158346
+Node: Regexp161187
+Node: Regexp Usage162641
+Node: Escape Sequences164678
+Node: Regexp Operators170910
+Node: Regexp Operator Details171395
+Ref: Regexp Operator Details-Footnote-1177827
+Node: Interval Expressions177974
+Ref: Interval Expressions-Footnote-1179409
+Node: Bracket Expressions179507
+Ref: table-char-classes181983
+Node: Leftmost Longest185309
+Node: Computed Regexps186612
+Node: GNU Regexp Operators190039
+Node: Case-sensitivity193718
+Ref: Case-sensitivity-Footnote-1196584
+Ref: Case-sensitivity-Footnote-2196819
+Node: Regexp Summary196927
+Node: Reading Files198393
+Node: Records200662
+Node: awk split records201737
+Node: gawk split records207012
+Ref: gawk split records-Footnote-1211598
+Node: Fields211635
+Node: Nonconstant Fields214376
+Ref: Nonconstant Fields-Footnote-1216612
+Node: Changing Fields216816
+Node: Field Separators222847
+Node: Default Field Splitting225545
+Node: Regexp Field Splitting226663
+Node: Single Character Fields230016
+Node: Command Line Field Separator231076
+Node: Full Line Fields234294
+Ref: Full Line Fields-Footnote-1235816
+Ref: Full Line Fields-Footnote-2235862
+Node: Field Splitting Summary235963
+Node: Constant Size238037
+Node: Fixed width data238769
+Node: Skipping intervening242236
+Node: Allowing trailing data243034
+Node: Fields with fixed data244071
+Node: Splitting By Content245589
+Ref: Splitting By Content-Footnote-1249239
+Node: Testing field creation249402
+Node: Multiple Line251027
+Node: Getline257304
+Node: Plain Getline259773
+Node: Getline/Variable262346
+Node: Getline/File263497
+Node: Getline/Variable/File264885
+Ref: Getline/Variable/File-Footnote-1266490
+Node: Getline/Pipe266578
+Node: Getline/Variable/Pipe269282
+Node: Getline/Coprocess270417
+Node: Getline/Variable/Coprocess271684
+Node: Getline Notes272426
+Node: Getline Summary275223
+Ref: table-getline-variants275647
+Node: Read Timeout276395
+Ref: Read Timeout-Footnote-1280301
+Node: Retrying Input280359
+Node: Command-line directories281558
+Node: Input Summary282464
+Node: Input Exercises285636
+Node: Printing286070
+Node: Print287904
+Node: Print Examples289361
+Node: Output Separators292141
+Node: OFMT294158
+Node: Printf295514
+Node: Basic Printf296299
+Node: Control Letters297873
+Node: Format Modifiers303037
+Node: Printf Examples309052
+Node: Redirection311538
+Node: Special FD318379
+Ref: Special FD-Footnote-1321547
+Node: Special Files321621
+Node: Other Inherited Files322238
+Node: Special Network323239
+Node: Special Caveats324099
+Node: Close Files And Pipes325048
+Ref: table-close-pipe-return-values331955
+Ref: Close Files And Pipes-Footnote-1332768
+Ref: Close Files And Pipes-Footnote-2332916
+Node: Nonfatal333068
+Node: Output Summary335406
+Node: Output Exercises336628
+Node: Expressions337307
+Node: Values338495
+Node: Constants339173
+Node: Scalar Constants339864
+Ref: Scalar Constants-Footnote-1342388
+Node: Nondecimal-numbers342638
+Node: Regexp Constants345639
+Node: Using Constant Regexps346165
+Node: Standard Regexp Constants346787
+Node: Strong Regexp Constants349975
+Node: Variables352933
+Node: Using Variables353590
+Node: Assignment Options355500
+Node: Conversion357967
+Node: Strings And Numbers358491
+Ref: Strings And Numbers-Footnote-1361554
+Node: Locale influences conversions361663
+Ref: table-locale-affects364421
+Node: All Operators365039
+Node: Arithmetic Ops365668
+Node: Concatenation368174
+Ref: Concatenation-Footnote-1371021
+Node: Assignment Ops371128
+Ref: table-assign-ops376119
+Node: Increment Ops377432
+Node: Truth Values and Conditions380892
+Node: Truth Values381966
+Node: Typing and Comparison383014
+Node: Variable Typing383834
+Ref: Variable Typing-Footnote-1390297
+Ref: Variable Typing-Footnote-2390369
+Node: Comparison Operators390446
+Ref: table-relational-ops390865
+Node: POSIX String Comparison394360
+Ref: POSIX String Comparison-Footnote-1396055
+Ref: POSIX String Comparison-Footnote-2396194
+Node: Boolean Ops396278
+Ref: Boolean Ops-Footnote-1400760
+Node: Conditional Exp400852
+Node: Function Calls402588
+Node: Precedence406465
+Node: Locales410124
+Node: Expressions Summary411756
+Node: Patterns and Actions414329
+Node: Pattern Overview415449
+Node: Regexp Patterns417126
+Node: Expression Patterns417668
+Node: Ranges421449
+Node: BEGIN/END424557
+Node: Using BEGIN/END425318
+Ref: Using BEGIN/END-Footnote-1428054
+Node: I/O And BEGIN/END428160
+Node: BEGINFILE/ENDFILE430474
+Node: Empty433387
+Node: Using Shell Variables433704
+Node: Action Overview435978
+Node: Statements438303
+Node: If Statement440151
+Node: While Statement441646
+Node: Do Statement443674
+Node: For Statement444822
+Node: Switch Statement447993
+Node: Break Statement450379
+Node: Continue Statement452471
+Node: Next Statement454298
+Node: Nextfile Statement456681
+Node: Exit Statement459333
+Node: Built-in Variables461736
+Node: User-modified462869
+Node: Auto-set470636
+Ref: Auto-set-Footnote-1487443
+Ref: Auto-set-Footnote-2487649
+Node: ARGC and ARGV487705
+Node: Pattern Action Summary491918
+Node: Arrays494348
+Node: Array Basics495677
+Node: Array Intro496521
+Ref: figure-array-elements498496
+Ref: Array Intro-Footnote-1501200
+Node: Reference to Elements501328
+Node: Assigning Elements503792
+Node: Array Example504283
+Node: Scanning an Array506042
+Node: Controlling Scanning509064
+Ref: Controlling Scanning-Footnote-1514463
+Node: Numeric Array Subscripts514779
+Node: Uninitialized Subscripts516963
+Node: Delete518582
+Ref: Delete-Footnote-1521334
+Node: Multidimensional521391
+Node: Multiscanning524486
+Node: Arrays of Arrays526077
+Node: Arrays Summary530845
+Node: Functions532938
+Node: Built-in533976
+Node: Calling Built-in535057
+Node: Numeric Functions537053
+Ref: Numeric Functions-Footnote-1541081
+Ref: Numeric Functions-Footnote-2541729
+Ref: Numeric Functions-Footnote-3541777
+Node: String Functions542049
+Ref: String Functions-Footnote-1565907
+Ref: String Functions-Footnote-2566035
+Ref: String Functions-Footnote-3566283
+Node: Gory Details566370
+Ref: table-sub-escapes568161
+Ref: table-sub-proposed569680
+Ref: table-posix-sub571043
+Ref: table-gensub-escapes572584
+Ref: Gory Details-Footnote-1573407
+Node: I/O Functions573561
+Ref: table-system-return-values580029
+Ref: I/O Functions-Footnote-1582109
+Ref: I/O Functions-Footnote-2582257
+Node: Time Functions582377
+Ref: Time Functions-Footnote-1593048
+Ref: Time Functions-Footnote-2593116
+Ref: Time Functions-Footnote-3593274
+Ref: Time Functions-Footnote-4593385
+Ref: Time Functions-Footnote-5593497
+Ref: Time Functions-Footnote-6593724
+Node: Bitwise Functions593990
+Ref: table-bitwise-ops594584
+Ref: Bitwise Functions-Footnote-1600647
+Ref: Bitwise Functions-Footnote-2600820
+Node: Type Functions601011
+Node: I18N Functions603874
+Node: User-defined605525
+Node: Definition Syntax606337
+Ref: Definition Syntax-Footnote-1612024
+Node: Function Example612095
+Ref: Function Example-Footnote-1615017
+Node: Function Calling615039
+Node: Calling A Function615627
+Node: Variable Scope616585
+Node: Pass By Value/Reference619579
+Node: Function Caveats622223
+Ref: Function Caveats-Footnote-1624270
+Node: Return Statement624390
+Node: Dynamic Typing627369
+Node: Indirect Calls628299
+Ref: Indirect Calls-Footnote-1638551
+Node: Functions Summary638679
+Node: Library Functions641384
+Ref: Library Functions-Footnote-1644991
+Ref: Library Functions-Footnote-2645134
+Node: Library Names645305
+Ref: Library Names-Footnote-1648972
+Ref: Library Names-Footnote-2649195
+Node: General Functions649281
+Node: Strtonum Function650384
+Node: Assert Function653406
+Node: Round Function656732
+Node: Cliff Random Function658272
+Node: Ordinal Functions659288
+Ref: Ordinal Functions-Footnote-1662351
+Ref: Ordinal Functions-Footnote-2662603
+Node: Join Function662813
+Ref: Join Function-Footnote-1664583
+Node: Getlocaltime Function664783
+Node: Readfile Function668525
+Node: Shell Quoting670502
+Node: Data File Management671903
+Node: Filetrans Function672535
+Node: Rewind Function676631
+Node: File Checking678540
+Ref: File Checking-Footnote-1679874
+Node: Empty Files680075
+Node: Ignoring Assigns682054
+Node: Getopt Function683604
+Ref: Getopt Function-Footnote-1695073
+Node: Passwd Functions695273
+Ref: Passwd Functions-Footnote-1704112
+Node: Group Functions704200
+Ref: Group Functions-Footnote-1712098
+Node: Walking Arrays712305
+Node: Library Functions Summary715313
+Node: Library Exercises716719
+Node: Sample Programs717184
+Node: Running Examples717954
+Node: Clones718682
+Node: Cut Program719906
+Node: Egrep Program729835
+Ref: Egrep Program-Footnote-1737347
+Node: Id Program737457
+Node: Split Program741137
+Ref: Split Program-Footnote-1744595
+Node: Tee Program744724
+Node: Uniq Program747514
+Node: Wc Program755135
+Ref: Wc Program-Footnote-1759390
+Node: Miscellaneous Programs759484
+Node: Dupword Program760697
+Node: Alarm Program762727
+Node: Translate Program767582
+Ref: Translate Program-Footnote-1772147
+Node: Labels Program772417
+Ref: Labels Program-Footnote-1775768
+Node: Word Sorting775852
+Node: History Sorting779924
+Node: Extract Program781759
+Node: Simple Sed789813
+Node: Igawk Program792887
+Ref: Igawk Program-Footnote-1807218
+Ref: Igawk Program-Footnote-2807420
+Ref: Igawk Program-Footnote-3807542
+Node: Anagram Program807657
+Node: Signature Program810719
+Node: Programs Summary811966
+Node: Programs Exercises813180
+Ref: Programs Exercises-Footnote-1817309
+Node: Advanced Features817400
+Node: Nondecimal Data819390
+Node: Array Sorting820981
+Node: Controlling Array Traversal821681
+Ref: Controlling Array Traversal-Footnote-1830049
+Node: Array Sorting Functions830167
+Ref: Array Sorting Functions-Footnote-1835258
+Node: Two-way I/O835454
+Ref: Two-way I/O-Footnote-1843175
+Ref: Two-way I/O-Footnote-2843362
+Node: TCP/IP Networking843444
+Node: Profiling846562
+Node: Advanced Features Summary855577
+Node: Internationalization857421
+Node: I18N and L10N858901
+Node: Explaining gettext859588
+Ref: Explaining gettext-Footnote-1865480
+Ref: Explaining gettext-Footnote-2865665
+Node: Programmer i18n865830
+Ref: Programmer i18n-Footnote-1870779
+Node: Translator i18n870828
+Node: String Extraction871622
+Ref: String Extraction-Footnote-1872754
+Node: Printf Ordering872840
+Ref: Printf Ordering-Footnote-1875626
+Node: I18N Portability875690
+Ref: I18N Portability-Footnote-1878146
+Node: I18N Example878209
+Ref: I18N Example-Footnote-1881484
+Ref: I18N Example-Footnote-2881557
+Node: Gawk I18N881666
+Node: I18N Summary882315
+Node: Debugger883656
+Node: Debugging884656
+Node: Debugging Concepts885097
+Node: Debugging Terms886906
+Node: Awk Debugging889481
+Ref: Awk Debugging-Footnote-1890426
+Node: Sample Debugging Session890558
+Node: Debugger Invocation891092
+Node: Finding The Bug892478
+Node: List of Debugger Commands898952
+Node: Breakpoint Control900285
+Node: Debugger Execution Control903979
+Node: Viewing And Changing Data907341
+Node: Execution Stack910882
+Node: Debugger Info912519
+Node: Miscellaneous Debugger Commands916590
+Node: Readline Support921652
+Node: Limitations922548
+Node: Debugging Summary925102
+Node: Namespaces926381
+Node: Global Namespace927492
+Node: Qualified Names928890
+Node: Default Namespace929889
+Node: Changing The Namespace930630
+Node: Naming Rules932244
+Node: Internal Name Management934092
+Node: Namespace Example935134
+Node: Namespace And Features937696
+Node: Namespace Summary939131
+Node: Arbitrary Precision Arithmetic940608
+Node: Computer Arithmetic942095
+Ref: table-numeric-ranges945861
+Ref: table-floating-point-ranges946354
+Ref: Computer Arithmetic-Footnote-1947012
+Node: Math Definitions947069
+Ref: table-ieee-formats950385
+Ref: Math Definitions-Footnote-1950988
+Node: MPFR features951093
+Node: FP Math Caution952811
+Ref: FP Math Caution-Footnote-1953883
+Node: Inexactness of computations954252
+Node: Inexact representation955212
+Node: Comparing FP Values956572
+Node: Errors accumulate957813
+Node: Getting Accuracy959246
+Node: Try To Round961956
+Node: Setting precision962855
+Ref: table-predefined-precision-strings963552
+Node: Setting the rounding mode965382
+Ref: table-gawk-rounding-modes965756
+Ref: Setting the rounding mode-Footnote-1969687
+Node: Arbitrary Precision Integers969866
+Ref: Arbitrary Precision Integers-Footnote-1973041
+Node: Checking for MPFR973190
+Node: POSIX Floating Point Problems974664
+Ref: POSIX Floating Point Problems-Footnote-1978949
+Node: Floating point summary978987
+Node: Dynamic Extensions981177
+Node: Extension Intro982730
+Node: Plugin License983996
+Node: Extension Mechanism Outline984793
+Ref: figure-load-extension985232
+Ref: figure-register-new-function986797
+Ref: figure-call-new-function987889
+Node: Extension API Description989951
+Node: Extension API Functions Introduction991593
+Ref: table-api-std-headers993429
+Node: General Data Types997294
+Ref: General Data Types-Footnote-11005655
+Node: Memory Allocation Functions1005954
+Ref: Memory Allocation Functions-Footnote-11010164
+Node: Constructor Functions1010263
+Node: Registration Functions1013849
+Node: Extension Functions1014534
+Node: Exit Callback Functions1019856
+Node: Extension Version String1021106
+Node: Input Parsers1021769
+Node: Output Wrappers1034490
+Node: Two-way processors1039002
+Node: Printing Messages1041267
+Ref: Printing Messages-Footnote-11042438
+Node: Updating ERRNO1042591
+Node: Requesting Values1043330
+Ref: table-value-types-returned1044067
+Node: Accessing Parameters1045003
+Node: Symbol Table Access1046238
+Node: Symbol table by name1046750
+Ref: Symbol table by name-Footnote-11049774
+Node: Symbol table by cookie1049902
+Ref: Symbol table by cookie-Footnote-11054087
+Node: Cached values1054151
+Ref: Cached values-Footnote-11057687
+Node: Array Manipulation1057840
+Ref: Array Manipulation-Footnote-11058931
+Node: Array Data Types1058968
+Ref: Array Data Types-Footnote-11061626
+Node: Array Functions1061718
+Node: Flattening Arrays1066216
+Node: Creating Arrays1073192
+Node: Redirection API1077959
+Node: Extension API Variables1080792
+Node: Extension Versioning1081503
+Ref: gawk-api-version1081932
+Node: Extension GMP/MPFR Versioning1083663
+Node: Extension API Informational Variables1085291
+Node: Extension API Boilerplate1086364
+Node: Changes from API V11090338
+Node: Finding Extensions1091910
+Node: Extension Example1092469
+Node: Internal File Description1093267
+Node: Internal File Ops1097347
+Ref: Internal File Ops-Footnote-11108697
+Node: Using Internal File Ops1108837
+Ref: Using Internal File Ops-Footnote-11111220
+Node: Extension Samples1111494
+Node: Extension Sample File Functions1113023
+Node: Extension Sample Fnmatch1120672
+Node: Extension Sample Fork1122159
+Node: Extension Sample Inplace1123377
+Node: Extension Sample Ord1127002
+Node: Extension Sample Readdir1127838
+Ref: table-readdir-file-types1128727
+Node: Extension Sample Revout1129532
+Node: Extension Sample Rev2way1130121
+Node: Extension Sample Read write array1130861
+Node: Extension Sample Readfile1132803
+Node: Extension Sample Time1133898
+Node: Extension Sample API Tests1135246
+Node: gawkextlib1135738
+Node: Extension summary1138656
+Node: Extension Exercises1142358
+Node: Language History1143600
+Node: V7/SVR3.11145256
+Node: SVR41147408
+Node: POSIX1148842
+Node: BTL1150222
+Node: POSIX/GNU1150951
+Node: Feature History1156729
+Node: Common Extensions1172922
+Node: Ranges and Locales1174205
+Ref: Ranges and Locales-Footnote-11178821
+Ref: Ranges and Locales-Footnote-21178848
+Ref: Ranges and Locales-Footnote-31179083
+Node: Contributors1179304
+Node: History summary1185257
+Node: Installation1186637
+Node: Gawk Distribution1187581
+Node: Getting1188065
+Node: Extracting1189028
+Node: Distribution contents1190666
+Node: Unix Installation1197146
+Node: Quick Installation1197828
+Node: Shell Startup Files1200242
+Node: Additional Configuration Options1201331
+Node: Configuration Philosophy1203646
+Node: Non-Unix Installation1206015
+Node: PC Installation1206475
+Node: PC Binary Installation1207313
+Node: PC Compiling1207748
+Node: PC Using1208865
+Node: Cygwin1212418
+Node: MSYS1213642
+Node: VMS Installation1214143
+Node: VMS Compilation1214934
+Ref: VMS Compilation-Footnote-11216163
+Node: VMS Dynamic Extensions1216221
+Node: VMS Installation Details1217906
+Node: VMS Running1220159
+Node: VMS GNV1224438
+Node: VMS Old Gawk1225173
+Node: Bugs1225644
+Node: Bug address1226307
+Node: Usenet1229289
+Node: Maintainers1230293
+Node: Other Versions1231554
+Node: Installation summary1238642
+Node: Notes1239844
+Node: Compatibility Mode1240638
+Node: Additions1241420
+Node: Accessing The Source1242345
+Node: Adding Code1243782
+Node: New Ports1250001
+Node: Derived Files1254376
+Ref: Derived Files-Footnote-11260036
+Ref: Derived Files-Footnote-21260071
+Ref: Derived Files-Footnote-31260669
+Node: Future Extensions1260783
+Node: Implementation Limitations1261441
+Node: Extension Design1262624
+Node: Old Extension Problems1263768
+Ref: Old Extension Problems-Footnote-11265286
+Node: Extension New Mechanism Goals1265343
+Ref: Extension New Mechanism Goals-Footnote-11268707
+Node: Extension Other Design Decisions1268896
+Node: Extension Future Growth1271009
+Node: Notes summary1271845
+Node: Basic Concepts1273003
+Node: Basic High Level1273684
+Ref: figure-general-flow1273966
+Ref: figure-process-flow1274651
+Ref: Basic High Level-Footnote-11277952
+Node: Basic Data Typing1278137
+Node: Glossary1281465
+Node: Copying1313303
+Node: GNU Free Documentation License1350846
+Node: Index1375966
End Tag Table
+
+
+Local Variables:
+coding: utf-8
+End:
diff --git a/doc/gawk.texi b/doc/gawk.texi
index f27d301..2d0c5bc 100644
--- a/doc/gawk.texi
+++ b/doc/gawk.texi
@@ -59,7 +59,7 @@
@c applies to and all the info about who's publishing this edition
@c These apply across the board.
-@set UPDATE-MONTH July, 2019
+@set UPDATE-MONTH September, 2019
@set VERSION 5.1
@set PATCHLEVEL 0
@@ -1317,6 +1317,7 @@ October 2014
</prefaceinfo>
@end docbook
+@cindex @command{awk}
Several kinds of tasks occur repeatedly when working with text files.
You might want to extract certain lines and discard the rest. Or you
may need to make changes wherever certain patterns appear, but leave the
@@ -1324,6 +1325,7 @@ rest of the file alone. Such jobs are often easy with
@command{awk}.
The @command{awk} utility interprets a special-purpose programming
language that makes it easy to handle simple data-reformatting jobs.
+@cindex @command{gawk}
The GNU implementation of @command{awk} is called @command{gawk}; if you
invoke it with the proper options or environment variables,
it is fully compatible with
@@ -1337,12 +1339,12 @@ properly written @command{awk} programs should work
with @command{gawk}.
So most of the time, we don't distinguish between @command{gawk} and other
@command{awk} implementations.
-@cindex @command{awk}, POSIX and, See Also POSIX @command{awk}
-@cindex @command{awk}, POSIX and
-@cindex POSIX, @command{awk} and
-@cindex @command{gawk}, @command{awk} and
-@cindex @command{awk}, @command{gawk} and
-@cindex @command{awk}, uses for
+@cindex @command{awk} @subentry POSIX and @seealso{POSIX @command{awk}}
+@cindex @command{awk} @subentry POSIX and
+@cindex POSIX @subentry @command{awk} and
+@cindex @command{gawk} @subentry @command{awk} and
+@cindex @command{awk} @subentry @command{gawk} and
+@cindex @command{awk} @subentry uses for
Using @command{awk} you can:
@itemize @value{BULLET}
@@ -1363,9 +1365,9 @@ Experiment with algorithms that you can adapt later to
other computer
languages
@end itemize
-@cindex @command{awk}, See Also @command{gawk}
-@cindex @command{gawk}, See Also @command{awk}
-@cindex @command{gawk}, uses for
+@cindex @command{awk} @seealso{@command{gawk}}
+@cindex @command{gawk} @seealso{@command{awk}}
+@cindex @command{gawk} @subentry uses for
In addition,
@command{gawk}
provides facilities that make it easy to:
@@ -1395,7 +1397,7 @@ Unix-based systems. If you are using some other operating
system, you still need
be familiar with the ideas of I/O redirection and pipes.} as well as basic
shell
facilities, such as input/output (I/O) redirection and pipes.
-@cindex GNU @command{awk}, See @command{gawk}
+@cindex GNU @command{awk} @seeentry{@command{gawk}}
Implementations of the @command{awk} language are available for many
different computing environments. This @value{DOCUMENT}, while describing
the @command{awk} language in general, also describes the particular
@@ -1427,7 +1429,7 @@ has been removed.}
@unnumberedsec History of @command{awk} and @command{gawk}
@cindex recipe for a programming language
@cindex programming language, recipe for
-@cindex sidebar, Recipe for a Programming Language
+@cindex sidebar @subentry Recipe for a Programming Language
@ifdocbook
@docbook
<sidebar><title>Recipe for a Programming Language</title>
@@ -1472,7 +1474,7 @@ more parts C. Document very well and release.
@cindex Aho, Alfred
@cindex Weinberger, Peter
@cindex Kernighan, Brian
-@cindex @command{awk}, history of
+@cindex @command{awk} @subentry history of
The name @command{awk} comes from the initials of its designers: Alfred V.@:
Aho, Peter J.@: Weinberger, and Brian W.@: Kernighan. The original version of
@command{awk} was written in 1977 at AT&T Bell Laboratories.
@@ -1519,7 +1521,7 @@ for a full list of those who have made important
contributions to @command{gawk}
@node Names
@unnumberedsec A Rose by Any Other Name
-@cindex @command{awk}, new vs.@: old
+@cindex @command{awk} @subentry new vs.@: old
The @command{awk} language has evolved over the years. Full details are
provided in @ref{Language History}.
The language described in this @value{DOCUMENT}
@@ -1554,7 +1556,7 @@ specific to the GNU implementation, we use the term
@command{gawk}.
@node This Manual
@unnumberedsec Using This Book
-@cindex @command{awk}, terms describing
+@cindex @command{awk} @subentry terms describing
The term @command{awk} refers to a particular program as well as to the
language you
use to tell this program what to do. When we need to be careful, we call
@@ -1566,8 +1568,8 @@ run the @command{awk} utility.
The term ``@command{awk} program'' refers to a program written by you in
the @command{awk} programming language.
-@cindex @command{gawk}, @command{awk} and
-@cindex @command{awk}, @command{gawk} and
+@cindex @command{gawk} @subentry @command{awk} and
+@cindex @command{awk} @subentry @command{gawk} and
@cindex POSIX @command{awk}
Primarily, this @value{DOCUMENT} explains the features of @command{awk}
as defined in the POSIX standard. It does so in the context of the
@@ -1926,7 +1928,7 @@ you illuminate, there's always a smaller but darker one.}
@author Brian Kernighan
@end quotation
-@cindex d.c., See dark corner
+@cindex d.c. @seeentry{dark corner}
@cindex dark corner
Until the POSIX standard (and @cite{@value{TITLE}}),
many features of @command{awk} were either poorly documented or not
@@ -1946,7 +1948,7 @@ They also appear in the index under the heading ``dark
corner.''
But, as noted by the opening quote, any coverage of dark
corners is by definition incomplete.
-@cindex c.e., See common extensions
+@cindex c.e. @seeentry{common extensions}
Extensions to the standard @command{awk} language that are supported by
more than one @command{awk} implementation are marked
@ifclear FOR_PRINT
@@ -1970,8 +1972,9 @@ Emacs editor. GNU Emacs is the most widely used version
of Emacs today.
@cindex GNU Project
@cindex GPL (General Public License)
-@cindex General Public License, See GPL
-@cindex documentation, online
+@cindex GNU General Public License @seeentry{GPL}
+@cindex General Public License @seeentry{GPL}
+@cindex documentation @subentry online
The GNU@footnote{GNU stands for ``GNU's Not Unix.''}
Project is an ongoing effort on the part of the Free Software
Foundation to create a complete, freely distributable, POSIX-compliant
@@ -2001,9 +2004,9 @@ freely available. The GNU operating
system kernel (the HURD), has been released but remains in an early
stage of development.
-@cindex Linux
+@cindex Linux @seeentry{GNU/Linux}
@cindex GNU/Linux
-@cindex operating systems, BSD-based
+@cindex operating systems @subentry BSD-based
Until the GNU operating system is more fully developed, you should
consider using GNU/Linux, a freely distributable, Unix-like operating
system for Intel,
@@ -2167,10 +2170,10 @@ convincing me @emph{not} to title this @value{DOCUMENT}
@cite{How to Gawk Politely}.
Karl Berry helped significantly with the @TeX{} part of Texinfo.
-@cindex Hartholz, Marshall
-@cindex Hartholz, Elaine
-@cindex Schreiber, Bert
-@cindex Schreiber, Rita
+@cindex Hartholz @subentry Marshall
+@cindex Hartholz @subentry Elaine
+@cindex Schreiber @subentry Bert
+@cindex Schreiber @subentry Rita
I would like to thank Marshall and Elaine Hartholz of Seattle and
Dr.@: Bert and Rita Schreiber of Detroit for large amounts of quiet vacation
time in their homes, which allowed me to make significant progress on
@@ -2284,9 +2287,9 @@ and for being a role model to me for close to 30 years!
Having him as a reviewer is an exciting privilege. It has also
been extremely humbling@enddots{}
-@cindex Robbins, Miriam
-@cindex Robbins, Jean
-@cindex Robbins, Harry
+@cindex Robbins @subentry Miriam
+@cindex Robbins @subentry Jean
+@cindex Robbins @subentry Harry
@cindex G-d
I must thank my wonderful wife, Miriam, for her patience through
the many versions of this project, for her proofreading,
@@ -2353,7 +2356,7 @@ following chapters:
@c @cindex rule, definition of
@c @cindex program, definition of
@c @cindex basic function of @command{awk}
-@cindex @command{awk}, function of
+@cindex @command{awk} @subentry function of
The basic function of @command{awk} is to search files for lines (or other
units of text) that contain certain patterns. When a line matches one
@@ -2361,8 +2364,8 @@ of the patterns, @command{awk} performs specified actions
on that line.
@command{awk} continues to process input lines in this way until it reaches
the end of the input files.
-@cindex @command{awk}, uses for
-@cindex programming languages@comma{} data-driven vs.@: procedural
+@cindex @command{awk} @subentry uses for
+@cindex programming languages @subentry data-driven vs.@: procedural
@cindex @command{awk} programs
Programs in @command{awk} are different from programs in most other languages,
because @command{awk} programs are @dfn{data driven} (i.e., you describe
@@ -2415,7 +2418,7 @@ program looks like this:
@node Running gawk
@section How to Run @command{awk} Programs
-@cindex @command{awk} programs, running
+@cindex @command{awk} programs @subentry running
There are several ways to run an @command{awk} program. If the program is
short, it is easiest to include it in the command that runs @command{awk},
like this:
@@ -2424,7 +2427,7 @@ like this:
awk '@var{program}' @var{input-file1} @var{input-file2} @dots{}
@end example
-@cindex command line, formats
+@cindex command line @subentry formats
When the program is long, it is usually more convenient to put it in a file
and run it with a command like this:
@@ -2473,8 +2476,8 @@ characters. The quotes also cause the shell to treat all
of @var{program} as
a single argument for @command{awk}, and allow @var{program} to be more
than one line long.
-@cindex shells, scripts
-@cindex @command{awk} programs, running, from shell scripts
+@cindex shells @subentry scripts
+@cindex @command{awk} programs @subentry running @subentry from shell scripts
This format is also useful for running short or medium-sized @command{awk}
programs from shell scripts, because it avoids the need for a separate
file for the @command{awk} program. A self-contained shell script is more
@@ -2492,8 +2495,8 @@ self-contained programs.
@subsection Running @command{awk} Without Input Files
@cindex standard input
-@cindex input, standard
-@cindex input files, running @command{awk} without
+@cindex input @subentry standard
+@cindex input files @subentry running @command{awk} without
You can also run @command{awk} without any input files. If you type the
following command line:
@@ -2507,9 +2510,9 @@ which usually means whatever you type on the keyboard.
This continues
until you indicate end-of-file by typing @kbd{Ctrl-d}.
(On non-POSIX operating systems, the end-of-file character may be different.)
-@cindex files, input, See input files
-@cindex input files, running @command{awk} without
-@cindex @command{awk} programs, running, without input files
+@cindex files @subentry input @seeentry{input files}
+@cindex input files @subentry running @command{awk} without
+@cindex @command{awk} programs @subentry running @subentry without input files
As an example, the following program prints a friendly piece of advice
(from Douglas Adams's @cite{The Hitchhiker's Guide to the Galaxy}),
to keep you from worrying about the complexities of computer
@@ -2555,9 +2558,9 @@ $ @kbd{awk '@{ print @}'}
@node Long
@subsection Running Long Programs
-@cindex @command{awk} programs, running
-@cindex @command{awk} programs, lengthy
-@cindex files, @command{awk} programs in
+@cindex @command{awk} programs @subentry running
+@cindex @command{awk} programs @subentry lengthy
+@cindex files @subentry @command{awk} programs in
Sometimes @command{awk} programs are very long. In these cases, it is
more convenient to put the program into a separate file. In order to tell
@command{awk} to use that file for its program, you type:
@@ -2567,7 +2570,7 @@ awk -f @var{source-file} @var{input-file1}
@var{input-file2} @dots{}
@end example
@cindex @option{-f} option
-@cindex command line, option @option{-f}
+@cindex command line @subentry option @option{-f}
The @option{-f} instructs the @command{awk} utility to get the
@command{awk} program from the file @var{source-file} (@pxref{Options}).
Any @value{FN} can be used for @var{source-file}. For example, you
@@ -2591,7 +2594,7 @@ does the same thing as this one:
awk 'BEGIN @{ print "Don\47t Panic!" @}'
@end example
-@cindex quoting, in @command{gawk} command lines
+@cindex quoting @subentry in @command{gawk} command lines
@noindent
This was explained earlier
(@pxref{Read Terminal}).
@@ -2603,8 +2606,8 @@ for programs that are provided on the @command{awk}
command line.
(Also, placing the program in a file allows us to use a literal single quote
in the program
text, instead of the magic @samp{\47}.)
-@cindex single quote (@code{'}) in @command{gawk} command lines
-@cindex @code{'} (single quote) in @command{gawk} command lines
+@cindex single quote (@code{'}) @subentry in @command{gawk} command lines
+@cindex @code{'} (single quote) @subentry in @command{gawk} command lines
If you want to clearly identify an @command{awk} program file as such,
you can add the extension @file{.awk} to the @value{FN}. This doesn't
affect the execution of the @command{awk} program but it does make
@@ -2613,9 +2616,9 @@ affect the execution of the @command{awk} program but it
does make
@node Executable Scripts
@subsection Executable @command{awk} Programs
@cindex @command{awk} programs
-@cindex @code{#} (number sign), @code{#!} (executable scripts)
-@cindex Unix, @command{awk} scripts and
-@cindex number sign (@code{#}), @code{#!} (executable scripts)
+@cindex @code{#} (number sign) @subentry @code{#!} (executable scripts)
+@cindex Unix @subentry @command{awk} scripts and
+@cindex number sign (@code{#}) @subentry @code{#!} (executable scripts)
Once you have learned @command{awk}, you may want to write self-contained
@command{awk} scripts, using the @samp{#!} script mechanism. You can do
@@ -2650,13 +2653,13 @@ Self-contained @command{awk} scripts are useful when
you want to write a
program that users can invoke without their having to know that the program is
written in @command{awk}.
-@cindex sidebar, Understanding @samp{#!}
+@cindex sidebar @subentry Understanding @samp{#!}
@ifdocbook
@docbook
<sidebar><title>Understanding @samp{#!}</title>
@end docbook
-@cindex portability, @code{#!} (executable scripts)
+@cindex portability @subentry @code{#!} (executable scripts)
@command{awk} is an @dfn{interpreted} language. This means that the
@command{awk} utility reads your program and then processes your data
@@ -2685,9 +2688,9 @@ treats the rest of the line as a single argument and
passes it to @command{awk}.
Doing this leads to confusing behavior---most likely a usage diagnostic
of some sort from @command{awk}.
-@cindex @code{ARGC}/@code{ARGV} variables, portability and
-@cindex portability, @code{ARGV} variable
-@cindex dark corner, @code{ARGV} variable, value of
+@cindex @code{ARGC}/@code{ARGV} variables @subentry portability and
+@cindex portability @subentry @code{ARGV} variable
+@cindex dark corner @subentry @code{ARGV} variable, value of
Finally, the value of @code{ARGV[0]}
(@pxref{Built-in Variables})
varies depending upon your operating system.
@@ -2707,7 +2710,7 @@ to provide your script name.
@center @b{Understanding @samp{#!}}
-@cindex portability, @code{#!} (executable scripts)
+@cindex portability @subentry @code{#!} (executable scripts)
@command{awk} is an @dfn{interpreted} language. This means that the
@command{awk} utility reads your program and then processes your data
@@ -2736,9 +2739,9 @@ treats the rest of the line as a single argument and
passes it to @command{awk}.
Doing this leads to confusing behavior---most likely a usage diagnostic
of some sort from @command{awk}.
-@cindex @code{ARGC}/@code{ARGV} variables, portability and
-@cindex portability, @code{ARGV} variable
-@cindex dark corner, @code{ARGV} variable, value of
+@cindex @code{ARGC}/@code{ARGV} variables @subentry portability and
+@cindex portability @subentry @code{ARGV} variable
+@cindex dark corner @subentry @code{ARGV} variable, value of
Finally, the value of @code{ARGV[0]}
(@pxref{Built-in Variables})
varies depending upon your operating system.
@@ -2752,10 +2755,10 @@ to provide your script name.
@node Comments
@subsection Comments in @command{awk} Programs
-@cindex @code{#} (number sign), commenting
-@cindex number sign (@code{#}), commenting
+@cindex @code{#} (number sign) @subentry commenting
+@cindex number sign (@code{#}) @subentry commenting
@cindex commenting
-@cindex @command{awk} programs, documenting
+@cindex @command{awk} programs @subentry documenting
A @dfn{comment} is some text that is included in a program for the sake
of human readers; it is not really an executable part of the program. Comments
@@ -2780,9 +2783,9 @@ programs, but this usually isn't very useful; the purpose
of a
comment is to help you or another person understand the program
when reading it at a later time.
-@cindex quoting, for small awk programs
-@cindex single quote (@code{'}), vs.@: apostrophe
-@cindex @code{'} (single quote), vs.@: apostrophe
+@cindex quoting @subentry for small awk programs
+@cindex single quote (@code{'}) @subentry vs.@: apostrophe
+@cindex @code{'} (single quote) @subentry vs.@: apostrophe
@quotation CAUTION
As mentioned in
@ref{One-shot},
@@ -2838,7 +2841,7 @@ the shell prompt, or writing it as part of a larger shell
script:
awk '@var{program text}' @var{input-file1} @var{input-file2} @dots{}
@end example
-@cindex shells, quoting, rules for
+@cindex shells @subentry quoting @subentry rules for
@cindex Bourne shell, quoting rules for
Once you are working with the shell, it is helpful to have a basic
knowledge of shell quoting rules. The following rules apply only to
@@ -2877,10 +2880,10 @@ that character. The shell removes the backslash and
passes the quoted
character on to the command.
@item
-@cindex @code{\} (backslash), in shell commands
-@cindex backslash (@code{\}), in shell commands
-@cindex single quote (@code{'}), in shell commands
-@cindex @code{'} (single quote), in shell commands
+@cindex @code{\} (backslash) @subentry in shell commands
+@cindex backslash (@code{\}) @subentry in shell commands
+@cindex single quote (@code{'}) @subentry in shell commands
+@cindex @code{'} (single quote) @subentry in shell commands
Single quotes protect everything between the opening and closing quotes.
The shell does no interpretation of the quoted text, passing it on verbatim
to the command.
@@ -2890,8 +2893,8 @@ Refer back to
for an example of what happens if you try.
@item
-@cindex double quote (@code{"}), in shell commands
-@cindex @code{"} (double quote), in shell commands
+@cindex double quote (@code{"}) @subentry in shell commands
+@cindex @code{"} (double quote) @subentry in shell commands
Double quotes protect most things between the opening and closing quotes.
The shell does at least variable and command substitution on the quoted text.
Different shells may do additional kinds of processing on double-quoted text.
@@ -2919,8 +2922,8 @@ $ @kbd{awk "BEGIN @{ print \"Don't Panic!\" @}"}
@print{} Don't Panic!
@end example
-@cindex single quote (@code{'}), with double quotes
-@cindex @code{'} (single quote), with double quotes
+@cindex single quote (@code{'}) @subentry with double quotes
+@cindex @code{'} (single quote) @subentry with double quotes
Note that the single quote is not special within double quotes.
@item
@@ -2934,7 +2937,7 @@ awk -F "" '@var{program}' @var{files} # correct
@end example
@noindent
-@cindex null strings in @command{gawk} arguments, quoting and
+@cindex null strings @subentry in @command{gawk} arguments, quoting and
Don't use this:
@example
@@ -2947,7 +2950,7 @@ as the value of @code{FS}, and the first @value{FN} as
the text of the program!
This results in syntax errors at best, and confusing behavior at worst.
@end itemize
-@cindex quoting, in @command{gawk} command lines, tricks for
+@cindex quoting @subentry in @command{gawk} command lines @subentry tricks for
Mixing single and double quotes is difficult. You have to resort
to shell quoting tricks, like this:
@@ -3109,7 +3112,7 @@ double-quote don't need duplication.
@node Sample Data Files
@section @value{DDF}s for the Examples
-@cindex input files, examples
+@cindex input files @subentry examples
@cindex @code{mail-list} file
Many of the examples in this @value{DOCUMENT} take their input from two sample
@value{DF}s. The first, @file{mail-list}, represents a list of peoples' names
@@ -3222,21 +3225,21 @@ $ @kbd{awk '/li/ @{ print $0 @}' mail-list}
@print{} Samuel 555-3430 samuel.lanceolis@@shu.edu A
@end example
-@cindex actions, default
-@cindex patterns, default
+@cindex actions @subentry default
+@cindex patterns @subentry default
In an @command{awk} rule, either the pattern or the action can be omitted,
but not both. If the pattern is omitted, then the action is performed
for @emph{every} input line. If the action is omitted, the default
action is to print all lines that match the pattern.
-@cindex actions, empty
+@cindex actions @subentry empty
Thus, we could leave out the action (the @code{print} statement and the
braces) in the previous example and the result would be the same:
@command{awk} prints all lines matching the pattern @samp{li}. By comparison,
omitting the @code{print} statement but retaining the braces makes an
empty action that does nothing (i.e., no lines are printed).
-@cindex @command{awk} programs, one-line examples
+@cindex @command{awk} programs @subentry one-line examples
Many practical @command{awk} programs are just a line or two long. Following
is a
collection of useful, short programs to get you started. Some of these
programs contain constructs that haven't been covered yet. (The description
@@ -3441,7 +3444,7 @@ the file was last modified. Its output looks like this:
@end example
@noindent
-@cindex line continuations, with C shell
+@cindex line continuations @subentry with C shell
The first field contains read-write permissions, the second field contains
the number of links to the file, and the third field identifies the file's
owner.
The fourth field identifies the file's group.
@@ -3487,7 +3490,7 @@ awk '/12/ @{ print $0 @}
/21/ @{ print $0 @}' mail-list inventory-shipped
@end example
-@cindex @command{gawk}, newlines in
+@cindex @command{gawk} @subentry newlines in
However, @command{gawk} ignores newlines after any of the following
symbols and keywords:
@@ -3504,8 +3507,8 @@ Splitting lines after @samp{?} and @samp{:} is a minor
@command{gawk}
extension; if @option{--posix} is specified
(@pxref{Options}), then this extension is disabled.}
-@cindex @code{\} (backslash), continuing lines and
-@cindex backslash (@code{\}), continuing lines and
+@cindex @code{\} (backslash) @subentry continuing lines and
+@cindex backslash (@code{\}) @subentry continuing lines and
If you would like to split a single statement into two lines at a point
where a newline would terminate it, you can @dfn{continue} it by ending the
first line with a backslash character (@samp{\}). The backslash must be
@@ -3519,7 +3522,7 @@ awk '/This regular expression is too long, so continue it\
@end example
@noindent
-@cindex portability, backslash continuation and
+@cindex portability @subentry backslash continuation and
We have generally not used backslash continuation in our sample programs.
@command{gawk} places no limit on the
length of a line, so backslash continuation is never strictly necessary;
@@ -3537,8 +3540,8 @@ lines in the middle of a regular expression or a string.
@c solaris 2.7 nawk does not. Solaris /usr/xpg4/bin/awk does though! sigh.
@cindex @command{csh} utility
-@cindex backslash (@code{\}), continuing lines and, in @command{csh}
-@cindex @code{\} (backslash), continuing lines and, in @command{csh}
+@cindex backslash (@code{\}) @subentry continuing lines and @subentry in
@command{csh}
+@cindex @code{\} (backslash) @subentry continuing lines and @subentry in
@command{csh}
@quotation CAUTION
@emph{Backslash continuation does not work as described
with the C shell.} It works for @command{awk} programs in files and
@@ -3576,9 +3579,9 @@ begin on the same line as the pattern. To have the
pattern and action
on separate lines, you @emph{must} use backslash continuation; there
is no other option.
-@cindex backslash (@code{\}), continuing lines and, comments and
-@cindex @code{\} (backslash), continuing lines and, comments and
-@cindex commenting, backslash continuation and
+@cindex backslash (@code{\}) @subentry continuing lines and @subentry comments
and
+@cindex @code{\} (backslash) @subentry continuing lines and @subentry comments
and
+@cindex commenting @subentry backslash continuation and
Another thing to keep in mind is that backslash continuation and
comments do not mix. As soon as @command{awk} sees the @samp{#} that
starts a comment, it ignores @emph{everything} on the rest of the
@@ -3600,11 +3603,11 @@ next line. However, the backslash-newline combination
is never even
noticed because it is ``hidden'' inside the comment. Thus, the
@code{BEGIN} is noted as a syntax error.
-@cindex statements, multiple
-@cindex @code{;} (semicolon), separating statements in actions
-@cindex semicolon (@code{;}), separating statements in actions
-@cindex @code{;} (semicolon), separating rules
-@cindex semicolon (@code{;}), separating rules
+@cindex statements @subentry multiple
+@cindex @code{;} (semicolon) @subentry separating statements in actions
+@cindex semicolon (@code{;}) @subentry separating statements in actions
+@cindex @code{;} (semicolon) @subentry separating rules
+@cindex semicolon (@code{;}) @subentry separating rules
When @command{awk} statements within one rule are short, you might want to put
more than one of them on a line. This is accomplished by separating the
statements
with a semicolon (@samp{;}).
@@ -3647,7 +3650,7 @@ systematically in @ref{Built-in Variables} and in
@node When
@section When to Use @command{awk}
-@cindex @command{awk}, uses for
+@cindex @command{awk} @subentry uses for
Now that you've seen some of what @command{awk} can do,
you might wonder how @command{awk} could be useful for you. By using
utility programs, advanced patterns, field separators, arithmetic
@@ -3678,7 +3681,7 @@ computer.
The original @command{awk}'s capabilities were strained by tasks
of such complexity, but modern versions are more capable.
-@cindex @command{awk} programs, complex
+@cindex @command{awk} programs @subentry complex
If you find yourself writing @command{awk} scripts of more than, say,
a few hundred lines, you might consider using a different programming
language. The shell is good at string and pattern matching; in addition,
@@ -3758,10 +3761,10 @@ things in this @value{CHAPTER} that don't interest you
right now.
@node Command Line
@section Invoking @command{awk}
-@cindex command line, invoking @command{awk} from
-@cindex @command{awk}, invoking
-@cindex arguments, command-line, invoking @command{awk}
-@cindex options, command-line, invoking @command{awk}
+@cindex command line @subentry invoking @command{awk} from
+@cindex @command{awk} @subentry invoking
+@cindex arguments @subentry command-line @subentry invoking @command{awk}
+@cindex options @subentry command-line @subentry invoking @command{awk}
There are two ways to run @command{awk}---with an explicit program or with
one or more program files. Here are templates for both of them; items
@@ -3774,12 +3777,12 @@ enclosed in [@dots{}] in these templates are optional:
@cindex GNU long options
@cindex long options
-@cindex options, long
+@cindex options @subentry long
In addition to traditional one-letter POSIX-style options, @command{gawk} also
supports GNU long options.
-@cindex dark corner, invoking @command{awk}
-@cindex lint checking, empty programs
+@cindex dark corner @subentry invoking @command{awk}
+@cindex lint checking @subentry empty programs
It is possible to invoke @command{awk} with an empty program:
@example
@@ -3787,7 +3790,7 @@ awk '' datafile1 datafile2
@end example
@cindex @option{--lint} option
-@cindex dark corner, empty programs
+@cindex dark corner @subentry empty programs
@noindent
Doing so makes little sense, though; @command{awk} exits
silently when given an empty program.
@@ -3798,10 +3801,10 @@ warning that the program is empty.
@node Options
@section Command-Line Options
-@cindex options, command-line
-@cindex command line, options
+@cindex options @subentry command-line
+@cindex command line @subentry options
@cindex GNU long options
-@cindex options, long
+@cindex options @subentry long
Options begin with a dash and consist of a single character.
GNU-style long options consist of two dashes and a keyword.
@@ -3813,7 +3816,7 @@ by whitespace.
If a particular option with a value is given more than once, it is the
last value that counts.
-@cindex POSIX @command{awk}, GNU long options and
+@cindex POSIX @command{awk} @subentry GNU long options and
Each long option for @command{gawk} has a corresponding
POSIX-style short option.
The long and short options are
@@ -3825,7 +3828,7 @@ The following list describes options mandated by the
POSIX standard:
@itemx --field-separator @var{fs}
@cindex @option{-F} option
@cindex @option{--field-separator} option
-@cindex @code{FS} variable, @code{--field-separator} option and
+@cindex @code{FS} variable @subentry @code{--field-separator} option and
Set the @code{FS} variable to @var{fs}
(@pxref{Field Separators}).
@@ -3833,7 +3836,7 @@ Set the @code{FS} variable to @var{fs}
@itemx --file @var{source-file}
@cindex @option{-f} option
@cindex @option{--file} option
-@cindex @command{awk} programs, location of
+@cindex @command{awk} programs @subentry location of
Read the @command{awk} program source from @var{source-file}
instead of in the first nonoption argument.
This option may be given multiple times; the @command{awk}
@@ -3847,7 +3850,7 @@ at their beginning. @xref{Changing The Namespace}, for
more information.
@itemx --assign @var{var}=@var{val}
@cindex @option{-v} option
@cindex @option{--assign} option
-@cindex variables, setting
+@cindex variables @subentry setting
Set the variable @var{var} to the value @var{val} @emph{before}
execution of the program begins. Such variable values are available
inside the @code{BEGIN} rule
@@ -3857,8 +3860,8 @@ The @option{-v} option can only set one variable, but it
can be used
more than once, setting another variable each time, like this:
@samp{awk @w{-v foo=1} @w{-v bar=2} @dots{}}.
-@cindex predefined variables, @code{-v} option@comma{} setting with
-@cindex variables, predefined, @code{-v} option@comma{} setting with
+@cindex predefined variables @subentry @code{-v} option, setting with
+@cindex variables @subentry predefined @subentry @code{-v} option, setting with
@quotation CAUTION
Using @option{-v} to set the values of the built-in
variables may lead to surprising results. @command{awk} will reset the
@@ -3877,15 +3880,15 @@ the abbreviations remain unique.
The full list of @command{gawk}-specific options is provided next.
@item --
-@cindex command line, options, end of
-@cindex options, command-line, end of
+@cindex command line @subentry options @subentry end of
+@cindex options @subentry command-line @subentry end of
Signal the end of the command-line options. The following arguments
are not treated as options even if they begin with @samp{-}. This
interpretation of @option{--} follows the POSIX argument parsing
conventions.
-@cindex @code{-} (hyphen), file names beginning with
-@cindex hyphen (@code{-}), file names beginning with
+@cindex @code{-} (hyphen) @subentry file names beginning with
+@cindex hyphen (@code{-}) @subentry file names beginning with
This is useful if you have @value{FN}s that start with @samp{-},
or in shell scripts, if you have @value{FN}s that will be specified
by the user that could start with @samp{-}.
@@ -3916,7 +3919,7 @@ multibyte characters. This option is an easy way to tell
@command{gawk},
@itemx @option{--traditional}
@cindex @option{-c} option
@cindex @option{--traditional} option
-@cindex compatibility mode (@command{gawk}), specifying
+@cindex compatibility mode (@command{gawk}) @subentry specifying
Specify @dfn{compatibility mode}, in which the GNU extensions to
the @command{awk} language are disabled, so that @command{gawk} behaves just
like BWK @command{awk}.
@@ -3931,7 +3934,7 @@ Also see
@itemx @option{--copyright}
@cindex @option{-C} option
@cindex @option{--copyright} option
-@cindex GPL (General Public License), printing
+@cindex GPL (General Public License) @subentry printing
Print the short version of the General Public License and then exit.
@item @option{-d}[@var{file}]
@@ -3940,15 +3943,15 @@ Print the short version of the General Public License
and then exit.
@cindex @option{--dump-variables} option
@cindex dump all variables of a program
@cindex @file{awkvars.out} file
-@cindex files, @file{awkvars.out}
-@cindex variables, global, printing list of
+@cindex files @subentry @file{awkvars.out}
+@cindex variables @subentry global @subentry printing list of
Print a sorted list of global variables, their types, and final values
to @var{file}. If no @var{file} is provided, print this
list to a file named @file{awkvars.out} in the current directory.
No space is allowed between the @option{-d} and @var{file}, if
@var{file} is supplied.
-@cindex troubleshooting, typographical errors@comma{} global variables
+@cindex troubleshooting @subentry typographical errors, global variables
Having a list of all global variables is a good way to look for
typographical errors in your programs.
You would also use this option if you have a large program with a lot of
@@ -3961,7 +3964,7 @@ names like @code{i}, @code{j}, etc.)
@itemx @option{--debug}[@code{=}@var{file}]
@cindex @option{-D} option
@cindex @option{--debug} option
-@cindex @command{awk} debugging, enabling
+@cindex @command{awk} programs @subentry debugging, enabling
Enable debugging of @command{awk} programs
(@pxref{Debugging}).
By default, the debugger reads commands interactively from the keyboard
@@ -3975,7 +3978,7 @@ No space is allowed between the @option{-D} and
@var{file}, if
@itemx @option{--source} @var{program-text}
@cindex @option{-e} option
@cindex @option{--source} option
-@cindex source code, mixing
+@cindex source code @subentry mixing
Provide program source code in the @var{program-text}.
This option allows you to mix source code in files with source
code that you enter on the command line.
@@ -4010,7 +4013,7 @@ for more information.
@itemx @option{--exec} @var{file}
@cindex @option{-E} option
@cindex @option{--exec} option
-@cindex @command{awk} programs, location of
+@cindex @command{awk} programs @subentry location of
@cindex CGI, @command{awk} scripts for
Similar to @option{-f}, read @command{awk} program text from @var{file}.
There are two differences from @option{-f}:
@@ -4047,8 +4050,8 @@ with @samp{#!} scripts (@pxref{Executable Scripts}), like
so:
@itemx @option{--gen-pot}
@cindex @option{-g} option
@cindex @option{--gen-pot} option
-@cindex portable object files, generating
-@cindex files, portable object, generating
+@cindex portable object @subentry files @subentry generating
+@cindex files @subentry portable object @subentry generating
Analyze the source program and
generate a GNU @command{gettext} portable object template file on standard
output for all string constants that have been marked for translation.
@@ -4059,9 +4062,9 @@ for information about this option.
@itemx @option{--help}
@cindex @option{-h} option
@cindex @option{--help} option
-@cindex GNU long options, printing list of
-@cindex options, printing list of
-@cindex printing, list of options
+@cindex GNU long options @subentry printing list of
+@cindex options @subentry printing list of
+@cindex printing @subentry list of options
Print a ``usage'' message summarizing the short- and long-style options
that @command{gawk} accepts and then exit.
@@ -4069,7 +4072,7 @@ that @command{gawk} accepts and then exit.
@itemx @option{--include} @var{source-file}
@cindex @option{-i} option
@cindex @option{--include} option
-@cindex @command{awk} programs, location of
+@cindex @command{awk} programs @subentry location of
Read an @command{awk} source library from @var{source-file}. This option
is completely equivalent to using the @code{@@include} directive inside
your program. It is very similar to the @option{-f} option,
@@ -4089,7 +4092,7 @@ at their beginning. @xref{Changing The Namespace}, for
more information.
@itemx @option{--load} @var{ext}
@cindex @option{-l} option
@cindex @option{--load} option
-@cindex loading, extensions
+@cindex loading extensions
Load a dynamic extension named @var{ext}. Extensions
are stored as system shared libraries.
This option searches for the library using the @env{AWKLIBPATH}
@@ -4103,7 +4106,7 @@ a shared library. This advanced feature is described in
detail in @ref{Dynamic
@itemx @option{--lint}[@code{=}@var{value}]
@cindex @option{-l} option
@cindex @option{--lint} option
-@cindex lint checking, issuing warnings
+@cindex lint checking @subentry issuing warnings
@cindex warnings, issuing
Warn about constructs that are dubious or nonportable to
other @command{awk} implementations.
@@ -4138,9 +4141,9 @@ if @command{gawk} is not compiled to use the GNU MPFR and
MP libraries
@itemx @option{--non-decimal-data}
@cindex @option{-n} option
@cindex @option{--non-decimal-data} option
-@cindex hexadecimal values@comma{} enabling interpretation of
-@cindex octal values@comma{} enabling interpretation of
-@cindex troubleshooting, @code{--non-decimal-data} option
+@cindex hexadecimal values, enabling interpretation of
+@cindex octal values, enabling interpretation of
+@cindex troubleshooting @subentry @code{--non-decimal-data} option
Enable automatic interpretation of octal and hexadecimal
values in input data
(@pxref{Nondecimal Data}).
@@ -4193,7 +4196,7 @@ be used to cancel the effect of an earlier @option{-s}
option
@itemx @option{--profile}[@code{=}@var{file}]
@cindex @option{-p} option
@cindex @option{--profile} option
-@cindex @command{awk} profiling, enabling
+@cindex @command{awk} @subentry profiling, enabling
Enable profiling of @command{awk} programs
(@pxref{Profiling}).
Implies @option{--no-optimize}.
@@ -4211,7 +4214,7 @@ in the left margin, and function call counts for each
function.
@cindex @option{-P} option
@cindex @option{--posix} option
@cindex POSIX mode
-@cindex @command{gawk}, extensions@comma{} disabling
+@cindex @command{gawk} @subentry extensions, disabling
Operate in strict POSIX mode. This disables all @command{gawk}
extensions (just like @option{--traditional}) and
disables all extensions not allowed by POSIX.
@@ -4224,13 +4227,13 @@ restrictions apply:
@itemize @value{BULLET}
@cindex newlines
-@cindex whitespace, newlines as
+@cindex whitespace @subentry newlines as
@item
Newlines are not allowed after @samp{?} or @samp{:}
(@pxref{Conditional Exp}).
-@cindex @code{FS} variable, TAB character as
+@cindex @code{FS} variable @subentry TAB character as
@item
Specifying @samp{-Ft} on the command line does not set the value
of @code{FS} to be a single TAB character
@@ -4245,8 +4248,8 @@ data (@pxref{Locales}).
@c @cindex automatic warnings
@c @cindex warnings, automatic
-@cindex @option{--traditional} option, @code{--posix} option and
-@cindex @option{--posix} option, @code{--traditional} option and
+@cindex @option{--traditional} option @subentry @code{--posix} option and
+@cindex @option{--posix} option @subentry @code{--traditional} option and
If you supply both @option{--traditional} and @option{--posix} on the
command line, @option{--posix} takes precedence. @command{gawk}
issues a warning if both options are supplied.
@@ -4255,7 +4258,7 @@ issues a warning if both options are supplied.
@itemx @option{--re-interval}
@cindex @option{-r} option
@cindex @option{--re-interval} option
-@cindex regular expressions, interval expressions and
+@cindex regular expressions @subentry interval expressions and
Allow interval expressions
(@pxref{Regexp Operators})
in regexps.
@@ -4298,27 +4301,34 @@ Warn about constructs that are not available in the
original version of
@itemx @option{--version}
@cindex @option{-V} option
@cindex @option{--version} option
-@cindex @command{gawk}, versions of, information about@comma{} printing
+@cindex @command{gawk} @subentry version of @subentry printing information
about
Print version information for this particular copy of @command{gawk}.
This allows you to determine if your copy of @command{gawk} is up to date
with respect to whatever the Free Software Foundation is currently
distributing.
It is also useful for bug reports
(@pxref{Bugs}).
+
+@cindex @code{-} (hyphen) @subentry @code{--} end of options marker
+@cindex hyphen (@code{-}) @subentry @code{--} end of options marker
+@item @code{--}
+Mark the end of all options.
+Any command-line arguments following @code{--} are placed in @code{ARGV},
+even if they start with a minus sign.
@end table
As long as program text has been supplied,
any other options are flagged as invalid with a warning message but
are otherwise ignored.
-@cindex @option{-F} option, @option{-Ft} sets @code{FS} to TAB
+@cindex @option{-F} option @subentry @option{-Ft} sets @code{FS} to TAB
In compatibility mode, as a special case, if the value of @var{fs} supplied
to the @option{-F} option is @samp{t}, then @code{FS} is set to the TAB
character (@code{"\t"}). This is true only for @option{--traditional} and not
for @option{--posix}
(@pxref{Field Separators}).
-@cindex @option{-f} option, multiple uses
+@cindex @option{-f} option @subentry multiple uses
The @option{-f} option may be used more than once on the command line.
If it is, @command{awk} reads its program source from all of the named files,
as
if they had been concatenated together into one big file. This is
@@ -4355,7 +4365,8 @@ the command line that follow the program text are entered
into the
command line looking for options.
@cindex @env{POSIXLY_CORRECT} environment variable
-@cindex lint checking, @env{POSIXLY_CORRECT} environment variable
+@cindex environment variables @subentry @env{POSIXLY_CORRECT}
+@cindex lint checking @subentry @env{POSIXLY_CORRECT} environment variable
@cindex POSIX mode
If the environment variable @env{POSIXLY_CORRECT} exists,
then @command{gawk} behaves in strict POSIX mode, exactly as if
@@ -4377,7 +4388,7 @@ POSIXLY_CORRECT=true
export POSIXLY_CORRECT
@end example
-@cindex @command{csh} utility, @env{POSIXLY_CORRECT} environment variable
+@cindex @command{csh} utility @subentry @env{POSIXLY_CORRECT} environment
variable
For a C shell-compatible
shell,@footnote{Not recommended.}
you would add this line to the @file{.login} file in your home directory:
@@ -4386,15 +4397,15 @@ you would add this line to the @file{.login} file in
your home directory:
setenv POSIXLY_CORRECT true
@end example
-@cindex portability, @env{POSIXLY_CORRECT} environment variable
+@cindex portability @subentry @env{POSIXLY_CORRECT} environment variable
Having @env{POSIXLY_CORRECT} set is not recommended for daily use,
but it is good for testing the portability of your programs to other
environments.
@node Other Arguments
@section Other Command-Line Arguments
-@cindex command line, arguments
-@cindex arguments, command-line
+@cindex command line @subentry arguments
+@cindex arguments @subentry command-line
Any additional arguments on the command line are normally treated as
input files to be processed in the order specified. However, an
@@ -4416,10 +4427,10 @@ a variable assignment), precede the file name with
@samp{./}, like so:
awk -f program.awk file1 ./count=1 file2
@end example
-@cindex @command{gawk}, @code{ARGIND} variable in
-@cindex @code{ARGIND} variable, command-line arguments
+@cindex @command{gawk} @subentry @code{ARGIND} variable in
+@cindex @code{ARGIND} variable @subentry command-line arguments
@cindex @code{ARGV} array, indexing into
-@cindex @code{ARGC}/@code{ARGV} variables, command-line arguments
+@cindex @code{ARGC}/@code{ARGV} variables @subentry command-line arguments
All the command-line arguments are made available to your @command{awk}
program in the
@code{ARGV} array (@pxref{Built-in Variables}). Command-line options
and the program text (if present) are omitted from @code{ARGV}.
@@ -4433,7 +4444,7 @@ Changing @code{ARGC} and @code{ARGV} in your
@command{awk} program lets
you control how @command{awk} processes the input files; this is described
in more detail in @ref{ARGC and ARGV}.
-@cindex input files, variable assignments and
+@cindex input files @subentry variable assignments and
@cindex variable assignments and input files
The distinction between @value{FN} arguments and variable-assignment
arguments is made when @command{awk} is about to open the next input file.
@@ -4448,7 +4459,7 @@ variables assigned in this fashion are @emph{not}
available inside a
(@pxref{BEGIN/END}),
because such rules are run before @command{awk} begins scanning the argument
list.
-@cindex dark corner, escape sequences
+@cindex dark corner @subentry escape sequences
The variable values given on the command line are processed for escape
sequences (@pxref{Escape Sequences}).
@value{DARKCORNER}
@@ -4469,7 +4480,7 @@ output formats, before scanning the @value{DF}s. It is
also useful for
controlling state if multiple passes are needed over a @value{DF}. For
example:
-@cindex files, multiple passes over
+@cindex files @subentry multiple passes over
@example
awk 'pass == 1 @{ @var{pass 1 stuff} @}
pass == 2 @{ @var{pass 2 stuff} @}' pass=1 mydata pass=2 mydata
@@ -4514,7 +4525,7 @@ this @value{FN} itself.)
@node Environment Variables
@section The Environment Variables @command{gawk} Uses
-@cindex environment variables used by @command{gawk}
+@cindex environment variables @subentry used by @command{gawk}
A number of environment variables influence how @command{gawk}
behaves.
@@ -4530,9 +4541,10 @@ behaves.
@node AWKPATH Variable
@subsection The @env{AWKPATH} Environment Variable
@cindex @env{AWKPATH} environment variable
-@cindex directories, searching for source files
-@cindex search paths, for source files
-@cindex differences in @command{awk} and @command{gawk}, @env{AWKPATH}
environment variable
+@cindex environment variables @subentry @env{AWKPATH}
+@cindex directories @subentry searching @subentry for source files
+@cindex search paths @subentry for source files
+@cindex differences in @command{awk} and @command{gawk} @subentry
@env{AWKPATH} environment variable
@ifinfo
The previous @value{SECTION} described how @command{awk} program files can be
named
on the command line with the @option{-f} option.
@@ -4616,9 +4628,10 @@ found, and @command{gawk} no longer needs to use
@env{AWKPATH}.
@node AWKLIBPATH Variable
@subsection The @env{AWKLIBPATH} Environment Variable
@cindex @env{AWKLIBPATH} environment variable
-@cindex directories, searching for loadable extensions
-@cindex search paths, for loadable extensions
-@cindex differences in @command{awk} and @command{gawk}, @code{AWKLIBPATH}
environment variable
+@cindex environment variables @subentry @env{AWKLIBPATH}
+@cindex directories @subentry searching @subentry for loadable extensions
+@cindex search paths @subentry for loadable extensions
+@cindex differences in @command{awk} and @command{gawk} @subentry
@code{AWKLIBPATH} environment variable
The @env{AWKLIBPATH} environment variable is similar to the @env{AWKPATH}
variable, but it is used to search for loadable extensions (stored as
@@ -4772,9 +4785,11 @@ to @code{EXIT_FAILURE}.
This @value{SECTION} describes a feature that is specific to @command{gawk}.
-@cindex @code{@@include} directive
+@cindex @code{@@} (at-sign) @subentry @code{@@include} directive
+@cindex at-sign (@code{@@}) @subentry @code{@@include} directive
@cindex file inclusion, @code{@@include} directive
@cindex including files, @code{@@include} directive
+@cindex @code{@@include} directive @sortas{include directive}
The @code{@@include} keyword can be used to read external @command{awk} source
files. This gives you the ability to split large @command{awk} source files
into smaller, more manageable pieces, and also lets you reuse common
@command{awk}
@@ -4900,9 +4915,11 @@ at their beginning. @xref{Changing The Namespace}, for
more information.
This @value{SECTION} describes a feature that is specific to @command{gawk}.
-@cindex @code{@@load} directive
-@cindex loading extensions, @code{@@load} directive
-@cindex extensions, loading, @code{@@load} directive
+@cindex @code{@@} (at-sign) @subentry @code{@@load} directive
+@cindex at-sign (@code{@@}) @subentry @code{@@load} directive
+@cindex loading extensions @subentry @code{@@load} directive
+@cindex extensions @subentry loadable @subentry loading, @code{@@load}
directive
+@cindex @code{@@load} directive @sortas{load directive}
The @code{@@load} keyword can be used to read external @command{awk} extensions
(stored as system shared libraries).
This allows you to link in compiled code that may offer superior
@@ -4945,8 +4962,8 @@ It also describes the @code{ordchr} extension.
@c update this section for each release!
-@cindex options, deprecated
-@cindex features, deprecated
+@cindex options @subentry deprecated
+@cindex features @subentry deprecated
@cindex obsolete features
This @value{SECTION} describes features and/or command-line options from
previous releases of @command{gawk} that either are not available in the
@@ -4968,7 +4985,7 @@ in case some option becomes obsolete in a future version
of @command{gawk}.
@node Undocumented
@section Undocumented Options and Features
@cindex undocumented features
-@cindex features, undocumented
+@cindex features @subentry undocumented
@cindex Skywalker, Luke
@cindex Kenobi, Obi-Wan
@cindex jedi knights
@@ -4978,7 +4995,7 @@ in case some option becomes obsolete in a future version
of @command{gawk}.
@author Obi-Wan
@end quotation
-@cindex shells, sea
+@cindex shells @subentry sea
This @value{SECTION} intentionally left
blank.
@@ -5162,8 +5179,8 @@ set of strings.
Because regular expressions are such a fundamental part of @command{awk}
programming, their format and use deserve a separate @value{CHAPTER}.
-@cindex forward slash (@code{/}) to enclose regular expressions
-@cindex @code{/} (forward slash) to enclose regular expressions
+@cindex forward slash (@code{/}) @subentry to enclose regular expressions
+@cindex @code{/} (forward slash) @subentry to enclose regular expressions
A regular expression enclosed in slashes (@samp{/})
is an @command{awk} pattern that matches every input record whose text
belongs to that set.
@@ -5195,8 +5212,8 @@ regular expressions work, we present more complicated
instances.
@node Regexp Usage
@section How to Use Regular Expressions
-@cindex patterns, regular expressions as
-@cindex regular expressions, as patterns
+@cindex patterns @subentry regexp constants as
+@cindex regular expressions @subentry as patterns
A regular expression can be used as a pattern by enclosing it in
slashes. Then the regular expression is tested against the
entire text of each record. (Normally, it only needs
@@ -5212,18 +5229,18 @@ $ @kbd{awk '/li/ @{ print $2 @}' mail-list}
@print{} 555-3430
@end example
-@cindex regular expressions, operators
-@cindex operators, string-matching
+@cindex regular expressions @subentry operators
+@cindex operators @subentry string-matching
@c @cindex operators, @code{~}
@cindex string-matching operators
@cindex @code{~} (tilde), @code{~} operator
@cindex tilde (@code{~}), @code{~} operator
-@cindex @code{!} (exclamation point), @code{!~} operator
-@cindex exclamation point (@code{!}), @code{!~} operator
+@cindex @code{!} (exclamation point) @subentry @code{!~} operator
+@cindex exclamation point (@code{!}) @subentry @code{!~} operator
@c @cindex operators, @code{!~}
-@cindex @code{if} statement, use of regexps in
-@cindex @code{while} statement, use of regexps in
-@cindex @code{do}-@code{while} statement, use of regexps in
+@cindex @code{if} statement @subentry use of regexps in
+@cindex @code{while} statement @subentry use of regexps in
+@cindex @code{do}-@code{while} statement @subentry use of regexps in
@c @cindex statements, @code{if}
@c @cindex statements, @code{while}
@c @cindex statements, @code{do}
@@ -5281,8 +5298,8 @@ $ @kbd{awk '$1 !~ /J/' inventory-shipped}
@end example
@cindex regexp constants
-@cindex constant regexps
-@cindex regular expressions, constants, See regexp constants
+@cindex constants @subentry regexp
+@cindex regular expressions, constants @seeentry{regexp constants}
When a regexp is enclosed in slashes, such as @code{/foo/}, we call it
a @dfn{regexp constant}, much like @code{5.27} is a numeric constant and
@code{"foo"} is a string constant.
@@ -5290,9 +5307,10 @@ a @dfn{regexp constant}, much like @code{5.27} is a
numeric constant and
@node Escape Sequences
@section Escape Sequences
-@cindex escape sequences, in strings
-@cindex backslash (@code{\}), in escape sequences
-@cindex @code{\} (backslash), in escape sequences
+@cindex escape sequences
+@cindex escape sequences @seealso{backslash}
+@cindex backslash (@code{\}) @subentry in escape sequences
+@cindex @code{\} (backslash) @subentry in escape sequences
Some characters cannot be included literally in string constants
(@code{"foo"}) or regexp constants (@code{/foo/}).
Instead, they should be represented with @dfn{escape sequences},
@@ -5322,50 +5340,51 @@ all the escape sequences used in @command{awk} and
what they represent. Unless noted otherwise, all these escape
sequences apply to both string constants and regexp constants:
+@cindex ASCII
@table @code
@item \\
A literal backslash, @samp{\}.
@c @cindex @command{awk} language, V.4 version
-@cindex @code{\} (backslash), @code{\a} escape sequence
-@cindex backslash (@code{\}), @code{\a} escape sequence
+@cindex @code{\} (backslash) @subentry @code{\a} escape sequence
+@cindex backslash (@code{\}) @subentry @code{\a} escape sequence
@item \a
The ``alert'' character, @kbd{Ctrl-g}, ASCII code 7 (BEL).
(This often makes some sort of audible noise.)
-@cindex @code{\} (backslash), @code{\b} escape sequence
-@cindex backslash (@code{\}), @code{\b} escape sequence
+@cindex @code{\} (backslash) @subentry @code{\b} escape sequence
+@cindex backslash (@code{\}) @subentry @code{\b} escape sequence
@item \b
Backspace, @kbd{Ctrl-h}, ASCII code 8 (BS).
-@cindex @code{\} (backslash), @code{\f} escape sequence
-@cindex backslash (@code{\}), @code{\f} escape sequence
+@cindex @code{\} (backslash) @subentry @code{\f} escape sequence
+@cindex backslash (@code{\}) @subentry @code{\f} escape sequence
@item \f
Formfeed, @kbd{Ctrl-l}, ASCII code 12 (FF).
-@cindex @code{\} (backslash), @code{\n} escape sequence
-@cindex backslash (@code{\}), @code{\n} escape sequence
+@cindex @code{\} (backslash) @subentry @code{\n} escape sequence
+@cindex backslash (@code{\}) @subentry @code{\n} escape sequence
@item \n
Newline, @kbd{Ctrl-j}, ASCII code 10 (LF).
-@cindex @code{\} (backslash), @code{\r} escape sequence
-@cindex backslash (@code{\}), @code{\r} escape sequence
+@cindex @code{\} (backslash) @subentry @code{\r} escape sequence
+@cindex backslash (@code{\}) @subentry @code{\r} escape sequence
@item \r
Carriage return, @kbd{Ctrl-m}, ASCII code 13 (CR).
-@cindex @code{\} (backslash), @code{\t} escape sequence
-@cindex backslash (@code{\}), @code{\t} escape sequence
+@cindex @code{\} (backslash) @subentry @code{\t} escape sequence
+@cindex backslash (@code{\}) @subentry @code{\t} escape sequence
@item \t
Horizontal TAB, @kbd{Ctrl-i}, ASCII code 9 (HT).
@c @cindex @command{awk} language, V.4 version
-@cindex @code{\} (backslash), @code{\v} escape sequence
-@cindex backslash (@code{\}), @code{\v} escape sequence
+@cindex @code{\} (backslash) @subentry @code{\v} escape sequence
+@cindex backslash (@code{\}) @subentry @code{\v} escape sequence
@item \v
Vertical TAB, @kbd{Ctrl-k}, ASCII code 11 (VT).
-@cindex @code{\} (backslash), @code{\}@var{nnn} escape sequence
-@cindex backslash (@code{\}), @code{\}@var{nnn} escape sequence
+@cindex @code{\} (backslash) @subentry @code{\}@var{nnn} escape sequence
+@cindex backslash (@code{\}) @subentry @code{\}@var{nnn} escape sequence
@item \@var{nnn}
The octal value @var{nnn}, where @var{nnn} stands for 1 to 3 digits
between @samp{0} and @samp{7}. For example, the code for the ASCII ESC
@@ -5373,10 +5392,10 @@ between @samp{0} and @samp{7}. For example, the code
for the ASCII ESC
@c @cindex @command{awk} language, V.4 version
@c @cindex @command{awk} language, POSIX version
-@cindex @code{\} (backslash), @code{\x} escape sequence
-@cindex backslash (@code{\}), @code{\x} escape sequence
-@cindex common extensions, @code{\x} escape sequence
-@cindex extensions, common@comma{} @code{\x} escape sequence
+@cindex @code{\} (backslash) @subentry @code{\x} escape sequence
+@cindex backslash (@code{\}) @subentry @code{\x} escape sequence
+@cindex common extensions @subentry @code{\x} escape sequence
+@cindex extensions @subentry common @subentry @code{\x} escape sequence
@item \x@var{hh}@dots{}
The hexadecimal value @var{hh}, where @var{hh} stands for a sequence
of hexadecimal digits (@samp{0}--@samp{9}, and either @samp{A}--@samp{F}
@@ -5397,8 +5416,8 @@ As of @value{PVERSION} 4.2, only two digits
are processed.
@end quotation
-@cindex @code{\} (backslash), @code{\/} escape sequence
-@cindex backslash (@code{\}), @code{\/} escape sequence
+@cindex @code{\} (backslash) @subentry @code{\/} escape sequence
+@cindex backslash (@code{\}) @subentry @code{\/} escape sequence
@item \/
A literal slash (necessary for regexp constants only).
This sequence is used when you want to write a regexp
@@ -5409,8 +5428,8 @@ Because the regexp is delimited by
slashes, you need to escape any slash that is part of the pattern,
in order to tell @command{awk} to keep processing the rest of the regexp.
-@cindex @code{\} (backslash), @code{\"} escape sequence
-@cindex backslash (@code{\}), @code{\"} escape sequence
+@cindex @code{\} (backslash) @subentry @code{\"} escape sequence
+@cindex backslash (@code{\}) @subentry @code{\"} escape sequence
@item \"
A literal double quote (necessary for string constants only).
This sequence is used when you want to write a string
@@ -5432,25 +5451,25 @@ means that the next character should be taken
literally, even if it would
normally be a regexp operator. For example, @code{/a\+b/} matches the three
characters @samp{a+b}.
-@cindex backslash (@code{\}), in escape sequences
-@cindex @code{\} (backslash), in escape sequences
+@cindex backslash (@code{\}) @subentry in escape sequences
+@cindex @code{\} (backslash) @subentry in escape sequences
@cindex portability
For complete portability, do not use a backslash before any character not
shown in the previous list or that is not an operator.
@c 11/2014: Moved so as to not stack sidebars
-@cindex sidebar, Backslash Before Regular Characters
+@cindex sidebar @subentry Backslash Before Regular Characters
@ifdocbook
@docbook
<sidebar><title>Backslash Before Regular Characters</title>
@end docbook
-@cindex portability, backslash in escape sequences
-@cindex POSIX @command{awk}, backslashes in string constants
-@cindex backslash (@code{\}), in escape sequences, POSIX and
-@cindex @code{\} (backslash), in escape sequences, POSIX and
+@cindex portability @subentry backslash in escape sequences
+@cindex POSIX @command{awk} @subentry backslashes in string constants
+@cindex backslash (@code{\}) @subentry in escape sequences @subentry POSIX and
+@cindex @code{\} (backslash) @subentry in escape sequences @subentry POSIX and
-@cindex troubleshooting, backslash before nonspecial character
+@cindex troubleshooting @subentry backslash before nonspecial character
If you place a backslash in a string constant before something that is
not one of the characters previously listed, POSIX @command{awk} purposely
leaves what happens as undefined. There are two choices:
@@ -5469,8 +5488,9 @@ surrounded by whitespace as the field separator. There
should be
two backslashes in the string: @samp{FS = @w{"[ \t]+\\|[ \t]+"}}.)
@c I did this! This is why I added the warning.
-@cindex @command{gawk}, escape sequences
-@cindex Unix @command{awk}, backslashes in escape sequences
+@cindex @command{gawk} @subentry escape sequences
+@cindex @command{gawk} @subentry escape sequences @seealso{backslash}
+@cindex Unix @command{awk} @subentry backslashes in escape sequences
@cindex @command{mawk} utility
@item Leave the backslash alone
Some other @command{awk} implementations do this.
@@ -5488,12 +5508,12 @@ In such implementations, typing @code{"a\qc"} is the
same as typing
@center @b{Backslash Before Regular Characters}
-@cindex portability, backslash in escape sequences
-@cindex POSIX @command{awk}, backslashes in string constants
-@cindex backslash (@code{\}), in escape sequences, POSIX and
-@cindex @code{\} (backslash), in escape sequences, POSIX and
+@cindex portability @subentry backslash in escape sequences
+@cindex POSIX @command{awk} @subentry backslashes in string constants
+@cindex backslash (@code{\}) @subentry in escape sequences @subentry POSIX and
+@cindex @code{\} (backslash) @subentry in escape sequences @subentry POSIX and
-@cindex troubleshooting, backslash before nonspecial character
+@cindex troubleshooting @subentry backslash before nonspecial character
If you place a backslash in a string constant before something that is
not one of the characters previously listed, POSIX @command{awk} purposely
leaves what happens as undefined. There are two choices:
@@ -5512,8 +5532,9 @@ surrounded by whitespace as the field separator. There
should be
two backslashes in the string: @samp{FS = @w{"[ \t]+\\|[ \t]+"}}.)
@c I did this! This is why I added the warning.
-@cindex @command{gawk}, escape sequences
-@cindex Unix @command{awk}, backslashes in escape sequences
+@cindex @command{gawk} @subentry escape sequences
+@cindex @command{gawk} @subentry escape sequences @seealso{backslash}
+@cindex Unix @command{awk} @subentry backslashes in escape sequences
@cindex @command{mawk} utility
@item Leave the backslash alone
Some other @command{awk} implementations do this.
@@ -5542,13 +5563,13 @@ A backslash before any other character means to treat
that character
literally.
@end itemize
-@cindex sidebar, Escape Sequences for Metacharacters
+@cindex sidebar @subentry Escape Sequences for Metacharacters
@ifdocbook
@docbook
<sidebar><title>Escape Sequences for Metacharacters</title>
@end docbook
-@cindex metacharacters, escape sequences for
+@cindex metacharacters @subentry escape sequences for
Suppose you use an octal or hexadecimal
escape to represent a regexp metacharacter.
@@ -5556,7 +5577,7 @@ escape to represent a regexp metacharacter.
Does @command{awk} treat the character as a literal character or as a regexp
operator?
-@cindex dark corner, escape sequences, for metacharacters
+@cindex dark corner @subentry escape sequences @subentry for metacharacters
Historically, such characters were taken literally.
@value{DARKCORNER}
However, the POSIX standard indicates that they should be treated
@@ -5576,7 +5597,7 @@ escape sequences literally when used in regexp constants.
Thus,
@center @b{Escape Sequences for Metacharacters}
-@cindex metacharacters, escape sequences for
+@cindex metacharacters @subentry escape sequences for
Suppose you use an octal or hexadecimal
escape to represent a regexp metacharacter.
@@ -5584,7 +5605,7 @@ escape to represent a regexp metacharacter.
Does @command{awk} treat the character as a literal character or as a regexp
operator?
-@cindex dark corner, escape sequences, for metacharacters
+@cindex dark corner @subentry escape sequences @subentry for metacharacters
Historically, such characters were taken literally.
@value{DARKCORNER}
However, the POSIX standard indicates that they should be treated
@@ -5598,8 +5619,8 @@ escape sequences literally when used in regexp constants.
Thus,
@node Regexp Operators
@section Regular Expression Operators
-@cindex regular expressions, operators
-@cindex metacharacters in regular expressions
+@cindex regular expressions @subentry operators
+@cindex metacharacters @subentry in regular expressions
You can combine regular expressions with special characters,
called @dfn{regular expression operators} or @dfn{metacharacters}, to
@@ -5627,17 +5648,17 @@ sequences and that are not listed here stand for
themselves:
@c Use @asis so the docbook comes out ok. Sigh.
@table @asis
-@cindex backslash (@code{\}), regexp operator
-@cindex @code{\} (backslash), regexp operator
+@cindex backslash (@code{\}) @subentry regexp operator
+@cindex @code{\} (backslash) @subentry regexp operator
@item @code{\}
This suppresses the special meaning of a character when
matching. For example, @samp{\$}
matches the character @samp{$}.
-@cindex regular expressions, anchors in
-@cindex Texinfo, chapter beginnings in files
-@cindex @code{^} (caret), regexp operator
-@cindex caret (@code{^}), regexp operator
+@cindex regular expressions @subentry anchors in
+@cindex Texinfo @subentry chapter beginnings in files
+@cindex @code{^} (caret) @subentry regexp operator
+@cindex caret (@code{^}) @subentry regexp operator
@item @code{^}
This matches the beginning of a string. @samp{^@@chapter}
matches @samp{@@chapter} at the beginning of a string,
@@ -5654,8 +5675,8 @@ The condition is not true in the following example:
if ("line1\nLINE 2" ~ /^L/) @dots{}
@end example
-@cindex @code{$} (dollar sign), regexp operator
-@cindex dollar sign (@code{$}), regexp operator
+@cindex @code{$} (dollar sign) @subentry regexp operator
+@cindex dollar sign (@code{$}) @subentry regexp operator
@item @code{$}
This is similar to @samp{^}, but it matches only at the end of a string.
For example, @samp{p$}
@@ -5679,7 +5700,8 @@ concatenation, we can make a regular expression such as
@samp{U.A}, which
matches any three-character sequence that begins with @samp{U} and ends
with @samp{A}.
-@cindex POSIX @command{awk}, period (@code{.})@comma{} using
+@cindex POSIX mode
+@cindex POSIX @command{awk} @subentry period (@code{.}), using
In strict POSIX mode (@pxref{Options}),
@samp{.} does not match the @sc{nul}
character, which is a character with all bits equal to zero.
@@ -5689,9 +5711,9 @@ may not be able to match the @sc{nul} character.
@cindex @code{[]} (square brackets), regexp operator
@cindex square brackets (@code{[]}), regexp operator
@cindex bracket expressions
-@cindex character sets, See Also bracket expressions
-@cindex character lists, See bracket expressions
-@cindex character classes, See bracket expressions
+@cindex character sets (in regular expressions) @seeentry{bracket expressions}
+@cindex character lists @seeentry{bracket expressions}
+@cindex character classes @seeentry{bracket expressions}
@item @code{[}@dots{}@code{]}
This is called a @dfn{bracket expression}.@footnote{In other literature,
you may see a bracket expression referred to as either a
@@ -5703,7 +5725,7 @@ discussion of what can be inside the square brackets of a
bracket expression
is given in
@ref{Bracket Expressions}.
-@cindex bracket expressions, complemented
+@cindex bracket expressions @subentry complemented
@item @code{[^}@dots{}@code{]}
This is a @dfn{complemented bracket expression}. The first character after
the @samp{[} @emph{must} be a @samp{^}. It matches any characters
@@ -5723,8 +5745,8 @@ a lowercase English vowel.
The alternation applies to the largest possible regexps on either side.
-@cindex @code{()} (parentheses), regexp operator
-@cindex parentheses @code{()}, regexp operator
+@cindex @code{()} (parentheses) @subentry regexp operator
+@cindex parentheses @code{()} @subentry regexp operator
@item @code{(}@dots{}@code{)}
Parentheses are used for grouping in regular expressions, as in
arithmetic. They can be used to concatenate regular expressions
@@ -5739,8 +5761,8 @@ one literally, precede it with a backslash. However, the
right or
closing parenthesis is only special when paired with a left parenthesis;
an unpaired right parenthesis is (silently) treated as a regular character.
-@cindex @code{*} (asterisk), @code{*} operator, as regexp operator
-@cindex asterisk (@code{*}), @code{*} operator, as regexp operator
+@cindex @code{*} (asterisk) @subentry @code{*} operator @subentry as regexp
operator
+@cindex asterisk (@code{*}) @subentry @code{*} operator @subentry as regexp
operator
@item @code{*}
This symbol means that the preceding regular expression should be
repeated as many times as necessary to find a match. For example, @samp{ph*}
@@ -5758,21 +5780,23 @@ Second, @samp{*} finds as many repetitions as possible.
If the text
to be matched is @samp{phhhhhhhhhhhhhhooey}, @samp{ph*} matches all of
the @samp{h}s.
-@cindex @code{+} (plus sign), regexp operator
-@cindex plus sign (@code{+}), regexp operator
+@cindex @code{+} (plus sign) @subentry regexp operator
+@cindex plus sign (@code{+}) @subentry regexp operator
@item @code{+}
This symbol is similar to @samp{*}, except that the preceding expression must
be
matched at least once. This means that @samp{wh+y}
would match @samp{why} and @samp{whhy}, but not @samp{wy}, whereas
@samp{wh*y} would match all three.
-@cindex @code{?} (question mark), regexp operator
-@cindex question mark (@code{?}), regexp operator
+@cindex @code{?} (question mark) @subentry regexp operator
+@cindex question mark (@code{?}) @subentry regexp operator
@item @code{?}
This symbol is similar to @samp{*}, except that the preceding expression can be
matched either once or not at all. For example, @samp{fe?d}
matches @samp{fed} and @samp{fd}, but nothing else.
+@cindex @code{@{@}} (braces) @subentry regexp operator
+@cindex braces (@code{@{@}}) @subentry regexp operator
@cindex interval expressions, regexp operator
@item @code{@{}@var{n}@code{@}}
@itemx @code{@{}@var{n}@code{,@}}
@@ -5797,16 +5821,16 @@ Matches @samp{whhy}, @samp{whhhy}, and so on.
@end table
@end table
-@cindex precedence, regexp operators
-@cindex regular expressions, operators, precedence of
+@cindex precedence @subentry regexp operators
+@cindex regular expressions @subentry operators @subentry precedence of
In regular expressions, the @samp{*}, @samp{+}, and @samp{?} operators,
as well as the braces @samp{@{} and @samp{@}},
have
the highest precedence, followed by concatenation, and finally by @samp{|}.
As in arithmetic, parentheses can change how operators are grouped.
-@cindex POSIX @command{awk}, regular expressions and
-@cindex @command{gawk}, regular expressions, precedence
+@cindex POSIX @command{awk} @subentry regular expressions and
+@cindex @command{gawk} @subentry regular expressions @subentry precedence
In POSIX @command{awk} and @command{gawk}, the @samp{*}, @samp{+}, and
@samp{?} operators stand for themselves when there is nothing in the
regexp that precedes them. For example, @code{/+/} matches a literal
@@ -5816,12 +5840,12 @@ usage as a syntax error.
@node Interval Expressions
@subsection Some Notes On Interval Expressions
-@cindex POSIX @command{awk}, interval expressions in
+@cindex POSIX @command{awk} @subentry interval expressions in
Interval expressions were not traditionally available in @command{awk}.
They were added as part of the POSIX standard to make @command{awk}
and @command{egrep} consistent with each other.
-@cindex @command{gawk}, interval expressions and
+@cindex @command{gawk} @subentry interval expressions and
Initially, because old programs may use @samp{@{} and @samp{@}} in regexp
constants,
@command{gawk} did @emph{not} match interval expressions
@@ -5854,9 +5878,9 @@ when in compatibility mode (@pxref{Options}).
@node Bracket Expressions
@section Using Bracket Expressions
@cindex bracket expressions
-@cindex bracket expressions, range expressions
+@cindex bracket expressions @subentry range expressions
@cindex range expressions (regexps)
-@cindex character lists in regular expressions
+@cindex bracket expressions @subentry character lists
As mentioned earlier, a bracket expression matches any character among
those listed between the opening and closing square brackets.
@@ -5878,12 +5902,12 @@ the range 0--256). To match a range of characters
where the endpoints
of the range are larger than 256, enter the multibyte encodings of
the characters directly.
-@cindex @code{\} (backslash), in bracket expressions
-@cindex backslash (@code{\}), in bracket expressions
-@cindex @code{^} (caret), in bracket expressions
-@cindex caret (@code{^}), in bracket expressions
-@cindex @code{-} (hyphen), in bracket expressions
-@cindex hyphen (@code{-}), in bracket expressions
+@cindex @code{\} (backslash) @subentry in bracket expressions
+@cindex backslash (@code{\}) @subentry in bracket expressions
+@cindex @code{^} (caret) @subentry in bracket expressions
+@cindex caret (@code{^}) @subentry in bracket expressions
+@cindex @code{-} (hyphen) @subentry in bracket expressions
+@cindex hyphen (@code{-}) @subentry in bracket expressions
To include one of the characters @samp{\}, @samp{]}, @samp{-}, or @samp{^} in a
bracket expression, put a @samp{\} in front of it. For example:
@@ -5897,7 +5921,7 @@ Additionally, if you place @samp{]} right after the
opening
@samp{[}, the closing bracket is treated as one of the
characters to be matched.
-@cindex POSIX @command{awk}, bracket expressions and
+@cindex POSIX @command{awk} @subentry bracket expressions and
@cindex Extended Regular Expressions (EREs)
@cindex EREs (Extended Regular Expressions)
@cindex @command{egrep} utility
@@ -5909,8 +5933,8 @@ of the POSIX specification for Extended Regular
Expressions (EREs).
POSIX EREs are based on the regular expressions accepted by the
traditional @command{egrep} utility.
-@cindex bracket expressions, character classes
-@cindex POSIX @command{awk}, bracket expressions and, character classes
+@cindex bracket expressions @subentry character classes
+@cindex POSIX @command{awk} @subentry bracket expressions and @subentry
character classes
@dfn{Character classes} are a feature introduced in the POSIX standard.
A character class is a special notation for describing
lists of characters that have a specific attribute, but the
@@ -5978,6 +6002,7 @@ depends on various factors out of our control.
@c Thanks to
@c Date: Tue, 01 Jul 2014 07:39:51 +0200
@c From: Hermann Peifer <address@hidden>
+@cindex ASCII
Some utilities that match regular expressions provide a nonstandard
@samp{[:ascii:]} character class; @command{awk} does not. However, you
can simulate such a construct using @samp{[\x00-\x7F]}. This matches
@@ -5992,8 +6017,8 @@ treat @code{[:blank:]} like @code{[:space:]}, incorrectly
matching
more characters than they should. Caveat Emptor.
@end quotation
-@cindex bracket expressions, collating elements
-@cindex bracket expressions, non-ASCII
+@cindex bracket expressions @subentry collating elements
+@cindex bracket expressions @subentry non-ASCII
@cindex collating elements
Two additional special sequences can appear in bracket expressions.
These apply to non-ASCII character sets, which can have single symbols
@@ -6004,7 +6029,7 @@ and a grave-accented ``@`e'' are equivalent.)
These sequences are:
@table @asis
-@cindex bracket expressions, collating symbols
+@cindex bracket expressions @subentry collating symbols
@cindex collating symbols
@item Collating symbols
Multicharacter collating elements enclosed between
@@ -6012,7 +6037,7 @@ Multicharacter collating elements enclosed between
then @samp{[[.ch.]]} is a regexp that matches this collating element, whereas
@samp{[ch]} is a regexp that matches either @samp{c} or @samp{h}.
-@cindex bracket expressions, equivalence classes
+@cindex bracket expressions @subentry equivalence classes
@item Equivalence classes
Locale-specific names for a list of
characters that are equal. The name is enclosed between
@@ -6024,9 +6049,9 @@ that matches any of @samp{e}, @samp{@^e}, @samp{@'e}, or
@samp{@`e}.
These features are very valuable in non-English-speaking locales.
-@cindex internationalization, localization, character classes
-@cindex @command{gawk}, character classes and
-@cindex POSIX @command{awk}, bracket expressions and, character classes
+@cindex internationalization @subentry localization @subentry character classes
+@cindex @command{gawk} @subentry character classes and
+@cindex POSIX @command{awk} @subentry bracket expressions and @subentry
character classes
@quotation CAUTION
The library functions that @command{gawk} uses for regular
expression matching currently recognize only POSIX character classes;
@@ -6041,7 +6066,7 @@ taken literally. This is also true of @samp{.} and
@samp{*}.
@node Leftmost Longest
@section How Much Text Matches?
-@cindex regular expressions, leftmost longest match
+@cindex regular expressions @subentry leftmost longest match
@c @cindex matching, leftmost longest
Consider the following:
@@ -6080,12 +6105,12 @@ and also @pxref{Field Separators}).
@node Computed Regexps
@section Using Dynamic Regexps
-@cindex regular expressions, computed
-@cindex regular expressions, dynamic
+@cindex regular expressions @subentry computed
+@cindex regular expressions @subentry dynamic
@cindex @code{~} (tilde), @code{~} operator
@cindex tilde (@code{~}), @code{~} operator
-@cindex @code{!} (exclamation point), @code{!~} operator
-@cindex exclamation point (@code{!}), @code{!~} operator
+@cindex @code{!} (exclamation point) @subentry @code{!~} operator
+@cindex exclamation point (@code{!}) @subentry @code{!~} operator
@c @cindex operators, @code{~}
@c @cindex operators, @code{!~}
The righthand side of a @samp{~} or @samp{!~} operator need not be a
@@ -6116,11 +6141,11 @@ on the right. This is true of any string-valued
expression (such as
@code{digits_regexp}, shown in the previous example), not just string
constants.
@end quotation
-@cindex regexp constants, slashes vs.@: quotes
-@cindex @code{\} (backslash), in regexp constants
-@cindex backslash (@code{\}), in regexp constants
-@cindex @code{"} (double quote), in regexp constants
-@cindex double quote (@code{"}), in regexp constants
+@cindex regexp constants @subentry slashes vs.@: quotes
+@cindex @code{\} (backslash) @subentry in regexp constants
+@cindex backslash (@code{\}) @subentry in regexp constants
+@cindex @code{"} (double quote) @subentry in regexp constants
+@cindex double quote (@code{"}) @subentry in regexp constants
What difference does it make if the string is
scanned twice? The answer has to do with escape sequences, and particularly
with backslashes. To get a backslash into a regular expression inside a
@@ -6132,9 +6157,9 @@ you have to type @code{"\\*"}. The first backslash
escapes the
second one so that the string actually contains the
two characters @samp{\} and @samp{*}.
-@cindex troubleshooting, regexp constants vs.@: string constants
-@cindex regexp constants, vs.@: string constants
-@cindex string constants, vs.@: regexp constants
+@cindex troubleshooting @subentry regexp constants vs.@: string constants
+@cindex regexp constants @subentry vs.@: string constants
+@cindex string @subentry constants @subentry vs.@: regexp constants
Given that you can use both regexp and string constants to describe
regular expressions, which should you use? The answer is ``regexp
constants,'' for several reasons:
@@ -6158,14 +6183,14 @@ Using regexp constants is better form; it shows clearly
that you
intend a regexp match.
@end itemize
-@cindex sidebar, Using @code{\n} in Bracket Expressions of Dynamic Regexps
+@cindex sidebar @subentry Using @code{\n} in Bracket Expressions of Dynamic
Regexps
@ifdocbook
@docbook
<sidebar><title>Using @code{\n} in Bracket Expressions of Dynamic
Regexps</title>
@end docbook
-@cindex regular expressions, dynamic, with embedded newlines
-@cindex newlines, in dynamic regexps
+@cindex regular expressions @subentry dynamic @subentry with embedded newlines
+@cindex newlines @subentry in dynamic regexps
Some older versions of @command{awk} do not allow the newline
character to be used inside a bracket expression for a dynamic regexp:
@@ -6179,7 +6204,7 @@ $ @kbd{awk '$0 ~ "[ \t\n]"'}
@error{} $0 ~ "[ >>> \t\n]" <<<
@end example
-@cindex newlines, in regexp constants
+@cindex newlines @subentry in regexp constants
But a newline in a regexp constant works with no problem:
@example
@@ -6202,8 +6227,8 @@ occur often in practice, but it's worth noting for future
reference.
@center @b{Using @code{\n} in Bracket Expressions of Dynamic Regexps}
-@cindex regular expressions, dynamic, with embedded newlines
-@cindex newlines, in dynamic regexps
+@cindex regular expressions @subentry dynamic @subentry with embedded newlines
+@cindex newlines @subentry in dynamic regexps
Some older versions of @command{awk} do not allow the newline
character to be used inside a bracket expression for a dynamic regexp:
@@ -6217,7 +6242,7 @@ $ @kbd{awk '$0 ~ "[ \t\n]"'}
@error{} $0 ~ "[ >>> \t\n]" <<<
@end example
-@cindex newlines, in regexp constants
+@cindex newlines @subentry in regexp constants
But a newline in a regexp constant works with no problem:
@example
@@ -6237,10 +6262,10 @@ occur often in practice, but it's worth noting for
future reference.
@c This section adapted (long ago) from the regex-0.12 manual
-@cindex regular expressions, operators, @command{gawk}
-@cindex @command{gawk}, regular expressions, operators
-@cindex operators, GNU-specific
-@cindex regular expressions, operators, for words
+@cindex regular expressions @subentry operators @subentry @command{gawk}
+@cindex @command{gawk} @subentry regular expressions @subentry operators
+@cindex operators @subentry GNU-specific
+@cindex regular expressions @subentry operators @subentry for words
@cindex word, regexp definition of
GNU software that deals with regular expressions provides a number of
additional regexp operators. These operators are described in this
@@ -6252,64 +6277,64 @@ or underscores (@samp{_}):
@table @code
@c @cindex operators, @code{\s} (@command{gawk})
-@cindex backslash (@code{\}), @code{\s} operator (@command{gawk})
-@cindex @code{\} (backslash), @code{\s} operator (@command{gawk})
+@cindex backslash (@code{\}) @subentry @code{\s} operator (@command{gawk})
+@cindex @code{\} (backslash) @subentry @code{\s} operator (@command{gawk})
@item \s
Matches any whitespace character.
Think of it as shorthand for
@w{@samp{[[:space:]]}}.
@c @cindex operators, @code{\S} (@command{gawk})
-@cindex backslash (@code{\}), @code{\S} operator (@command{gawk})
-@cindex @code{\} (backslash), @code{\S} operator (@command{gawk})
+@cindex backslash (@code{\}) @subentry @code{\S} operator (@command{gawk})
+@cindex @code{\} (backslash) @subentry @code{\S} operator (@command{gawk})
@item \S
Matches any character that is not whitespace.
Think of it as shorthand for
@w{@samp{[^[:space:]]}}.
@c @cindex operators, @code{\w} (@command{gawk})
-@cindex backslash (@code{\}), @code{\w} operator (@command{gawk})
-@cindex @code{\} (backslash), @code{\w} operator (@command{gawk})
+@cindex backslash (@code{\}) @subentry @code{\w} operator (@command{gawk})
+@cindex @code{\} (backslash) @subentry @code{\w} operator (@command{gawk})
@item \w
Matches any word-constituent character---that is, it matches any
letter, digit, or underscore. Think of it as shorthand for
@w{@samp{[[:alnum:]_]}}.
@c @cindex operators, @code{\W} (@command{gawk})
-@cindex backslash (@code{\}), @code{\W} operator (@command{gawk})
-@cindex @code{\} (backslash), @code{\W} operator (@command{gawk})
+@cindex backslash (@code{\}) @subentry @code{\W} operator (@command{gawk})
+@cindex @code{\} (backslash) @subentry @code{\W} operator (@command{gawk})
@item \W
Matches any character that is not word-constituent.
Think of it as shorthand for
@w{@samp{[^[:alnum:]_]}}.
@c @cindex operators, @code{\<} (@command{gawk})
-@cindex backslash (@code{\}), @code{\<} operator (@command{gawk})
-@cindex @code{\} (backslash), @code{\<} operator (@command{gawk})
+@cindex backslash (@code{\}) @subentry @code{\<} operator (@command{gawk})
+@cindex @code{\} (backslash) @subentry @code{\<} operator (@command{gawk})
@item \<
Matches the empty string at the beginning of a word.
For example, @code{/\<away/} matches @samp{away} but not
@samp{stowaway}.
@c @cindex operators, @code{\>} (@command{gawk})
-@cindex backslash (@code{\}), @code{\>} operator (@command{gawk})
-@cindex @code{\} (backslash), @code{\>} operator (@command{gawk})
+@cindex backslash (@code{\}) @subentry @code{\>} operator (@command{gawk})
+@cindex @code{\} (backslash) @subentry @code{\>} operator (@command{gawk})
@item \>
Matches the empty string at the end of a word.
For example, @code{/stow\>/} matches @samp{stow} but not @samp{stowaway}.
@c @cindex operators, @code{\y} (@command{gawk})
-@cindex backslash (@code{\}), @code{\y} operator (@command{gawk})
-@cindex @code{\} (backslash), @code{\y} operator (@command{gawk})
-@cindex word boundaries@comma{} matching
+@cindex backslash (@code{\}) @subentry @code{\y} operator (@command{gawk})
+@cindex @code{\} (backslash) @subentry @code{\y} operator (@command{gawk})
+@cindex word boundaries, matching
@item \y
Matches the empty string at either the beginning or the
end of a word (i.e., the word boundar@strong{y}). For example,
@samp{\yballs?\y}
matches either @samp{ball} or @samp{balls}, as a separate word.
@c @cindex operators, @code{\B} (@command{gawk})
-@cindex backslash (@code{\}), @code{\B} operator (@command{gawk})
-@cindex @code{\} (backslash), @code{\B} operator (@command{gawk})
+@cindex backslash (@code{\}) @subentry @code{\B} operator (@command{gawk})
+@cindex @code{\} (backslash) @subentry @code{\B} operator (@command{gawk})
@item \B
Matches the empty string that occurs between two
word-constituent characters. For example,
@@ -6317,9 +6342,9 @@ word-constituent characters. For example,
@samp{\B} is essentially the opposite of @samp{\y}.
@end table
-@cindex buffers, operators for
-@cindex regular expressions, operators, for buffers
-@cindex operators, string-matching, for buffers
+@cindex buffers @subentry operators for
+@cindex regular expressions @subentry operators @subentry for buffers
+@cindex operators @subentry string-matching @subentry for buffers
There are two other operators that work on buffers. In Emacs, a
@dfn{buffer} is, naturally, an Emacs buffer.
Other GNU programs, including @command{gawk},
@@ -6329,31 +6354,31 @@ The operators are:
@table @code
@item \`
@c @cindex operators, @code{\`} (@command{gawk})
-@cindex backslash (@code{\}), @code{\`} operator (@command{gawk})
-@cindex @code{\} (backslash), @code{\`} operator (@command{gawk})
+@cindex backslash (@code{\}) @subentry @code{\`} operator (@command{gawk})
+@cindex @code{\} (backslash) @subentry @code{\`} operator (@command{gawk})
Matches the empty string at the
beginning of a buffer (string)
@c @cindex operators, @code{\'} (@command{gawk})
-@cindex backslash (@code{\}), @code{\'} operator (@command{gawk})
-@cindex @code{\} (backslash), @code{\'} operator (@command{gawk})
+@cindex backslash (@code{\}) @subentry @code{\'} operator (@command{gawk})
+@cindex @code{\} (backslash) @subentry @code{\'} operator (@command{gawk})
@item \'
Matches the empty string at the
end of a buffer (string)
@end table
-@cindex @code{^} (caret), regexp operator
-@cindex caret (@code{^}), regexp operator
-@cindex @code{?} (question mark), regexp operator
-@cindex question mark (@code{?}), regexp operator
+@cindex @code{^} (caret) @subentry regexp operator
+@cindex caret (@code{^}) @subentry regexp operator
+@cindex @code{?} (question mark) @subentry regexp operator
+@cindex question mark (@code{?}) @subentry regexp operator
Because @samp{^} and @samp{$} always work in terms of the beginning
and end of strings, these operators don't add any new capabilities
for @command{awk}. They are provided for compatibility with other
GNU software.
-@cindex @command{gawk}, word-boundary operator
+@cindex @command{gawk} @subentry word-boundary operator
@cindex word-boundary operator (@command{gawk})
-@cindex operators, word-boundary (@command{gawk})
+@cindex operators @subentry word-boundary (@command{gawk})
In other GNU software, the word-boundary operator is @samp{\b}. However,
that conflicts with the @command{awk} language's definition of @samp{\b}
as backspace, so @command{gawk} uses a different letter.
@@ -6362,8 +6387,8 @@ GNU operators, but this was deemed too confusing. The
current
method of using @samp{\y} for the GNU @samp{\b} appears to be the
lesser of two evils.
-@cindex regular expressions, @command{gawk}, command-line options
-@cindex @command{gawk}, command-line options, and regular expressions
+@cindex regular expressions @subentry @command{gawk}, command-line options
+@cindex @command{gawk} @subentry command-line options, regular expressions and
The various command-line options
(@pxref{Options})
control how @command{gawk} interprets characters in regexps:
@@ -6406,8 +6431,8 @@ Otherwise, interval expressions are available by default.
@node Case-sensitivity
@section Case Sensitivity in Matching
-@cindex regular expressions, case sensitivity
-@cindex case sensitivity, regexps and
+@cindex regular expressions @subentry case sensitivity
+@cindex case sensitivity @subentry regexps and
Case is normally significant in regular expressions, both when matching
ordinary characters (i.e., not metacharacters) and inside bracket
expressions. Thus, a @samp{w} in a regular expression matches only a lowercase
@@ -6433,15 +6458,15 @@ tolower($1) ~ /foo/ @{ @dots{} @}
converts the first field to lowercase before matching against it.
This works in any POSIX-compliant @command{awk}.
-@cindex @command{gawk}, regular expressions, case sensitivity
-@cindex case sensitivity, @command{gawk}
-@cindex differences in @command{awk} and @command{gawk}, regular expressions
+@cindex @command{gawk} @subentry regular expressions @subentry case sensitivity
+@cindex case sensitivity @subentry @command{gawk}
+@cindex differences in @command{awk} and @command{gawk} @subentry regular
expressions
@cindex @code{~} (tilde), @code{~} operator
@cindex tilde (@code{~}), @code{~} operator
-@cindex @code{!} (exclamation point), @code{!~} operator
-@cindex exclamation point (@code{!}), @code{!~} operator
-@cindex @code{IGNORECASE} variable, with @code{~} and @code{!~} operators
-@cindex @command{gawk}, @code{IGNORECASE} variable in
+@cindex @code{!} (exclamation point) @subentry @code{!~} operator
+@cindex exclamation point (@code{!}) @subentry @code{!~} operator
+@cindex @code{IGNORECASE} variable @subentry with @code{~} and @code{!~}
operators
+@cindex @command{gawk} @subentry @code{IGNORECASE} variable in
@c @cindex variables, @code{IGNORECASE}
Another method, specific to @command{gawk}, is to set the variable
@code{IGNORECASE} to a nonzero value (@pxref{Built-in Variables}).
@@ -6546,7 +6571,7 @@ versions, use @code{tolower()} or @code{toupper()}.
@chapter Reading Input Files
@cindex reading input files
-@cindex input files, reading
+@cindex input files @subentry reading
@cindex input files
@cindex @code{FILENAME} variable
In the typical @command{awk} program,
@@ -6598,8 +6623,8 @@ used with it do not have to be named on the @command{awk}
command line
@node Records
@section How Input Is Split into Records
-@cindex input, splitting into records
-@cindex records, splitting input into
+@cindex input @subentry splitting into records
+@cindex records @subentry splitting input into
@cindex @code{NR} variable
@cindex @code{FNR} variable
@command{awk} divides the input for your program into records and fields.
@@ -6624,7 +6649,7 @@ This mechanism is explained in greater detail shortly.
@node awk split records
@subsection Record Splitting with Standard @command{awk}
-@cindex separators, for records
+@cindex separators @subentry for records
@cindex record separators
Records are separated by a character called the @dfn{record separator}.
By default, the record separator is the newline character.
@@ -6632,8 +6657,8 @@ This is why records are, by default, single lines.
To use a different character for the record separator,
simply assign that character to the predefined variable @code{RS}.
-@cindex record separators, newlines as
-@cindex newlines, as record separators
+@cindex record separators @subentry newlines as
+@cindex newlines @subentry as record separators
@cindex @code{RS} variable
Like any other variable,
the value of @code{RS} can be changed in the @command{awk} program
@@ -6725,8 +6750,8 @@ the newline separating them in the output
is the original newline in the @value{DF}, not the one added by
@command{awk} when it printed the record!
-@cindex record separators, changing
-@cindex separators, for records
+@cindex record separators @subentry changing
+@cindex separators @subentry for records
Another way to change the record separator is on the command line,
using the variable-assignment feature
(@pxref{Other Arguments}):
@@ -6767,14 +6792,14 @@ variable @code{NF} is the number of fields in the
current record.
printing @samp{0} as the result. Most other versions of @command{awk}
also act this way.)
-@cindex dark corner, input files
+@cindex dark corner @subentry input files
Reaching the end of an input file terminates the current input record,
even if the last character in the file is not the character in @code{RS}.
@value{DARKCORNER}
-@cindex empty strings
+@cindex empty strings @seeentry{null strings}
@cindex null strings
-@cindex strings, empty, See null strings
+@cindex strings @subentry empty @seeentry{null strings}
The empty string @code{""} (a string without any characters)
has a special meaning
as the value of @code{RS}. It means that records are separated
@@ -6786,15 +6811,15 @@ the new value is used to delimit subsequent records,
but the record
currently being processed, as well as records already processed, are not
affected.
-@cindex @command{gawk}, @code{RT} variable in
+@cindex @command{gawk} @subentry @code{RT} variable in
@cindex @code{RT} variable
-@cindex records, terminating
+@cindex records @subentry terminating
@cindex terminating records
-@cindex differences in @command{awk} and @command{gawk}, record separators
-@cindex differences in @command{awk} and @command{gawk}, @code{RS}/@code{RT}
variables
-@cindex regular expressions, as record separators
-@cindex record separators, regular expressions as
-@cindex separators, for records, regular expressions as
+@cindex differences in @command{awk} and @command{gawk} @subentry record
separators
+@cindex differences in @command{awk} and @command{gawk} @subentry
@code{RS}/@code{RT} variables
+@cindex regular expressions @subentry as record separators
+@cindex record separators @subentry regular expressions as
+@cindex separators @subentry for records @subentry regular expressions as
After the end of the record has been determined, @command{gawk}
sets the variable @code{RT} to the text in the input that matched
@code{RS}.
@@ -6802,8 +6827,8 @@ sets the variable @code{RT} to the text in the input that
matched
@node gawk split records
@subsection Record Splitting with @command{gawk}
-@cindex common extensions, @code{RS} as a regexp
-@cindex extensions, common@comma{} @code{RS} as a regexp
+@cindex common extensions @subentry @code{RS} as a regexp
+@cindex extensions @subentry common @subentry @code{RS} as a regexp
When using @command{gawk}, the value of @code{RS} is not limited to a
one-character string. If it contains more than one character, it is
treated as a regular expression
@@ -6867,9 +6892,9 @@ that happens to contain newline characters.
It is thus best to avoid anchor metacharacters in the value of @code{RS}.
@end quotation
-@cindex @command{gawk}, @code{RT} variable in
+@cindex @command{gawk} @subentry @code{RT} variable in
@cindex @code{RT} variable
-@cindex differences in @command{awk} and @command{gawk}, @code{RS}/@code{RT}
variables
+@cindex differences in @command{awk} and @command{gawk} @subentry
@code{RS}/@code{RT} variables
The use of @code{RS} as a regular expression and the @code{RT}
variable are @command{gawk} extensions; they are not available in
compatibility mode
@@ -6877,13 +6902,13 @@ compatibility mode
In compatibility mode, only the first character of the value of
@code{RS} determines the end of the record.
-@cindex sidebar, @code{RS = "\0"} Is Not Portable
+@cindex sidebar @subentry @code{RS = "\0"} Is Not Portable
@ifdocbook
@docbook
<sidebar><title>@code{RS = "\0"} Is Not Portable</title>
@end docbook
-@cindex portability, data files as single record
+@cindex portability @subentry data files as single record
There are times when you might want to treat an entire @value{DF} as a
single record. The only way to make this happen is to give @code{RS}
a value that you know doesn't occur in the input file. This is hard
@@ -6898,7 +6923,7 @@ value to use for @code{RS} in this case:
BEGIN @{ RS = "\0" @} # whole file becomes one record?
@end example
-@cindex differences in @command{awk} and @command{gawk}, strings, storing
+@cindex differences in @command{awk} and @command{gawk} @subentry strings
@subentry storing
@command{gawk} in fact accepts this, and uses the @sc{nul}
character for the record separator.
This works for certain special files, such as @file{/proc/environ} on
@@ -6906,7 +6931,7 @@ GNU/Linux systems, where the @sc{nul} character is in
fact the record separator.
However, this usage is @emph{not} portable
to most other @command{awk} implementations.
-@cindex dark corner, strings, storing
+@cindex dark corner @subentry strings, storing
Almost all other @command{awk} implementations@footnote{At least that we know
about.} store strings internally as C-style strings. C strings use the
@sc{nul} character as the string terminator. In effect, this means that
@@ -6918,7 +6943,7 @@ character as a record separator. However, this is a
special case:
@command{mawk} does not allow embedded @sc{nul} characters in strings.
(This may change in a future version of @command{mawk}.)
-@cindex records, treating files as
+@cindex records @subentry treating files as
@cindex treating files, as single records
@cindex single records, treating files as
@xref{Readfile Function} for an interesting way to read
@@ -6935,7 +6960,7 @@ Readfile} for another option.
@center @b{@code{RS = "\0"} Is Not Portable}
-@cindex portability, data files as single record
+@cindex portability @subentry data files as single record
There are times when you might want to treat an entire @value{DF} as a
single record. The only way to make this happen is to give @code{RS}
a value that you know doesn't occur in the input file. This is hard
@@ -6950,7 +6975,7 @@ value to use for @code{RS} in this case:
BEGIN @{ RS = "\0" @} # whole file becomes one record?
@end example
-@cindex differences in @command{awk} and @command{gawk}, strings, storing
+@cindex differences in @command{awk} and @command{gawk} @subentry strings
@subentry storing
@command{gawk} in fact accepts this, and uses the @sc{nul}
character for the record separator.
This works for certain special files, such as @file{/proc/environ} on
@@ -6958,7 +6983,7 @@ GNU/Linux systems, where the @sc{nul} character is in
fact the record separator.
However, this usage is @emph{not} portable
to most other @command{awk} implementations.
-@cindex dark corner, strings, storing
+@cindex dark corner @subentry strings, storing
Almost all other @command{awk} implementations@footnote{At least that we know
about.} store strings internally as C-style strings. C strings use the
@sc{nul} character as the string terminator. In effect, this means that
@@ -6970,7 +6995,7 @@ character as a record separator. However, this is a
special case:
@command{mawk} does not allow embedded @sc{nul} characters in strings.
(This may change in a future version of @command{mawk}.)
-@cindex records, treating files as
+@cindex records @subentry treating files as
@cindex treating files, as single records
@cindex single records, treating files as
@xref{Readfile Function} for an interesting way to read
@@ -6985,7 +7010,7 @@ Readfile} for another option.
@cindex examining fields
@cindex fields
@cindex accessing fields
-@cindex fields, examining
+@cindex fields @subentry examining
When @command{awk} reads an input record, the record is
automatically @dfn{parsed} or separated by the @command{awk} utility into
chunks
called @dfn{fields}. By default, fields are separated by @dfn{whitespace},
@@ -7002,9 +7027,9 @@ operate on the whole record if you want---but fields are
what make
simple @command{awk} programs so powerful.
@cindex field operator @code{$}
-@cindex @code{$} (dollar sign), @code{$} field operator
-@cindex dollar sign (@code{$}), @code{$} field operator
-@cindex field operators@comma{} dollar sign as
+@cindex @code{$} (dollar sign) @subentry @code{$} field operator
+@cindex dollar sign (@code{$}) @subentry @code{$} field operator
+@cindex field operators, dollar sign as
You use a dollar sign (@samp{$})
to refer to a field in an @command{awk} program,
followed by the number of the field you want. Thus, @code{$1}
@@ -7025,7 +7050,7 @@ Here the first field, or @code{$1}, is @samp{This}, the
second field, or
field.
@cindex @code{NF} variable
-@cindex fields, number of
+@cindex fields @subentry number of
@code{NF} is a predefined variable whose value is the number of fields
in the current record. @command{awk} automatically updates the value
of @code{NF} each time it reads a record. No matter how many fields
@@ -7064,7 +7089,7 @@ $ @kbd{awk '/li/ @{ print $1, $NF @}' mail-list}
@node Nonconstant Fields
@section Nonconstant Field Numbers
-@cindex fields, numbers
+@cindex fields @subentry numbers
@cindex field numbers
A field number need not be a constant. Any expression in
@@ -7121,7 +7146,7 @@ evaluating @code{NF} and using its value as a field
number.
@node Changing Fields
@section Changing the Contents of a Field
-@cindex fields, changing contents of
+@cindex fields @subentry changing contents of
The contents of a field, as seen by @command{awk}, can be changed within an
@command{awk} program; this changes what @command{awk} perceives as the
current input record. (The actual input is untouched; @command{awk}
@emph{never}
@@ -7181,8 +7206,8 @@ $ @kbd{awk '@{ $6 = ($5 + $4 + $3 + $2)}
@dots{}
@end example
-@cindex adding, fields
-@cindex fields, adding
+@cindex adding @subentry fields
+@cindex fields @subentry adding
@noindent
We've just created @code{$6}, whose value is the sum of fields
@code{$2}, @code{$3}, @code{$4}, and @code{$5}. The @samp{+} sign
@@ -7196,8 +7221,8 @@ the appropriate number of field separators between it and
the previously
existing fields.
@cindex @code{OFS} variable
-@cindex output field separator, See @code{OFS} variable
-@cindex field separators, See Also @code{OFS}
+@cindex output field separator @seeentry{@code{OFS} variable}
+@cindex field separator @seealso{@code{OFS}}
This recomputation affects and is affected by
@code{NF} (the number of fields; @pxref{Fields}).
For example, the value of @code{NF} is set to the number of the highest
@@ -7254,8 +7279,8 @@ The intervening field, @code{$5}, is created with an
empty value
(indicated by the second pair of adjacent colons),
and @code{NF} is updated with the value six.
-@cindex dark corner, @code{NF} variable, decrementing
-@cindex @code{NF} variable, decrementing
+@cindex dark corner @subentry @code{NF} variable, decrementing
+@cindex @code{NF} variable @subentry decrementing
Decrementing @code{NF} throws away the values of the fields
after the new value of @code{NF} and recomputes @code{$0}.
@value{DARKCORNER}
@@ -7268,7 +7293,7 @@ $ @kbd{echo a b c d e f | awk '@{ print "NF =", NF;}
@print{} a b c
@end example
-@cindex portability, @code{NF} variable@comma{} decrementing
+@cindex portability @subentry @code{NF} variable, decrementing
@quotation CAUTION
Some versions of @command{awk} don't
rebuild @code{$0} when @code{NF} is decremented.
@@ -7299,7 +7324,7 @@ This also applies to any built-in function that updates
@code{$0},
such as @code{sub()} and @code{gsub()}
(@pxref{String Functions}).
-@cindex sidebar, Understanding @code{$0}
+@cindex sidebar @subentry Understanding @code{$0}
@ifdocbook
@docbook
<sidebar><title>Understanding @code{$0}</title>
@@ -7361,9 +7386,9 @@ with a statement such as @samp{$1 = $1}, as described
earlier.
@end menu
@cindex @code{FS} variable
-@cindex fields, separating
-@cindex field separators
-@cindex fields, separating
+@cindex fields @subentry separating
+@cindex field separator
+@cindex fields @subentry separating
The @dfn{field separator}, which is either a single character or a regular
expression, controls the way @command{awk} splits an input record into fields.
@command{awk} scans the input record for character sequences that
@@ -7382,13 +7407,13 @@ is split into three fields: @samp{m},
@samp{@bullet{}g}, and
@samp{@bullet{}gai@bullet{}pan}.
Note the leading spaces in the values of the second and third fields.
-@cindex troubleshooting, @command{awk} uses @code{FS} not @code{IFS}
+@cindex troubleshooting @subentry @command{awk} uses @code{FS} not @code{IFS}
The field separator is represented by the predefined variable @code{FS}.
Shell programmers take note: @command{awk} does @emph{not} use the
name @code{IFS} that is used by the POSIX-compliant shells (such as
the Unix Bourne shell, @command{sh}, or Bash).
-@cindex @code{FS} variable, changing value of
+@cindex @code{FS} variable @subentry changing value of
The value of @code{FS} can be changed in the @command{awk} program with the
assignment operator, @samp{=} (@pxref{Assignment Ops}).
Often, the right time to do this is at the beginning of execution
@@ -7415,9 +7440,9 @@ John Q. Smith, 29 Oak St., Walamazoo, MI 42139
this @command{awk} program extracts and prints the string
@samp{@bullet{}29@bullet{}Oak@bullet{}St.}.
-@cindex field separators, choice of
-@cindex regular expressions, as field separators
-@cindex field separators, regular expressions as
+@cindex field separator @subentry choice of
+@cindex regular expressions @subentry as field separators
+@cindex field separator @subentry regular expression as
Sometimes the input data contains separator characters that don't
separate fields the way you thought they would. For instance, the
person's name in the example we just used might have a title or
@@ -7440,8 +7465,10 @@ can massage it first with a separate @command{awk}
program.)
@node Default Field Splitting
@subsection Whitespace Normally Separates Fields
-@cindex field separators, whitespace as
-@cindex whitespace, as field separators
+@cindex field separator @subentry whitespace as
+@cindex whitespace @subentry as field separators
+@cindex field separator @subentry @code{FS} variable and
+@cindex separators @subentry field @subentry @code{FS} variable and
Fields are normally separated by whitespace sequences
(spaces, TABs, and newlines), not by single spaces. Two spaces in a row do not
delimit an empty field. The default value of the field separator @code{FS}
@@ -7462,8 +7489,8 @@ rules.
@node Regexp Field Splitting
@subsection Using Regular Expressions to Separate Fields
-@cindex regular expressions, as field separators
-@cindex field separators, regular expressions as
+@cindex regular expressions @subentry as field separators
+@cindex field separator @subentry regular expression as
The previous @value{SUBSECTION}
discussed the use of single characters or simple strings as the
value of @code{FS}.
@@ -7518,8 +7545,7 @@ $ @kbd{echo ' a b c d ' | awk 'BEGIN @{ FS = "[
\t\n]+" @}}
@noindent
@cindex null strings
-@cindex strings, null
-@cindex empty strings, See null strings
+@cindex strings @subentry null
In this case, the first field is null, or empty.
The stripping of leading and trailing whitespace also comes into
@@ -7540,9 +7566,9 @@ Because the leading whitespace was ignored when finding
@code{$1},
it is not part of the new @code{$0}. Finally, the last @code{print}
statement prints the new @code{$0}.
-@cindex @code{FS}, containing @code{^}
-@cindex @code{^} (caret), in @code{FS}
-@cindex dark corner, @code{^}, in @code{FS}
+@cindex @code{FS} variable @subentry containing @code{^}
+@cindex @code{^} (caret) @subentry in @code{FS}
+@cindex dark corner @subentry @code{^}, in @code{FS}
There is an additional subtlety to be aware of when using regular expressions
for field splitting.
It is not well specified in the POSIX standard, or anywhere else, what @samp{^}
@@ -7570,11 +7596,11 @@ $ @kbd{echo 'xxAA xxBxx C' |}
@node Single Character Fields
@subsection Making Each Character a Separate Field
-@cindex common extensions, single character fields
-@cindex extensions, common@comma{} single character fields
-@cindex differences in @command{awk} and @command{gawk}, single-character
fields
+@cindex common extensions @subentry single character fields
+@cindex extensions @subentry common @subentry single character fields
+@cindex differences in @command{awk} and @command{gawk} @subentry
single-character fields
@cindex single-character fields
-@cindex fields, single-character
+@cindex fields @subentry single-character
There are times when you may want to examine each character
of a record separately. This can be done in @command{gawk} by
simply assigning the null string (@code{""}) to @code{FS}. @value{COMMONEXT}
@@ -7593,8 +7619,8 @@ $ @kbd{echo a b | gawk 'BEGIN @{ FS = "" @}}
@print{} Field 3 is b
@end example
-@cindex dark corner, @code{FS} as null string
-@cindex @code{FS} variable, as null string
+@cindex dark corner @subentry @code{FS} as null string
+@cindex @code{FS} variable @subentry null string as
Traditionally, the behavior of @code{FS} equal to @code{""} was not defined.
In this case, most versions of Unix @command{awk} simply treat the entire
record
as only having one field.
@@ -7606,10 +7632,10 @@ behaves this way.
@node Command Line Field Separator
@subsection Setting @code{FS} from the Command Line
-@cindex @option{-F} option, command-line
-@cindex field separator, on command line
-@cindex command line, @code{FS} on@comma{} setting
-@cindex @code{FS} variable, setting from command line
+@cindex @option{-F} option @subentry command-line
+@cindex field separator @subentry on command line
+@cindex command line @subentry @code{FS} on, setting
+@cindex @code{FS} variable @subentry setting from command line
@code{FS} can be set on the command line. Use the @option{-F} option to
do so. For example:
@@ -7635,9 +7661,9 @@ awk -F\\\\ '@dots{}' files @dots{}
@end example
@noindent
-@cindex field separator, backslash (@code{\}) as
-@cindex @code{\} (backslash), as field separator
-@cindex backslash (@code{\}), as field separator
+@cindex field separator @subentry backslash (@code{\}) as
+@cindex @code{\} (backslash) @subentry as field separator
+@cindex backslash (@code{\}) @subentry as field separator
Because @samp{\} is used for quoting in the shell, @command{awk} sees
@samp{-F\\}. Then @command{awk} processes the @samp{\\} for escape
characters (@pxref{Escape Sequences}), finally yielding
@@ -7687,7 +7713,7 @@ separator, instead of the @samp{-} in the phone number
that was
originally intended. This demonstrates why you have to be careful in
choosing your field and record separators.
-@cindex Unix @command{awk}, password files@comma{} field separators and
+@cindex Unix @command{awk} @subentry password files, field separators and
Perhaps the most common use of a single character as the field separator
occurs when processing the Unix system password file. On many Unix
systems, each user has a separate entry in the system password file, with one
@@ -7697,7 +7723,7 @@ encrypted or shadow password. (A shadow password is
indicated by the
presence of a single @samp{x} in the second field.) A password file
entry might look like this:
-@cindex Robbins, Arnold
+@cindex Robbins @subentry Arnold
@example
arnold:x:2076:10:Arnold Robbins:/home/arnold:/bin/bash
@end example
@@ -7724,22 +7750,22 @@ awk -F'\n' '@var{program}' @var{files @dots{}}
@noindent
When you do this, @code{$1} is the same as @code{$0}.
-@cindex sidebar, Changing @code{FS} Does Not Affect the Fields
+@cindex sidebar @subentry Changing @code{FS} Does Not Affect the Fields
@ifdocbook
@docbook
<sidebar><title>Changing @code{FS} Does Not Affect the Fields</title>
@end docbook
-@cindex POSIX @command{awk}, field separators and
-@cindex field separator, POSIX and
+@cindex POSIX @command{awk} @subentry field separators and
+@cindex field separator @subentry POSIX and
According to the POSIX standard, @command{awk} is supposed to behave
as if each record is split into fields at the time it is read.
In particular, this means that if you change the value of @code{FS}
after a record is read, the values of the fields (i.e., how they were split)
should reflect the old value of @code{FS}, not the new one.
-@cindex dark corner, field separators
+@cindex dark corner @subentry field separators
@cindex @command{sed} utility
@cindex stream editors
However, many older implementations of @command{awk} do not work this way.
Instead,
@@ -7785,15 +7811,15 @@ command prints just the first line of
@file{/etc/passwd}.)
-@cindex POSIX @command{awk}, field separators and
-@cindex field separator, POSIX and
+@cindex POSIX @command{awk} @subentry field separators and
+@cindex field separator @subentry POSIX and
According to the POSIX standard, @command{awk} is supposed to behave
as if each record is split into fields at the time it is read.
In particular, this means that if you change the value of @code{FS}
after a record is read, the values of the fields (i.e., how they were split)
should reflect the old value of @code{FS}, not the new one.
-@cindex dark corner, field separators
+@cindex dark corner @subentry field separators
@cindex @command{sed} utility
@cindex stream editors
However, many older implementations of @command{awk} do not work this way.
Instead,
@@ -7866,7 +7892,7 @@ Each individual character in the record becomes a
separate field.
(This is a common extension; it is not specified by the POSIX standard.)
@end table
-@cindex sidebar, @code{FS} and @code{IGNORECASE}
+@cindex sidebar @subentry @code{FS} and @code{IGNORECASE}
@ifdocbook
@docbook
<sidebar><title>@code{FS} and @code{IGNORECASE}</title>
@@ -7930,7 +7956,7 @@ will take effect.
@cindex data, fixed-width
@cindex fixed-width data
-@cindex advanced features, fixed-width data
+@cindex advanced features @subentry fixed-width data
@c O'Reilly doesn't like it as a note the first thing in the section.
This @value{SECTION} discusses an advanced
@@ -7963,10 +7989,10 @@ on @code{FS} does not work well in this case. Although
a portable
@code{$0} (@pxref{String Functions}), this is awkward and inefficient
for a large number of fields.
-@cindex troubleshooting, fatal errors, field widths@comma{} specifying
+@cindex troubleshooting @subentry fatal errors @subentry field widths,
specifying
@cindex @command{w} utility
@cindex @code{FIELDWIDTHS} variable
-@cindex @command{gawk}, @code{FIELDWIDTHS} variable in
+@cindex @command{gawk} @subentry @code{FIELDWIDTHS} variable in
The splitting of an input record into fixed-width fields is specified by
assigning a string containing space-separated numbers to the built-in
variable @code{FIELDWIDTHS}. Each number specifies the width of the
@@ -8136,7 +8162,7 @@ This @value{SECTION} discusses an advanced
feature of @command{gawk}. If you are a novice @command{awk} user,
you might want to skip it on the first reading.
-@cindex advanced features, specifying field content
+@cindex advanced features @subentry specifying field content
Normally, when using @code{FS}, @command{gawk} defines the fields as the
parts of the record that occur in between each field separator. In other
words, @code{FS} defines what a field @emph{is not}, instead of what a field
@@ -8162,7 +8188,7 @@ Robbins,Arnold,"1234 A Pretty Street,
NE",MyTown,MyState,12345-6789,USA
@c endfile
@end example
-@cindex @command{gawk}, @code{FPAT} variable in
+@cindex @command{gawk} @subentry @code{FPAT} variable in
@cindex @code{FPAT} variable
The @code{FPAT} variable offers a solution for cases like this.
The value of @code{FPAT} should be a string that provides a regular expression.
@@ -8260,7 +8286,7 @@ available for splitting regular strings (@pxref{String
Functions}).
@node Testing field creation
@section Checking How @command{gawk} Is Splitting Records
-@cindex @command{gawk}, splitting fields and
+@cindex @command{gawk} @subentry splitting fields and
As we've seen, @command{gawk} provides three independent methods to split
input records into fields. The mechanism used is based on which of the
three variables---@code{FS}, @code{FIELDWIDTHS}, or @code{FPAT}---was
@@ -8299,15 +8325,15 @@ example of such a function).
@section Multiple-Line Records
@cindex multiple-line records
-@cindex records, multiline
-@cindex input, multiline records
-@cindex files, reading, multiline records
-@cindex input, files, See input files
+@cindex records @subentry multiline
+@cindex input @subentry multiline records
+@cindex files @subentry reading @subentry multiline records
+@cindex input, files @seeentry{input files}
In some databases, a single line cannot conveniently hold all the
information in one entry. In such cases, you can use multiline
records. The first step in doing this is to choose your data format.
-@cindex record separators, with multiline records
+@cindex record separators @subentry with multiline records
One technique is to use an unusual character or string to separate
records. For example, you could use the formfeed character (written
@samp{\f} in @command{awk}, as in C) to separate them, making each record
@@ -8316,7 +8342,7 @@ a page of the file. To do this, just set the variable
@code{RS} to
other character could equally well be used, as long as it won't be part
of the data in a record.
-@cindex @code{RS} variable, multiline records and
+@cindex @code{RS} variable @subentry multiline records and
Another technique is to have blank lines separate records. By a special
dispensation, an empty string as the value of @code{RS} indicates that
records are separated by one or more blank lines. When @code{RS} is set
@@ -8328,7 +8354,7 @@ all act as one record separator.
whitespace do not count.)
@cindex leftmost longest match
-@cindex matching, leftmost longest
+@cindex matching @subentry leftmost longest
You can achieve the same effect as @samp{RS = ""} by assigning the
string @code{"\n\n+"} to @code{RS}. This regexp matches the newline
at the end of the record and one or more blank lines after the record.
@@ -8339,7 +8365,7 @@ So, the next record doesn't start until
the first nonblank line that follows---no matter how many blank lines
appear in a row, they are considered one record separator.
-@cindex dark corner, multiline records
+@cindex dark corner @subentry multiline records
However, there is an important difference between @samp{RS = ""} and
@samp{RS = "\n\n+"}. In the first case, leading newlines in the input
@value{DF} are ignored, and if a file ends without extra blank lines
@@ -8347,8 +8373,8 @@ after the last record, the final newline is removed from
the record.
In the second case, this special processing is not done.
@value{DARKCORNER}
-@cindex field separator, in multiline records
-@cindex @code{FS}, in multiline records
+@cindex field separator @subentry in multiline records
+@cindex @code{FS} variable @subentry in multiline records
Now that the input is separated into records, the second step is to
separate the fields in the records. One way to do this is to divide each
of the lines into fields in the normal manner. This happens by default
@@ -8471,9 +8497,9 @@ Leading and trailing matches of @var{regexp} delimit
empty records.
POSIX standard.)
@end table
-@cindex @command{gawk}, @code{RT} variable in
+@cindex @command{gawk} @subentry @code{RT} variable in
@cindex @code{RT} variable
-@cindex differences in @command{awk} and @command{gawk}, @code{RS}/@code{RT}
variables
+@cindex differences in @command{awk} and @command{gawk} @subentry
@code{RS}/@code{RT} variables
If not in compatibility mode (@pxref{Options}), @command{gawk} sets
@code{RT} to the input text that matched the value specified by @code{RS}.
But if the input file ended without any text that matches @code{RS},
@@ -8482,8 +8508,8 @@ then @command{gawk} sets @code{RT} to the null string.
@node Getline
@section Explicit Input with @code{getline}
-@cindex @code{getline} command, explicit input with
-@cindex input, explicit
+@cindex @code{getline} command @subentry explicit input with
+@cindex input @subentry explicit
So far we have been getting our input data from @command{awk}'s main
input stream---either the standard input (usually your keyboard, sometimes
the output from another program) or the
@@ -8510,11 +8536,11 @@ Parts I and II
@end ifnotinfo
and have a good knowledge of how @command{awk} works.
-@cindex @command{gawk}, @code{ERRNO} variable in
-@cindex @code{ERRNO} variable, with @command{getline} command
-@cindex differences in @command{awk} and @command{gawk}, @code{getline} command
-@cindex @code{getline} command, return values
-@cindex @option{--sandbox} option, input redirection with @code{getline}
+@cindex @command{gawk} @subentry @code{ERRNO} variable in
+@cindex @code{ERRNO} variable @subentry with @command{getline} command
+@cindex differences in @command{awk} and @command{gawk} @subentry
@code{getline} command
+@cindex @code{getline} command @subentry return values
+@cindex @option{--sandbox} option @subentry input redirection with
@code{getline}
The @code{getline} command returns 1 if it finds a record and 0 if
it encounters the end of the file. If there is some error in getting
@@ -8637,8 +8663,8 @@ rule in the program. @xref{Next Statement}.
@node Getline/Variable
@subsection Using @code{getline} into a Variable
-@cindex @code{getline} into a variable
-@cindex variables, @code{getline} command into@comma{} using
+@cindex @code{getline} command @subentry into a variable
+@cindex variables @subentry @code{getline} command into, using
You can use @samp{getline @var{var}} to read the next record from
@command{awk}'s input into the variable @var{var}. No other processing is
@@ -8691,12 +8717,12 @@ the value of @code{NF} do not change.
@node Getline/File
@subsection Using @code{getline} from a File
-@cindex @code{getline} from a file
+@cindex @code{getline} command @subentry from a file
@cindex input redirection
-@cindex redirection of input
-@cindex @code{<} (left angle bracket), @code{<} operator (I/O)
-@cindex left angle bracket (@code{<}), @code{<} operator (I/O)
-@cindex operators, input/output
+@cindex redirection @subentry of input
+@cindex @code{<} (left angle bracket) @subentry @code{<} operator (I/O)
+@cindex left angle bracket (@code{<}) @subentry @code{<} operator (I/O)
+@cindex operators @subentry input/output
Use @samp{getline < @var{file}} to read the next record from @var{file}.
Here, @var{file} is a string-valued expression that
specifies the @value{FN}. @samp{< @var{file}} is called a @dfn{redirection}
@@ -8722,7 +8748,7 @@ the normal manner, so the values of @code{$0} and the
other fields are
changed, resulting in a new value of @code{NF}.
@code{RT} is also set.
-@cindex POSIX @command{awk}, @code{<} operator and
+@cindex POSIX @command{awk} @subentry @code{<} operator and
@c Thanks to Paul Eggert for initial wording here
According to POSIX, @samp{getline < @var{expression}} is ambiguous if
@var{expression} contains unparenthesized operators other than
@@ -8733,7 +8759,7 @@ you want your program to be portable to all @command{awk}
implementations.
@node Getline/Variable/File
@subsection Using @code{getline} into a Variable from a File
-@cindex variables, @code{getline} command into@comma{} using
+@cindex variables @subentry @code{getline} command into, using
Use @samp{getline @var{var} < @var{file}} to read input
from the file
@@ -8787,11 +8813,11 @@ Failing that, attention to details would be useful.}
@author Brian Kernighan
@end quotation
-@cindex @code{|} (vertical bar), @code{|} operator (I/O)
-@cindex vertical bar (@code{|}), @code{|} operator (I/O)
+@cindex @code{|} (vertical bar) @subentry @code{|} operator (I/O)
+@cindex vertical bar (@code{|}) @subentry @code{|} operator (I/O)
@cindex input pipeline
-@cindex pipe, input
-@cindex operators, input/output
+@cindex pipe @subentry input
+@cindex operators @subentry input/output
The output of a command can also be piped into @code{getline}, using
@samp{@var{command} | getline}. In
this case, the string @var{command} is run as a shell command and its output
@@ -8838,9 +8864,9 @@ bletch
@noindent
the program might produce:
-@cindex Robbins, Bill
-@cindex Robbins, Miriam
-@cindex Robbins, Arnold
+@cindex Robbins @subentry Bill
+@cindex Robbins @subentry Miriam
+@cindex Robbins @subentry Arnold
@example
foo
bar
@@ -8861,7 +8887,7 @@ value of @code{NF}, and recomputes the value of
@code{$0}. The values of
@code{NR} and @code{FNR} are not changed.
@code{RT} is set.
-@cindex POSIX @command{awk}, @code{|} I/O operator and
+@cindex POSIX @command{awk} @subentry @code{|} I/O operator and
@c Thanks to Paul Eggert for initial wording here
According to POSIX, @samp{@var{expression} | getline} is ambiguous if
@var{expression} contains unparenthesized operators other than
@@ -8887,7 +8913,7 @@ have to worry.
@node Getline/Variable/Pipe
@subsection Using @code{getline} into a Variable from a Pipe
-@cindex variables, @code{getline} command into@comma{} using
+@cindex variables @subentry @code{getline} command into, using
When you use @samp{@var{command} | getline @var{var}}, the
output of @var{command} is sent through a pipe to
@@ -8919,12 +8945,12 @@ program to be portable to other @command{awk}
implementations.
@node Getline/Coprocess
@subsection Using @code{getline} from a Coprocess
-@cindex coprocesses, @code{getline} from
-@cindex @code{getline} command, coprocesses@comma{} using from
-@cindex @code{|} (vertical bar), @code{|&} operator (I/O)
-@cindex vertical bar (@code{|}), @code{|&} operator (I/O)
-@cindex operators, input/output
-@cindex differences in @command{awk} and @command{gawk}, input/output operators
+@cindex coprocesses @subentry @code{getline} from
+@cindex @code{getline} command @subentry coprocesses, using from
+@cindex @code{|} (vertical bar) @subentry @code{|&} operator (I/O)
+@cindex vertical bar (@code{|}) @subentry @code{|&} operator (I/O)
+@cindex operators @subentry input/output
+@cindex differences in @command{awk} and @command{gawk} @subentry input/output
operators
Reading input into @code{getline} from a pipe is a one-way operation.
The command that is started with @samp{@var{command} | getline} only
@@ -8960,7 +8986,7 @@ where coprocesses are discussed in more detail.
@node Getline/Variable/Coprocess
@subsection Using @code{getline} into a Variable from a Coprocess
-@cindex variables, @code{getline} command into@comma{} using
+@cindex variables @subentry @code{getline} command into, using
When you use @samp{@var{command} |& getline @var{var}}, the output from
the coprocess @var{command} is sent through a two-way pipe to @code{getline}
@@ -8990,21 +9016,21 @@ When @code{getline} changes the value of @code{$0} and
@code{NF},
program and start testing the new record against every pattern.
However, the new record is tested against any subsequent rules.
-@cindex differences in @command{awk} and @command{gawk}, implementation
limitations
-@cindex implementation issues, @command{gawk}, limits
-@cindex @command{awk}, implementations, limits
-@cindex @command{gawk}, implementation issues, limits
+@cindex differences in @command{awk} and @command{gawk} @subentry
implementation limitations
+@cindex implementation issues, @command{gawk} @subentry limits
+@cindex @command{awk} @subentry implementations @subentry limits
+@cindex @command{gawk} @subentry implementation issues @subentry limits
@item
Some very old @command{awk} implementations limit the number of pipelines that
an @command{awk}
program may have open to just one. In @command{gawk}, there is no such limit.
You can open as many pipelines (and coprocesses) as the underlying operating
system permits.
-@cindex side effects, @code{FILENAME} variable
-@cindex @code{FILENAME} variable, @code{getline}@comma{} setting with
-@cindex dark corner, @code{FILENAME} variable
-@cindex @code{getline} command, @code{FILENAME} variable and
-@cindex @code{BEGIN} pattern, @code{getline} and
+@cindex side effects @subentry @code{FILENAME} variable
+@cindex @code{FILENAME} variable @subentry @code{getline}, setting with
+@cindex dark corner @subentry @code{FILENAME} variable
+@cindex @code{getline} command @subentry @code{FILENAME} variable and
+@cindex @code{BEGIN} pattern @subentry @code{getline} and
@item
An interesting side effect occurs if you use @code{getline} without a
redirection inside a @code{BEGIN} rule. Because an unredirected @code{getline}
@@ -9071,7 +9097,7 @@ know that there is a string value to be assigned.
@node Getline Summary
@subsection Summary of @code{getline} Variants
-@cindex @code{getline} command, variants
+@cindex @code{getline} command @subentry variants
@ref{table-getline-variants}
summarizes the eight variants of @code{getline},
@@ -9098,7 +9124,7 @@ Note: for each variant, @command{gawk} sets the @code{RT}
predefined variable.
@section Reading Input with a Timeout
@cindex timeout, reading input
-@cindex differences in @command{awk} and @command{gawk}, read timeouts
+@cindex differences in @command{awk} and @command{gawk} @subentry read timeouts
This @value{SECTION} describes a feature that is specific to @command{gawk}.
You may specify a timeout in milliseconds for reading input from the keyboard,
@@ -9182,6 +9208,8 @@ worth of data the first time. Because of this, changing
the value
of timeout like in the preceding example is not very useful.
@end quotation
+@cindex @env{GAWK_READ_TIMEOUT} environment variable
+@cindex environment variables @subentry @env{GAWK_READ_TIMEOUT}
If the @code{PROCINFO} element is not present and the
@env{GAWK_READ_TIMEOUT} environment variable exists,
@command{gawk} uses its value to initialize the timeout value.
@@ -9208,7 +9236,7 @@ indefinitely until some other process opens it for
writing.
@section Retrying Reads After Certain Input Errors
@cindex retrying input
-@cindex differences in @command{awk} and @command{gawk}, retrying input
+@cindex differences in @command{awk} and @command{gawk} @subentry retrying
input
This @value{SECTION} describes a feature that is specific to @command{gawk}.
When @command{gawk} encounters an error while reading input, by
@@ -9236,9 +9264,9 @@ descriptor has been configured to behave in a
non-blocking fashion.
@node Command-line directories
@section Directories on the Command Line
-@cindex differences in @command{awk} and @command{gawk}, command-line
directories
-@cindex directories, command-line
-@cindex command line, directories on
+@cindex differences in @command{awk} and @command{gawk} @subentry command-line
directories
+@cindex directories @subentry command-line
+@cindex command line @subentry directories on
According to the POSIX standard, files named on the @command{awk}
command line must be text files; it is a fatal error if they are not.
@@ -9329,6 +9357,7 @@ from the default input stream, from a file, or from a
pipe or coprocess.
Use @code{PROCINFO[@var{file}, "READ_TIMEOUT"]} to cause reads to time out
for @var{file}.
+@cindex POSIX mode
@item
Directories on the command line are fatal for standard @command{awk};
@command{gawk} ignores them if not in POSIX mode.
@@ -9354,7 +9383,7 @@ including abstentions, for each item.
@chapter Printing Output
@cindex printing
-@cindex output, printing, See printing
+@cindex output, printing @seeentry{printing}
One of the most common programming actions is to @dfn{print}, or output,
some or all of the input. Use the @code{print} statement
for simple output, and the @code{printf} statement
@@ -9415,8 +9444,8 @@ The items to print can be constant strings or numbers,
fields of the
current record (such as @code{$1}), variables, or any @command{awk}
expression. Numeric values are converted to strings and then printed.
-@cindex records, printing
-@cindex lines, blank, printing
+@cindex records @subentry printing
+@cindex lines @subentry blank, printing
@cindex text, printing
The simple statement @samp{print} with no items is equivalent to
@samp{print $0}: it prints the entire current record. To print a blank
@@ -9439,7 +9468,7 @@ isn't limited to only one line. If an item value is a
string containing a
newline, the newline is output along with the rest of the string. A
single @code{print} statement can make any number of lines this way.
-@cindex newlines, printing
+@cindex newlines @subentry printing
The following is an example of printing a string that contains embedded
@ifinfo
newlines
@@ -9466,7 +9495,7 @@ $ @kbd{awk 'BEGIN @{ print "line one\nline two\nline
three" @}'}
@end group
@end example
-@cindex fields, printing
+@cindex fields @subentry printing
The next example, which is run on the @file{inventory-shipped} file,
prints the first two fields of each input record, with a space between
them:
@@ -9479,8 +9508,8 @@ $ @kbd{awk '@{ print $1, $2 @}' inventory-shipped}
@dots{}
@end example
-@cindex @code{print} statement, commas, omitting
-@cindex troubleshooting, @code{print} statement@comma{} omitting commas
+@cindex @code{print} statement @subentry commas, omitting
+@cindex troubleshooting @subentry @code{print} statement, omitting commas
A common mistake in using the @code{print} statement is to omit the comma
between two items. This often has the effect of making the items run
together in the output, with no space. The reason for this is that
@@ -9495,7 +9524,7 @@ $ @kbd{awk '@{ print $1 $2 @}' inventory-shipped}
@dots{}
@end example
-@cindex @code{BEGIN} pattern, headings@comma{} adding
+@cindex @code{BEGIN} pattern @subentry headings, adding
To someone unfamiliar with the @file{inventory-shipped} file, neither
example's output makes much sense. A heading line at the beginning
would make it clearer. Let's add some headings to our table of months
@@ -9534,8 +9563,8 @@ awk 'BEGIN @{ print "Month Crates"
@end group
@end example
-@cindex @code{printf} statement, columns@comma{} aligning
-@cindex columns, aligning
+@cindex @code{printf} statement @subentry columns, aligning
+@cindex columns @subentry aligning
Lining up columns this way can get pretty
complicated when there are many columns to fix. Counting spaces for two
or three columns is simple, but any more than this can take up
@@ -9543,8 +9572,8 @@ a lot of time. This is why the @code{printf} statement was
created (@pxref{Printf});
one of its specialties is lining up columns of data.
-@cindex line continuations, in @code{print} statement
-@cindex @code{print} statement, line continuations and
+@cindex line continuations @subentry in @code{print} statement
+@cindex @code{print} statement @subentry line continuations and
@quotation NOTE
You can continue either a @code{print} or
@code{printf} statement simply by putting a newline after any comma
@@ -9570,10 +9599,10 @@ then outputs a string called the @dfn{output record
separator} (or
(i.e., a newline character). Thus, each @code{print} statement normally
makes a separate line.
-@cindex output, records
-@cindex output record separator, See @code{ORS} variable
+@cindex output @subentry records
+@cindex output record separator @seeentry{@code{ORS} variable}
@cindex @code{ORS} variable
-@cindex @code{BEGIN} pattern, @code{OFS}/@code{ORS} variables, assigning
values to
+@cindex @code{BEGIN} pattern @subentry @code{OFS}/@code{ORS} variables,
assigning values to
In order to change how output fields and records are separated, assign
new values to the variables @code{OFS} and @code{ORS}. The usual
place to do this is in the @code{BEGIN} rule
@@ -9619,8 +9648,8 @@ runs together on a single line.
@node OFMT
@section Controlling Numeric Output with @code{print}
-@cindex numeric, output format
-@cindex formats@comma{} numeric output
+@cindex numeric @subentry output format
+@cindex formats, numeric output
When printing numeric values with the @code{print} statement,
@command{awk} internally converts each number to a string of characters
and prints that string. @command{awk} uses the @code{sprintf()} function
@@ -9635,7 +9664,7 @@ more fully in
@cindexawkfunc{sprintf}
@cindex @code{OFMT} variable
-@cindex output, format specifier@comma{} @code{OFMT}
+@cindex output @subentry format specifier, @code{OFMT}
The predefined variable @code{OFMT} contains the format specification
that @code{print} uses with @code{sprintf()} when it wants to convert a
number to a string for printing.
@@ -9652,9 +9681,9 @@ $ @kbd{awk 'BEGIN @{}
@end example
@noindent
-@cindex dark corner, @code{OFMT} variable
-@cindex POSIX @command{awk}, @code{OFMT} variable and
-@cindex @code{OFMT} variable, POSIX @command{awk} and
+@cindex dark corner @subentry @code{OFMT} variable
+@cindex POSIX @command{awk} @subentry @code{OFMT} variable and
+@cindex @code{OFMT} variable @subentry POSIX @command{awk} and
According to the POSIX standard, @command{awk}'s behavior is undefined
if @code{OFMT} contains anything but a floating-point conversion specification.
@value{DARKCORNER}
@@ -9663,8 +9692,8 @@ if @code{OFMT} contains anything but a floating-point
conversion specification.
@section Using @code{printf} Statements for Fancier Printing
@cindex @code{printf} statement
-@cindex output, formatted
-@cindex formatting output
+@cindex output @subentry formatted
+@cindex formatting @subentry output
For more precise control over the output format than what is
provided by @code{print}, use @code{printf}.
With @code{printf} you can
@@ -9683,7 +9712,7 @@ after the decimal point).
@node Basic Printf
@subsection Introduction to the @code{printf} Statement
-@cindex @code{printf} statement, syntax of
+@cindex @code{printf} statement @subentry syntax of
A simple @code{printf} statement looks like this:
@example
@@ -9731,8 +9760,8 @@ the output message.
@node Control Letters
@subsection Format-Control Letters
-@cindex @code{printf} statement, format-control characters
-@cindex format specifiers, @code{printf} statement
+@cindex @code{printf} statement @subentry format-control characters
+@cindex format specifiers @subentry @code{printf} statement
A format specifier starts with the character @samp{%} and ends with
a @dfn{format-control letter}---it tells the @code{printf} statement
@@ -9767,8 +9796,8 @@ Print a number as a character; thus, @samp{printf "%c",
65} outputs the letter @samp{A}. The output for a string value is
the first character of the string.
-@cindex dark corner, format-control characters
-@cindex @command{gawk}, format-control characters
+@cindex dark corner @subentry format-control characters
+@cindex @command{gawk} @subentry format-control characters
@quotation NOTE
The POSIX standard says the first character of a string is printed.
In locales with multibyte characters, @command{gawk} attempts to
@@ -9866,8 +9895,8 @@ This does not consume an
argument and it ignores any modifiers.
@end table
-@cindex dark corner, format-control characters
-@cindex @command{gawk}, format-control characters
+@cindex dark corner @subentry format-control characters
+@cindex @command{gawk} @subentry format-control characters
@quotation NOTE
When using the integer format-control letters for values that are
outside the range of the widest C integer type, @command{gawk} switches to
@@ -9892,8 +9921,8 @@ the IEEE standard. Further details are provided in
@node Format Modifiers
@subsection Modifiers for @code{printf} Formats
-@cindex @code{printf} statement, modifiers
-@cindex modifiers@comma{} in format specifiers
+@cindex @code{printf} statement @subentry modifiers
+@cindex modifiers, in format specifiers
A format specification can also include @dfn{modifiers} that can control
how much of the item's value is printed, as well as how much space it gets.
The modifiers come between the @samp{%} and the format-control letter.
@@ -9903,8 +9932,8 @@ spaces in the output. Here are the possible modifiers, in
the order in
which they may appear:
@table @asis
-@cindex differences in @command{awk} and @command{gawk},
@code{print}/@code{printf} statements
-@cindex @code{printf} statement, positional specifiers
+@cindex differences in @command{awk} and @command{gawk} @subentry
@code{print}/@code{printf} statements
+@cindex @code{printf} statement @subentry positional specifiers
@c the code{} does NOT start a secondary
@cindex positional specifiers, @code{printf} statement
@item @code{@var{N}$}
@@ -10089,8 +10118,8 @@ printf "%" w "." p "s\n", s
This is not particularly easy to read, but it does work.
@c @cindex lint checks
-@cindex troubleshooting, fatal errors, @code{printf} format strings
-@cindex POSIX @command{awk}, @code{printf} format strings and
+@cindex troubleshooting @subentry fatal errors @subentry @code{printf} format
strings
+@cindex POSIX @command{awk} @subentry @code{printf} format strings and
C programmers may be used to supplying additional modifiers (@samp{h},
@samp{j}, @samp{l}, @samp{L}, @samp{t}, and @samp{z}) in @code{printf}
format strings. These are not valid in @command{awk}. Most @command{awk}
@@ -10182,8 +10211,8 @@ awk 'BEGIN @{ format = "%-10s %s\n"
@section Redirecting Output of @code{print} and @code{printf}
@cindex output redirection
-@cindex redirection of output
-@cindex @option{--sandbox} option, output redirection with @code{print},
@code{printf}
+@cindex redirection @subentry of output
+@cindex @option{--sandbox} option @subentry output redirection with
@code{print} @subentry @code{printf}
So far, the output from @code{print} and @code{printf} has gone
to the standard
output, usually the screen. Both @code{print} and @code{printf} can
@@ -10200,17 +10229,17 @@ Redirections in @command{awk} are written just like
redirections in shell
commands, except that they are written inside the @command{awk} program.
@c the commas here are part of the see also
-@cindex @code{print} statement, See Also redirection@comma{} of output
-@cindex @code{printf} statement, See Also redirection@comma{} of output
+@cindex @code{print} statement @seealso{redirection of output}
+@cindex @code{printf} statement @seealso{redirection of output}
There are four forms of output redirection: output to a file, output
appended to a file, output through a pipe to another command, and output
to a coprocess. We show them all for the @code{print} statement,
but they work identically for @code{printf}:
@table @code
-@cindex @code{>} (right angle bracket), @code{>} operator (I/O)
-@cindex right angle bracket (@code{>}), @code{>} operator (I/O)
-@cindex operators, input/output
+@cindex @code{>} (right angle bracket) @subentry @code{>} operator (I/O)
+@cindex right angle bracket (@code{>}) @subentry @code{>} operator (I/O)
+@cindex operators @subentry input/output
@item print @var{items} > @var{output-file}
This redirection prints the items into the output file named
@var{output-file}. The @value{FN} @var{output-file} can be any
@@ -10242,8 +10271,8 @@ $ @kbd{cat name-list}
@noindent
Each output file contains one name or number per line.
-@cindex @code{>} (right angle bracket), @code{>>} operator (I/O)
-@cindex right angle bracket (@code{>}), @code{>>} operator (I/O)
+@cindex @code{>} (right angle bracket) @subentry @code{>>} operator (I/O)
+@cindex right angle bracket (@code{>}) @subentry @code{>>} operator (I/O)
@item print @var{items} >> @var{output-file}
This redirection prints the items into the preexisting output file
named @var{output-file}. The difference between this and the
@@ -10252,9 +10281,9 @@ single-@samp{>} redirection is that the old contents
(if any) of
appended to the file.
If @var{output-file} does not exist, then it is created.
-@cindex @code{|} (vertical bar), @code{|} operator (I/O)
-@cindex pipe, output
-@cindex output, pipes
+@cindex @code{|} (vertical bar) @subentry @code{|} operator (I/O)
+@cindex pipe @subentry output
+@cindex output @subentry pipes
@item print @var{items} | @var{command}
It is possible to send output to another program through a pipe
instead of into a file. This redirection opens a pipe to
@@ -10309,9 +10338,9 @@ because (if you mean to refer to that same file or
command)
every time.
@cindex coprocesses
-@cindex @code{|} (vertical bar), @code{|&} operator (I/O)
-@cindex operators, input/output
-@cindex differences in @command{awk} and @command{gawk}, input/output operators
+@cindex @code{|} (vertical bar) @subentry @code{|&} operator (I/O)
+@cindex operators @subentry input/output
+@cindex differences in @command{awk} and @command{gawk} @subentry input/output
operators
@item print @var{items} |& @var{command}
This redirection prints the items to the input of @var{command}.
The difference between this and the
@@ -10341,7 +10370,7 @@ asks the system to open a file, pipe, or coprocess only
if the particular
@var{file} or @var{command} you specify has not already been written
to by your program or if it has been closed since it was last written to.
-@cindex troubleshooting, printing
+@cindex troubleshooting @subentry printing
It is a common error to use @samp{>} redirection for the first @code{print}
to a file, and then to use @samp{>>} for subsequent output:
@@ -10362,10 +10391,10 @@ output is produced in the expected order. However,
mixing the operators
for the same file is definitely poor style, and is confusing to readers
of your program.)
-@cindex differences in @command{awk} and @command{gawk}, implementation
limitations
-@cindex implementation issues, @command{gawk}, limits
-@cindex @command{awk}, implementation issues, pipes
-@cindex @command{gawk}, implementation issues, pipes
+@cindex differences in @command{awk} and @command{gawk} @subentry
implementation limitations
+@cindex implementation issues, @command{gawk} @subentry limits
+@cindex @command{awk} @subentry implementation issues @subentry pipes
+@cindex @command{gawk} @subentry implementation issues @subentry pipes
@ifnotinfo
As mentioned earlier
(@pxref{Getline Notes}),
@@ -10382,13 +10411,13 @@ program may have open to just one! In
@command{gawk}, there is no such limit.
@command{gawk} allows a program to
open as many pipelines as the underlying operating system permits.
-@cindex sidebar, Piping into @command{sh}
+@cindex sidebar @subentry Piping into @command{sh}
@ifdocbook
@docbook
<sidebar><title>Piping into @command{sh}</title>
@end docbook
-@cindex shells, piping commands into
+@cindex shells @subentry piping commands into
A particularly powerful way to use redirection is to build command lines
and pipe them into the shell, @command{sh}. For example, suppose you
@@ -10423,7 +10452,7 @@ command lines to be fed to the shell.
@center @b{Piping into @command{sh}}
-@cindex shells, piping commands into
+@cindex shells @subentry piping commands into
A particularly powerful way to use redirection is to build command lines
and pipe them into the shell, @command{sh}. For example, suppose you
@@ -10453,13 +10482,13 @@ command lines to be fed to the shell.
@node Special FD
@section Special Files for Standard Preopened Data Streams
@cindex standard input
-@cindex input, standard
+@cindex input @subentry standard
@cindex standard output
-@cindex output, standard
+@cindex output @subentry standard
@cindex error output
@cindex standard error
@cindex file descriptors
-@cindex files, descriptors, See file descriptors
+@cindex files @subentry descriptors @seeentry{file descriptors}
Running programs conventionally have three input and output streams
already available to them for reading and writing. These are known
@@ -10474,7 +10503,7 @@ is typically used for writing error messages; the
reason there are two separate
streams, standard output and standard error, is so that they can be
redirected separately.
-@cindex differences in @command{awk} and @command{gawk}, error messages
+@cindex differences in @command{awk} and @command{gawk} @subentry error
messages
@cindex error handling
In traditional implementations of @command{awk}, the only way to write an error
message to standard error in an @command{awk} program is as follows:
@@ -10517,15 +10546,15 @@ the descriptor that the @value{FN} stands for. These
special
@value{FN}s work for all operating systems that @command{gawk}
has been ported to, not just those that are POSIX-compliant:
-@cindex common extensions, @code{/dev/stdin} special file
-@cindex common extensions, @code{/dev/stdout} special file
-@cindex common extensions, @code{/dev/stderr} special file
-@cindex extensions, common@comma{} @code{/dev/stdin} special file
-@cindex extensions, common@comma{} @code{/dev/stdout} special file
-@cindex extensions, common@comma{} @code{/dev/stderr} special file
-@cindex file names, standard streams in @command{gawk}
+@cindex common extensions @subentry @code{/dev/stdin} special file
+@cindex common extensions @subentry @code{/dev/stdout} special file
+@cindex common extensions @subentry @code{/dev/stderr} special file
+@cindex extensions @subentry common @subentry @code{/dev/stdin} special file
+@cindex extensions @subentry common @subentry @code{/dev/stdout} special file
+@cindex extensions @subentry common @subentry @code{/dev/stderr} special file
+@cindex file names @subentry standard streams in @command{gawk}
@cindex @code{/dev/@dots{}} special files
-@cindex files, @code{/dev/@dots{}} special files
+@cindex files @subentry @code{/dev/@dots{}} special files
@cindex @code{/dev/fd/@var{N}} special files (@command{gawk})
@table @file
@item /dev/stdin
@@ -10545,7 +10574,7 @@ the proper way to write an error message then becomes:
print "Serious error detected!" > "/dev/stderr"
@end example
-@cindex troubleshooting, quotes with file names
+@cindex troubleshooting @subentry quotes with file names
Note the use of quotes around the @value{FN}.
Like with any other redirection, the value must be a string.
It is a common error to omit the quotes, which leads
@@ -10558,7 +10587,7 @@ invoked with the @option{--traditional} option
(@pxref{Options}).
@node Special Files
@section Special @value{FFN}s in @command{gawk}
-@cindex @command{gawk}, file names in
+@cindex @command{gawk} @subentry file names in
Besides access to standard input, standard output, and standard error,
@command{gawk} provides access to any open file descriptor.
@@ -10597,8 +10626,8 @@ above two, does actually close the given file
descriptor.
@node Special Network
@subsection Special Files for Network Communications
-@cindex networks, support for
-@cindex TCP/IP, support for
+@cindex networks @subentry support for
+@cindex TCP/IP @subentry support for
@command{gawk} programs
can open a two-way
@@ -10627,8 +10656,9 @@ Here are some things to bear in mind when using the
special @value{FN}s that @command{gawk} provides:
@itemize @value{BULLET}
-@cindex compatibility mode (@command{gawk}), file names
-@cindex file names, in compatibility mode
+@cindex compatibility mode (@command{gawk}) @subentry file names
+@cindex file names @subentry in compatibility mode
+@cindex POSIX mode
@item
Recognition of the @value{FN}s for the three standard preopened
files is disabled only in POSIX mode.
@@ -10651,12 +10681,12 @@ Doing so results in unpredictable behavior.
@node Close Files And Pipes
@section Closing Input and Output Redirections
-@cindex files, output, See output files
-@cindex input files, closing
-@cindex output, files@comma{} closing
-@cindex pipe, closing
-@cindex coprocesses, closing
-@cindex @code{getline} command, coprocesses@comma{} using from
+@cindex files @subentry output @seeentry{output files}
+@cindex input files @subentry closing
+@cindex output @subentry files, closing
+@cindex pipe @subentry closing
+@cindex coprocesses @subentry closing
+@cindex @code{getline} command @subentry coprocesses, using from
If the same @value{FN} or the same shell command is used with @code{getline}
more than once during the execution of an @command{awk} program
@@ -10758,9 +10788,9 @@ program closes the pipe after each line of output, then
each line makes
a separate message.
@end itemize
-@cindex differences in @command{awk} and @command{gawk}, @code{close()}
function
-@cindex portability, @code{close()} function and
-@cindex @code{close()} function, portability
+@cindex differences in @command{awk} and @command{gawk} @subentry
@code{close()} function
+@cindex portability @subentry @code{close()} function and
+@cindex @code{close()} function @subentry portability
If you use more files than the system allows you to have open,
@command{gawk} attempts to multiplex the available open files among
your @value{DF}s. @command{gawk}'s ability to do this depends upon the
@@ -10808,7 +10838,7 @@ It is, more likely, a close of a file that was never
opened with a
redirection, so @command{awk} silently does nothing, except return
a negative value.
-@cindex @code{|} (vertical bar), @code{|&} operator (I/O), pipes@comma{}
closing
+@cindex @code{|} (vertical bar) @subentry @code{|&} operator (I/O) @subentry
pipes, closing
When using the @samp{|&} operator to communicate with a coprocess,
it is occasionally useful to be able to close one end of the two-way
pipe without closing the other.
@@ -10823,17 +10853,17 @@ delayed until
@ref{Two-way I/O},
which describes it in more detail and gives an example.
-@cindex sidebar, Using @code{close()}'s Return Value
+@cindex sidebar @subentry Using @code{close()}'s Return Value
@ifdocbook
@docbook
<sidebar><title>Using @code{close()}'s Return Value</title>
@end docbook
-@cindex dark corner, @code{close()} function
-@cindex @code{close()} function, return value
-@cindex return value@comma{} @code{close()} function
-@cindex differences in @command{awk} and @command{gawk}, @code{close()}
function
-@cindex Unix @command{awk}, @code{close()} function and
+@cindex dark corner @subentry @code{close()} function
+@cindex @code{close()} function @subentry return value
+@cindex return value, @code{close()} function
+@cindex differences in @command{awk} and @command{gawk} @subentry
@code{close()} function
+@cindex Unix @command{awk} @subentry @code{close()} function and
In many older versions of Unix @command{awk}, the @code{close()} function
is actually a statement.
@@ -10847,8 +10877,8 @@ command | getline info
retval = close(command) # syntax error in many Unix awks
@end example
-@cindex @command{gawk}, @code{ERRNO} variable in
-@cindex @code{ERRNO} variable, with @command{close()} function
+@cindex @command{gawk} @subentry @code{ERRNO} variable in
+@cindex @code{ERRNO} variable @subentry with @command{close()} function
@command{gawk} treats @code{close()} as a function.
The return value is @minus{}1 if the argument names something
that was never opened with a redirection, or if there is
@@ -10877,6 +10907,7 @@ if it fails.
@end multitable
@end float
+@cindex POSIX mode
The POSIX standard is very vague; it says that @code{close()}
returns zero on success and a nonzero value otherwise. In general,
different implementations vary in what they report when closing
@@ -10895,11 +10926,11 @@ when closing a pipe.
@center @b{Using @code{close()}'s Return Value}
-@cindex dark corner, @code{close()} function
-@cindex @code{close()} function, return value
-@cindex return value@comma{} @code{close()} function
-@cindex differences in @command{awk} and @command{gawk}, @code{close()}
function
-@cindex Unix @command{awk}, @code{close()} function and
+@cindex dark corner @subentry @code{close()} function
+@cindex @code{close()} function @subentry return value
+@cindex return value, @code{close()} function
+@cindex differences in @command{awk} and @command{gawk} @subentry
@code{close()} function
+@cindex Unix @command{awk} @subentry @code{close()} function and
In many older versions of Unix @command{awk}, the @code{close()} function
is actually a statement.
@@ -10913,8 +10944,8 @@ command | getline info
retval = close(command) # syntax error in many Unix awks
@end example
-@cindex @command{gawk}, @code{ERRNO} variable in
-@cindex @code{ERRNO} variable, with @command{close()} function
+@cindex @command{gawk} @subentry @code{ERRNO} variable in
+@cindex @code{ERRNO} variable @subentry with @command{close()} function
@command{gawk} treats @code{close()} as a function.
The return value is @minus{}1 if the argument names something
that was never opened with a redirection, or if there is
@@ -10943,6 +10974,7 @@ if it fails.
@end multitable
@end float
+@cindex POSIX mode
The POSIX standard is very vague; it says that @code{close()}
returns zero on success and a nonzero value otherwise. In general,
different implementations vary in what they report when closing
@@ -11011,6 +11043,8 @@ For standard output, you may use @code{PROCINFO["-",
"NONFATAL"]}
or @code{PROCINFO["/dev/stdout", "NONFATAL"]}. For standard error, use
@code{PROCINFO["/dev/stderr", "NONFATAL"]}.
+@cindex @env{GAWK_SOCK_RETRIES} environment variable
+@cindex environment variables @subentry @env{GAWK_SOCK_RETRIES}
When attempting to open a TCP/IP socket (@pxref{TCP/IP Networking}),
@command{gawk} tries multiple times. The @env{GAWK_SOCK_RETRIES}
environment variable (@pxref{Other Environment Variables}) allows you to
@@ -11132,7 +11166,7 @@ that provide the values used in expressions.
@node Constants
@subsection Constant Expressions
-@cindex constants, types of
+@cindex constants @subentry types of
The simplest type of expression is the @dfn{constant}, which always has
the same value. There are three types of constants: numeric,
@@ -11151,8 +11185,8 @@ have different forms, but are internally stored in an
identical manner.
@node Scalar Constants
@subsubsection Numeric and String Constants
-@cindex constants, numeric
-@cindex numeric constants
+@cindex constants @subentry numeric
+@cindex numeric @subentry constants
A @dfn{numeric constant} stands for a number. This number can be an
integer, a decimal fraction, or a number in scientific (exponential)
notation.@footnote{The internal representation of all numbers,
@@ -11168,7 +11202,8 @@ have the same value:
1050e-1
@end example
-@cindex string constants
+@cindex string @subentry constants
+@cindex constants @subentry string
A @dfn{string constant} consists of a sequence of characters enclosed in
double quotation marks. For example:
@@ -11177,8 +11212,9 @@ double quotation marks. For example:
@end example
@noindent
-@cindex differences in @command{awk} and @command{gawk}, strings
-@cindex strings, length limitations
+@cindex differences in @command{awk} and @command{gawk} @subentry strings
+@cindex strings @subentry length limitations
+@cindex ASCII
represents the string whose contents are @samp{parrot}. Strings in
@command{gawk} can be of any length, and they can contain any of the possible
eight-bit ASCII characters, including ASCII @sc{nul} (character code zero).
@@ -11217,9 +11253,9 @@ $ @kbd{gawk 'BEGIN @{ print "hello, }
@print{} gawk: cmd. line:1: ^ syntax error
@end example
-@cindex dark corner, string continuation
-@cindex strings, continuation across lines
-@cindex differences in @command{awk} and @command{gawk}, strings
+@cindex dark corner @subentry string continuation
+@cindex strings @subentry continuation across lines
+@cindex differences in @command{awk} and @command{gawk} @subentry strings
Although POSIX doesn't define what happens if you use an escaped
newline, as in the previous C example, all known versions of
@command{awk} allow you to do so. Unfortunately, what each one
@@ -11233,6 +11269,7 @@ $ @kbd{gawk 'BEGIN @{ print "hello, \}
@print{} hello, world
@end example
+@cindex POSIX mode
In POSIX mode (@pxref{Options}), @command{gawk} does not
allow escaped newlines. Otherwise, it behaves as just described.
@@ -11251,8 +11288,8 @@ $ @kbd{nawk 'BEGIN @{ print "hello, \}
@subsubsection Octal and Hexadecimal Numbers
@cindex octal numbers
@cindex hexadecimal numbers
-@cindex numbers, octal
-@cindex numbers, hexadecimal
+@cindex numbers @subentry octal
+@cindex numbers @subentry hexadecimal
In @command{awk}, all numbers are in decimal (i.e., base 10). Many other
programming languages allow you to specify numbers in other bases, often
@@ -11297,8 +11334,8 @@ Being able to use octal and hexadecimal constants in
your programs is most
useful when working with data that cannot be represented conveniently as
characters or as regular numbers, such as binary data of various sorts.
-@cindex @command{gawk}, octal numbers and
-@cindex @command{gawk}, hexadecimal numbers and
+@cindex @command{gawk} @subentry octal numbers and
+@cindex @command{gawk} @subentry hexadecimal numbers and
@command{gawk} allows the use of octal and hexadecimal
constants in your program text. However, such numbers in the input data
are not treated differently; doing so by default would break old
@@ -11325,14 +11362,14 @@ $ @kbd{gawk 'BEGIN @{ print "021 is", 021 ; print 018
@}'}
@print{} 18
@end example
-@cindex compatibility mode (@command{gawk}), octal numbers
-@cindex compatibility mode (@command{gawk}), hexadecimal numbers
+@cindex compatibility mode (@command{gawk}) @subentry octal numbers
+@cindex compatibility mode (@command{gawk}) @subentry hexadecimal numbers
Octal and hexadecimal source code constants are a @command{gawk} extension.
If @command{gawk} is in compatibility mode
(@pxref{Options}),
they are not available.
-@cindex sidebar, A Constant's Base Does Not Affect Its Value
+@cindex sidebar @subentry A Constant's Base Does Not Affect Its Value
@ifdocbook
@docbook
<sidebar><title>A Constant's Base Does Not Affect Its Value</title>
@@ -11382,8 +11419,8 @@ $ @kbd{gawk 'BEGIN @{ printf "0x11 is <%s>\n", 0x11 @}'}
@cindex regexp constants
@cindex @code{~} (tilde), @code{~} operator
@cindex tilde (@code{~}), @code{~} operator
-@cindex @code{!} (exclamation point), @code{!~} operator
-@cindex exclamation point (@code{!}), @code{!~} operator
+@cindex @code{!} (exclamation point) @subentry @code{!~} operator
+@cindex exclamation point (@code{!}) @subentry @code{!~} operator
A @dfn{regexp constant} is a regular expression description enclosed in
slashes, such as @code{@w{/^beginning and end$/}}. Most regexps used in
@command{awk} programs are constant, but the @samp{~} and @samp{!~}
@@ -11408,7 +11445,7 @@ POSIX @command{awk} and @command{gawk}, and then goes
on to describe
@node Standard Regexp Constants
@subsubsection Standard Regular Expression Constants
-@cindex dark corner, regexp constants
+@cindex dark corner @subentry regexp constants
When used on the righthand side of the @samp{~} or @samp{!~}
operators, a regexp constant merely stands for the regexp that is to be
matched.
@@ -11446,8 +11483,8 @@ if (/foo/ ~ $1) print "found foo"
@c @cindex automatic warnings
@c @cindex warnings, automatic
-@cindex @command{gawk}, regexp constants and
-@cindex regexp constants, in @command{gawk}
+@cindex @command{gawk} @subentry regexp constants and
+@cindex regexp constants @subentry in @command{gawk}
@noindent
This code is ``obviously'' testing @code{$1} for a match against the regexp
@code{/foo/}. But in fact, the expression @samp{/foo/ ~ $1} really means
@@ -11468,8 +11505,8 @@ matches = /foo/
assigns either zero or one to the variable @code{matches}, depending
upon the contents of the current input record.
-@cindex differences in @command{awk} and @command{gawk}, regexp constants
-@cindex dark corner, regexp constants, as arguments to user-defined functions
+@cindex differences in @command{awk} and @command{gawk} @subentry regexp
constants
+@cindex dark corner @subentry regexp constants @subentry as arguments to
user-defined functions
@cindexgawkfunc{gensub}
@cindexawkfunc{sub}
@cindexawkfunc{gsub}
@@ -11544,7 +11581,7 @@ it would be nice to have regexp constants that
are @dfn{strongly typed}; in other words, that denote a regexp useful
for matching, and not an expression.
-@cindex values, regexp
+@cindex values @subentry regexp
@command{gawk} provides this feature. A strongly typed regexp constant
looks almost like a regular regexp constant, except that it is preceded
by an @samp{@@} sign:
@@ -11607,8 +11644,8 @@ value of the original regexp text.
@node Variables
@subsection Variables
-@cindex variables, user-defined
-@cindex user-defined, variables
+@cindex variables @subentry user-defined
+@cindex user-defined @subentry variables
@dfn{Variables} are ways of storing values at one point in your program for
use later in another part of your program. They can be manipulated
entirely within the program text, and they can also be assigned values
@@ -11644,8 +11681,8 @@ change a variable's value, and the @code{match()},
@code{split()},
and @code{patsplit()} functions can change the contents of their
array parameters (@pxref{String Functions}).
-@cindex variables, built-in
-@cindex variables, initializing
+@cindex variables @subentry built-in
+@cindex variables @subentry initializing
A few variables have special built-in meanings, such as @code{FS} (the
field separator) and @code{NF} (the number of fields in the current input
record). @xref{Built-in Variables} for a list of the predefined variables.
@@ -11662,8 +11699,8 @@ which is what you would do in C and in most other
traditional languages.
@node Assignment Options
@subsubsection Assigning Variables on the Command Line
-@cindex variables, assigning on command line
-@cindex command line, variables@comma{} assigning on
+@cindex variables @subentry assigning on command line
+@cindex command line @subentry variables, assigning on
Any @command{awk} variable can be set by including a @dfn{variable assignment}
among the arguments on the command line when @command{awk} is invoked
@@ -11717,7 +11754,7 @@ $ @kbd{awk '@{ print $n @}' n=4 inventory-shipped n=2
mail-list}
@dots{}
@end example
-@cindex dark corner, command-line arguments
+@cindex dark corner @subentry command-line arguments
Command-line arguments are made available for explicit examination by
the @command{awk} program in the @code{ARGV} array
(@pxref{ARGC and ARGV}).
@@ -11758,10 +11795,10 @@ this @value{SECTION} discusses this important facet
of @command{awk}.
@node Strings And Numbers
@subsubsection How @command{awk} Converts Between Strings and Numbers
-@cindex converting, strings to numbers
-@cindex strings, converting
-@cindex numbers, converting
-@cindex converting, numbers to strings
+@cindex converting @subentry string to numbers
+@cindex strings @subentry converting
+@cindex numbers @subentry converting
+@cindex converting @subentry numbers to strings
Strings are converted to numbers and numbers are converted to strings, if the
context
of the @command{awk} program demands it. For example, if the value of
either @code{foo} or @code{bar} in the expression @samp{foo + bar}
@@ -11782,8 +11819,8 @@ the variables @code{two} and @code{three} are converted
to strings and
concatenated together. The resulting string is converted back to the
number 23, to which 4 is then added.
-@cindex null strings, converting numbers to strings
-@cindex type conversion
+@cindex null strings @subentry converting numbers to strings
+@cindex type @subentry conversion
If, for some reason, you need to force a number to be converted to a
string, concatenate that number with the empty string, @code{""}.
To force a string to be converted to a number, add zero to that string.
@@ -11809,7 +11846,7 @@ On most modern machines,
value exactly.@footnote{Pathological cases can require up to
752 digits (!), but we doubt that you need to worry about this.}
-@cindex dark corner, @code{CONVFMT} variable
+@cindex dark corner @subentry @code{CONVFMT} variable
Strange results can occur if you set @code{CONVFMT} to a string that doesn't
tell @code{sprintf()} how to format floating-point numbers in a useful way.
For example, if you forget the @samp{%} in the format, @command{awk} converts
@@ -11829,16 +11866,16 @@ b = a ""
@code{b} has the value @code{"12"}, not @code{"12.00"}.
@value{DARKCORNER}
-@cindex sidebar, Pre-POSIX @command{awk} Used @code{OFMT} for String Conversion
+@cindex sidebar @subentry Pre-POSIX @command{awk} Used @code{OFMT} for String
Conversion
@ifdocbook
@docbook
<sidebar><title>Pre-POSIX @command{awk} Used @code{OFMT} for String
Conversion</title>
@end docbook
-@cindex POSIX @command{awk}, @code{OFMT} variable and
+@cindex POSIX @command{awk} @subentry @code{OFMT} variable and
@cindex @code{OFMT} variable
-@cindex portability, new @command{awk} vs.@: old @command{awk}
-@cindex @command{awk}, new vs.@: old, @code{OFMT} variable
+@cindex portability @subentry new @command{awk} vs.@: old @command{awk}
+@cindex @command{awk} @subentry new vs.@: old @subentry @code{OFMT} variable
Prior to the POSIX standard, @command{awk} used the value
of @code{OFMT} for converting numbers to strings. @code{OFMT}
specifies the output format to use when printing numbers with @code{print}.
@@ -11858,10 +11895,10 @@ of cases, old @command{awk} programs do not change
their behavior.
@center @b{Pre-POSIX @command{awk} Used @code{OFMT} for String Conversion}
-@cindex POSIX @command{awk}, @code{OFMT} variable and
+@cindex POSIX @command{awk} @subentry @code{OFMT} variable and
@cindex @code{OFMT} variable
-@cindex portability, new @command{awk} vs.@: old @command{awk}
-@cindex @command{awk}, new vs.@: old, @code{OFMT} variable
+@cindex portability @subentry new @command{awk} vs.@: old @command{awk}
+@cindex @command{awk} @subentry new vs.@: old @subentry @code{OFMT} variable
Prior to the POSIX standard, @command{awk} used the value
of @code{OFMT} for converting numbers to strings. @code{OFMT}
specifies the output format to use when printing numbers with @code{print}.
@@ -11887,7 +11924,7 @@ non-English locales use the comma (@samp{,}) as the
decimal point
character. European locales often use either a space or a period as
the thousands separator, if they have one.
-@cindex dark corner, locale's decimal point character
+@cindex dark corner @subentry locale's decimal point character
The POSIX standard says that @command{awk} always uses the period as the
decimal
point when reading the @command{awk} program source code, and for
command-line variable assignments (@pxref{Other Arguments}). However,
@@ -11915,6 +11952,7 @@ the decimal point separator. In the normal @code{"C"}
locale, @command{gawk}
treats @samp{4,321} as 4, while in the Danish locale, it's treated
as the full number including the fractional part, 4.321.
+@cindex POSIX mode
Some earlier versions of @command{gawk} fully complied with this aspect
of the standard. However, many users in non-English locales complained
about this behavior, because their data used a period as the decimal
@@ -11962,7 +12000,7 @@ of the values provided by constants and variables.
@node Arithmetic Ops
@subsection Arithmetic Operators
@cindex arithmetic operators
-@cindex operators, arithmetic
+@cindex operators @subentry arithmetic
@c @cindex addition
@c @cindex subtraction
@c @cindex multiplication
@@ -12001,9 +12039,9 @@ The following list provides the arithmetic operators in
@command{awk},
in order from the highest precedence to the lowest:
@table @code
-@cindex common extensions, @code{**} operator
-@cindex extensions, common@comma{} @code{**} operator
-@cindex POSIX @command{awk}, arithmetic operators and
+@cindex common extensions @subentry @code{**} operator
+@cindex extensions @subentry common @subentry @code{**} operator
+@cindex POSIX @command{awk} @subentry arithmetic operators and
@item @var{x} ^ @var{y}
@itemx @var{x} ** @var{y}
Exponentiation; @var{x} raised to the @var{y} power. @samp{2 ^ 3} has
@@ -12019,7 +12057,7 @@ Unary plus; the expression is converted to a number.
@item @var{x} * @var{y}
Multiplication.
-@cindex troubleshooting, division
+@cindex troubleshooting @subentry division
@cindex division
@item @var{x} / @var{y}
Division; because all numbers in @command{awk} are floating-point
@@ -12044,7 +12082,7 @@ Unary plus and minus have the same precedence,
the multiplication operators all have the same precedence, and
addition and subtraction have the same precedence.
-@cindex differences in @command{awk} and @command{gawk}, trunc-mod operation
+@cindex differences in @command{awk} and @command{gawk} @subentry trunc-mod
operation
@cindex trunc-mod operation
When computing the remainder of @samp{@var{x} % @var{y}},
the quotient is rounded toward zero to an integer and
@@ -12067,9 +12105,9 @@ In other @command{awk} implementations, the signedness
of the remainder
may be machine-dependent.
@c FIXME !!! what does posix say?
-@cindex portability, @code{**} operator and
-@cindex @code{*} (asterisk), @code{**} operator
-@cindex asterisk (@code{*}), @code{**} operator
+@cindex portability @subentry @code{**} operator and
+@cindex @code{*} (asterisk) @subentry @code{**} operator
+@cindex asterisk (@code{*}) @subentry @code{**} operator
@quotation NOTE
The POSIX standard only specifies the use of @samp{^}
for exponentiation.
@@ -12084,8 +12122,8 @@ For maximum portability, do not use the @samp{**}
operator.
@author Brian Kernighan
@end quotation
-@cindex string operators
-@cindex operators, string
+@cindex string @subentry operators
+@cindex operators @subentry string
@cindex concatenating
There is only one string operation: concatenation. It does not have a
specific operator to represent it. Instead, concatenation is performed by
@@ -12108,7 +12146,7 @@ $ @kbd{awk '@{ print "Field number one:" $1 @}'
mail-list}
@dots{}
@end example
-@cindex troubleshooting, string concatenation
+@cindex troubleshooting @subentry string concatenation
Because string concatenation does not have an explicit operator, it is
often necessary to ensure that it happens at the right time by using
parentheses to enclose the items to concatenate. For example,
@@ -12135,7 +12173,7 @@ print "something meaningful" > (file name)
@end example
@cindex order of evaluation, concatenation
-@cindex evaluation order, concatenation
+@cindex evaluation order @subentry concatenation
@cindex side effects
Parentheses should be used around concatenation in all but the
most common contexts, such as on the righthand side of @samp{=}.
@@ -12216,10 +12254,10 @@ you're never quite sure what you'll get.
@node Assignment Ops
@subsection Assignment Expressions
@cindex assignment operators
-@cindex operators, assignment
-@cindex expressions, assignment
-@cindex @code{=} (equals sign), @code{=} operator
-@cindex equals sign (@code{=}), @code{=} operator
+@cindex operators @subentry assignment
+@cindex expressions @subentry assignment
+@cindex @code{=} (equals sign) @subentry @code{=} operator
+@cindex equals sign (@code{=}) @subentry @code{=} operator
An @dfn{assignment} is an expression that stores a (usually different)
value into a variable. For example, let's assign the value one to the variable
@code{z}:
@@ -12242,7 +12280,7 @@ message = "this " thing " is " predicate
@end example
@noindent
-@cindex side effects, assignment expressions
+@cindex side effects @subentry assignment expressions
This also illustrates string concatenation.
The @samp{=} sign is called an @dfn{assignment operator}. It is the
simplest assignment operator because the value of the righthand
@@ -12256,8 +12294,8 @@ a @dfn{side effect}.
@cindex lvalues/rvalues
@cindex rvalues/lvalues
-@cindex assignment operators, lvalues/rvalues
-@cindex operators, assignment
+@cindex assignment operators @subentry lvalues/rvalues
+@cindex operators @subentry assignment
The lefthand operand of an assignment need not be a variable
(@pxref{Variables}); it can also be a field
(@pxref{Changing Fields}) or
@@ -12268,7 +12306,7 @@ The righthand operand may be any expression; it
produces the new value
that the assignment stores in the specified variable, field, or array
element. (Such values are called @dfn{rvalues}.)
-@cindex variables, types of
+@cindex variables @subentry types of
It is important to note that variables do @emph{not} have permanent types.
A variable's type is simply the type of whatever value was last assigned
to it. In the following program fragment, the variable
@@ -12326,8 +12364,8 @@ and then test whether @code{x} equals one. But this
style tends to make
programs hard to read; such nesting of assignments should be avoided,
except perhaps in a one-shot program.
-@cindex @code{+} (plus sign), @code{+=} operator
-@cindex plus sign (@code{+}), @code{+=} operator
+@cindex @code{+} (plus sign) @subentry @code{+=} operator
+@cindex plus sign (@code{+}) @subentry @code{+=} operator
Aside from @samp{=}, there are several other assignment operators that
do arithmetic with the old value of the variable. For example, the
operator @samp{+=} computes a new value by adding the righthand value
@@ -12370,8 +12408,8 @@ BEGIN @{
@end group
@end example
-@cindex operators, assignment, evaluation order
-@cindex assignment operators, evaluation order
+@cindex operators @subentry assignment @subentry evaluation order
+@cindex assignment operators @subentry evaluation order
@noindent
The indices of @code{bar} are practically guaranteed to be different, because
@code{rand()} returns different values each time it is called.
@@ -12404,18 +12442,18 @@ The value of @code{a[3]} could be either two or four.
case, the righthand operand is an expression whose value is converted
to a number.
-@cindex @code{-} (hyphen), @code{-=} operator
-@cindex hyphen (@code{-}), @code{-=} operator
-@cindex @code{*} (asterisk), @code{*=} operator
-@cindex asterisk (@code{*}), @code{*=} operator
-@cindex @code{/} (forward slash), @code{/=} operator
-@cindex forward slash (@code{/}), @code{/=} operator
-@cindex @code{%} (percent sign), @code{%=} operator
-@cindex percent sign (@code{%}), @code{%=} operator
-@cindex @code{^} (caret), @code{^=} operator
-@cindex caret (@code{^}), @code{^=} operator
-@cindex @code{*} (asterisk), @code{**=} operator
-@cindex asterisk (@code{*}), @code{**=} operator
+@cindex @code{-} (hyphen) @subentry @code{-=} operator
+@cindex hyphen (@code{-}) @subentry @code{-=} operator
+@cindex @code{*} (asterisk) @subentry @code{*=} operator
+@cindex asterisk (@code{*}) @subentry @code{*=} operator
+@cindex @code{/} (forward slash) @subentry @code{/=} operator
+@cindex forward slash (@code{/}) @subentry @code{/=} operator
+@cindex @code{%} (percent sign) @subentry @code{%=} operator
+@cindex percent sign (@code{%}) @subentry @code{%=} operator
+@cindex @code{^} (caret) @subentry @code{^=} operator
+@cindex caret (@code{^}) @subentry @code{^=} operator
+@cindex @code{*} (asterisk) @subentry @code{**=} operator
+@cindex asterisk (@code{*}) @subentry @code{**=} operator
@float Table,table-assign-ops
@caption{Arithmetic assignment operators}
@multitable @columnfractions .30 .70
@@ -12425,37 +12463,37 @@ to a number.
@item @var{lvalue} @code{*=} @var{coefficient} @tab Multiply the value of
@var{lvalue} by @var{coefficient}.
@item @var{lvalue} @code{/=} @var{divisor} @tab Divide the value of
@var{lvalue} by @var{divisor}.
@item @var{lvalue} @code{%=} @var{modulus} @tab Set @var{lvalue} to its
remainder by @var{modulus}.
-@cindex common extensions, @code{**=} operator
-@cindex extensions, common@comma{} @code{**=} operator
-@cindex @command{awk} language, POSIX version
+@cindex common extensions @subentry @code{**=} operator
+@cindex extensions @subentry common @subentry @code{**=} operator
+@cindex @command{awk} @subentry language, POSIX version
@cindex POSIX @command{awk}
@item @var{lvalue} @code{^=} @var{power} @tab Raise @var{lvalue} to the power
@var{power}.
@item @var{lvalue} @code{**=} @var{power} @tab Raise @var{lvalue} to the power
@var{power}. @value{COMMONEXT}
@end multitable
@end float
-@cindex POSIX @command{awk}, @code{**=} operator and
-@cindex portability, @code{**=} operator and
+@cindex POSIX @command{awk} @subentry @code{**=} operator and
+@cindex portability @subentry @code{**=} operator and
@quotation NOTE
Only the @samp{^=} operator is specified by POSIX.
For maximum portability, do not use the @samp{**=} operator.
@end quotation
-@cindex sidebar, Syntactic Ambiguities Between @samp{/=} and Regular
Expressions
+@cindex sidebar @subentry Syntactic Ambiguities Between @samp{/=} and Regular
Expressions
@ifdocbook
@docbook
<sidebar><title>Syntactic Ambiguities Between @samp{/=} and Regular
Expressions</title>
@end docbook
-@cindex dark corner, regexp constants, @code{/=} operator and
-@cindex @code{/} (forward slash), @code{/=} operator, vs. @code{/=@dots{}/}
regexp constant
-@cindex forward slash (@code{/}), @code{/=} operator, vs. @code{/=@dots{}/}
regexp constant
-@cindex regexp constants, @code{/=@dots{}/}, @code{/=} operator and
+@cindex dark corner @subentry regexp constants @subentry @code{/=} operator and
+@cindex @code{/} (forward slash) @subentry @code{/=} operator @subentry vs.
@code{/=@dots{}/} regexp constant
+@cindex forward slash (@code{/}) @subentry @code{/=} operator @subentry vs.
@code{/=@dots{}/} regexp constant
+@cindex regexp constants @subentry @code{/=@dots{}/} @subentry @code{/=}
operator and
@c derived from email from "Nelson H. F. Beebe" <address@hidden>
@c Date: Mon, 1 Sep 1997 13:38:35 -0600 (MDT)
-@cindex dark corner, @code{/=} operator vs. @code{/=@dots{}/} regexp constant
+@cindex dark corner @subentry @code{/=} operator vs. @code{/=@dots{}/} regexp
constant
@cindex ambiguity, syntactic: @code{/=} operator vs. @code{/=@dots{}/} regexp
constant
@cindex syntactic ambiguity: @code{/=} operator vs. @code{/=@dots{}/} regexp
constant
@cindex @code{/=} operator vs. @code{/=@dots{}/} regexp constant
@@ -12493,15 +12531,15 @@ and @command{mawk} also do not.
@center @b{Syntactic Ambiguities Between @samp{/=} and Regular Expressions}
-@cindex dark corner, regexp constants, @code{/=} operator and
-@cindex @code{/} (forward slash), @code{/=} operator, vs. @code{/=@dots{}/}
regexp constant
-@cindex forward slash (@code{/}), @code{/=} operator, vs. @code{/=@dots{}/}
regexp constant
-@cindex regexp constants, @code{/=@dots{}/}, @code{/=} operator and
+@cindex dark corner @subentry regexp constants @subentry @code{/=} operator and
+@cindex @code{/} (forward slash) @subentry @code{/=} operator @subentry vs.
@code{/=@dots{}/} regexp constant
+@cindex forward slash (@code{/}) @subentry @code{/=} operator @subentry vs.
@code{/=@dots{}/} regexp constant
+@cindex regexp constants @subentry @code{/=@dots{}/} @subentry @code{/=}
operator and
@c derived from email from "Nelson H. F. Beebe" <address@hidden>
@c Date: Mon, 1 Sep 1997 13:38:35 -0600 (MDT)
-@cindex dark corner, @code{/=} operator vs. @code{/=@dots{}/} regexp constant
+@cindex dark corner @subentry @code{/=} operator vs. @code{/=@dots{}/} regexp
constant
@cindex ambiguity, syntactic: @code{/=} operator vs. @code{/=@dots{}/} regexp
constant
@cindex syntactic ambiguity: @code{/=} operator vs. @code{/=@dots{}/} regexp
constant
@cindex @code{/=} operator vs. @code{/=@dots{}/} regexp constant
@@ -12535,16 +12573,16 @@ and @command{mawk} also do not.
@subsection Increment and Decrement Operators
@cindex increment operators
-@cindex operators, decrement/increment
+@cindex operators @subentry decrement/increment
@dfn{Increment} and @dfn{decrement operators} increase or decrease the value of
a variable by one. An assignment operator can do the same thing, so
the increment operators add no power to the @command{awk} language; however,
they
are convenient abbreviations for very common operations.
@cindex side effects
-@cindex @code{+} (plus sign), @code{++} operator
-@cindex plus sign (@code{+}), @code{++} operator
-@cindex side effects, decrement/increment operators
+@cindex @code{+} (plus sign) @subentry @code{++} operator
+@cindex plus sign (@code{+}) @subentry @code{++} operator
+@cindex side effects @subentry decrement/increment operators
The operator used for adding one is written @samp{++}. It can be used to
increment
a variable either before or after taking its value.
To @dfn{pre-increment} a variable @code{v}, write @samp{++v}. This adds
@@ -12575,8 +12613,8 @@ long as you stick to numbers that are fairly small
(less than
@end ifnotinfo
@end ifnottex
-@cindex @code{$} (dollar sign), incrementing fields and arrays
-@cindex dollar sign (@code{$}), incrementing fields and arrays
+@cindex @code{$} (dollar sign) @subentry incrementing fields and arrays
+@cindex dollar sign (@code{$}) @subentry incrementing fields and arrays
Fields and array elements are incremented
just like variables. (Use @samp{$(i++)} when you want to do a field reference
and a variable increment at the same time. The parentheses are necessary
@@ -12589,8 +12627,8 @@ the lvalue to pre-decrement or after it to
post-decrement.
Following is a summary of increment and decrement expressions:
@table @code
-@cindex @code{+} (plus sign), @code{++} operator
-@cindex plus sign (@code{+}), @code{++} operator
+@cindex @code{+} (plus sign) @subentry @code{++} operator
+@cindex plus sign (@code{+}) @subentry @code{++} operator
@item ++@var{lvalue}
Increment @var{lvalue}, returning the new value as the
value of the expression.
@@ -12599,8 +12637,8 @@ value of the expression.
Increment @var{lvalue}, returning the @emph{old} value of @var{lvalue}
as the value of the expression.
-@cindex @code{-} (hyphen), @code{--} operator
-@cindex hyphen (@code{-}), @code{--} operator
+@cindex @code{-} (hyphen) @subentry @code{--} operator
+@cindex hyphen (@code{-}) @subentry @code{--} operator
@item --@var{lvalue}
Decrement @var{lvalue}, returning the new value as the
value of the expression.
@@ -12614,15 +12652,15 @@ as the value of the expression.
like @samp{@var{lvalue}++}, but instead of adding, it subtracts.)
@end table
-@cindex sidebar, Operator Evaluation Order
+@cindex sidebar @subentry Operator Evaluation Order
@ifdocbook
@docbook
<sidebar><title>Operator Evaluation Order</title>
@end docbook
@cindex precedence
-@cindex operators, precedence of
-@cindex portability, operators
+@cindex operators @subentry precedence of
+@cindex portability @subentry operators
@cindex evaluation order
@cindex Marx, Groucho
@quotation
@@ -12673,8 +12711,8 @@ You should avoid such things in your own programs.
@cindex precedence
-@cindex operators, precedence of
-@cindex portability, operators
+@cindex operators @subentry precedence of
+@cindex portability @subentry operators
@cindex evaluation order
@cindex Marx, Groucho
@quotation
@@ -12767,7 +12805,7 @@ BEGIN @{
@}
@end example
-@cindex dark corner, @code{"0"} is actually true
+@cindex dark corner @subentry @code{"0"} is actually true
There is a surprising consequence of the ``nonzero or non-null'' rule:
the string constant @code{"0"} is actually true, because it is non-null.
@value{DARKCORNER}
@@ -12783,13 +12821,12 @@ the string constant @code{"0"} is actually true,
because it is non-null.
@c leave it alone.
@cindex comparison expressions
-@cindex expressions, comparison
-@cindex expressions, matching, See comparison expressions
-@cindex matching, expressions, See comparison expressions
-@cindex relational operators, See comparison operators
-@cindex operators, relational, See operators@comma{} comparison
-@cindex variable typing
-@cindex variables, types of, comparison expressions and
+@cindex expressions @subentry comparison
+@cindex expressions, matching @seeentry{comparison expressions}
+@cindex matching @subentry expressions @seeentry{comparison expressions}
+@cindex relational operators @seeentry{comparison operators}
+@cindex operators, relational @seeentry{operators, comparison}
+@cindex variables @subentry types of @subentry comparison expressions and
Unlike in other programming languages, in @command{awk} variables do not have a
fixed type. Instead, they can be either a number or a string, depending
upon the value that is assigned to them.
@@ -12883,9 +12920,9 @@ $ @kbd{echo 37 | awk '@{ printf("%s %s < 42\n", $1,}
Here are the rules for when @command{awk}
treats data as a number, and for when it treats data as a string.
-@cindex numeric, strings
-@cindex strings, numeric
-@cindex POSIX @command{awk}, numeric strings and
+@cindex numeric @subentry strings
+@cindex strings @subentry numeric
+@cindex POSIX @command{awk} @subentry numeric strings and
The POSIX standard uses the term @dfn{numeric string} for input data that
looks numeric. The @samp{37} in the previous example is a numeric string.
So what is the type of a numeric string? Answer: numeric.
@@ -13097,28 +13134,29 @@ $ @kbd{echo hello 37 | gawk '@{ print typeof($1),
typeof($2) @}'}
@node Comparison Operators
@subsubsection Comparison Operators
+@cindex operators @subentry comparison
@dfn{Comparison expressions} compare strings or numbers for
relationships such as equality. They are written using @dfn{relational
operators}, which are a superset of those in C.
@ref{table-relational-ops} describes them.
-@cindex @code{<} (left angle bracket), @code{<} operator
-@cindex left angle bracket (@code{<}), @code{<} operator
-@cindex @code{<} (left angle bracket), @code{<=} operator
-@cindex left angle bracket (@code{<}), @code{<=} operator
-@cindex @code{>} (right angle bracket), @code{>=} operator
-@cindex right angle bracket (@code{>}), @code{>=} operator
-@cindex @code{>} (right angle bracket), @code{>} operator
-@cindex right angle bracket (@code{>}), @code{>} operator
-@cindex @code{=} (equals sign), @code{==} operator
-@cindex equals sign (@code{=}), @code{==} operator
-@cindex @code{!} (exclamation point), @code{!=} operator
-@cindex exclamation point (@code{!}), @code{!=} operator
+@cindex @code{<} (left angle bracket) @subentry @code{<} operator
+@cindex left angle bracket (@code{<}) @subentry @code{<} operator
+@cindex @code{<} (left angle bracket) @subentry @code{<=} operator
+@cindex left angle bracket (@code{<}) @subentry @code{<=} operator
+@cindex @code{>} (right angle bracket) @subentry @code{>=} operator
+@cindex right angle bracket (@code{>}) @subentry @code{>=} operator
+@cindex @code{>} (right angle bracket) @subentry @code{>} operator
+@cindex right angle bracket (@code{>}) @subentry @code{>} operator
+@cindex @code{=} (equals sign) @subentry @code{==} operator
+@cindex equals sign (@code{=}) @subentry @code{==} operator
+@cindex @code{!} (exclamation point) @subentry @code{!=} operator
+@cindex exclamation point (@code{!}) @subentry @code{!=} operator
@cindex @code{~} (tilde), @code{~} operator
@cindex tilde (@code{~}), @code{~} operator
-@cindex @code{!} (exclamation point), @code{!~} operator
-@cindex exclamation point (@code{!}), @code{!~} operator
+@cindex @code{!} (exclamation point) @subentry @code{!~} operator
+@cindex exclamation point (@code{!}) @subentry @code{!~} operator
@cindex @code{in} operator
@float Table,table-relational-ops
@caption{Relational operators}
@@ -13147,7 +13185,7 @@ and so on. Thus, @code{"10"} is less than @code{"9"}.
If there are two
strings where one is a prefix of the other, the shorter string is less than
the longer one. Thus, @code{"abc"} is less than @code{"abcd"}.
-@cindex troubleshooting, @code{==} operator
+@cindex troubleshooting @subentry @code{==} operator
It is very easy to accidentally mistype the @samp{==} operator and
leave off one of the @samp{=} characters. The result is still valid
@command{awk} code, but the program does not do what is intended:
@@ -13199,7 +13237,7 @@ $ @kbd{echo 1e2 3 | awk '@{ print ($1 < $2) ? "true" :
"false" @}'}
@print{} false
@end example
-@cindex comparison expressions, string vs.@: regexp
+@cindex comparison expressions @subentry string vs.@: regexp
@c @cindex string comparison vs.@: regexp comparison
@c @cindex regexp comparison vs.@: string comparison
@noindent
@@ -13231,15 +13269,15 @@ has the value one if @code{x} contains @samp{foo},
such as
@cindex @code{~} (tilde), @code{~} operator
@cindex tilde (@code{~}), @code{~} operator
-@cindex @code{!} (exclamation point), @code{!~} operator
-@cindex exclamation point (@code{!}), @code{!~} operator
+@cindex @code{!} (exclamation point) @subentry @code{!~} operator
+@cindex exclamation point (@code{!}) @subentry @code{!~} operator
The righthand operand of the @samp{~} and @samp{!~} operators may be
either a regexp constant (@code{/}@dots{}@code{/}) or an ordinary
expression. In the latter case, the value of the expression as a string is
used as a
dynamic regexp (@pxref{Regexp Usage}; also
@pxref{Computed Regexps}).
-@cindex @command{awk}, regexp constants and
+@cindex @command{awk} @subentry regexp constants and
@cindex regexp constants
A constant regular
expression in slashes by itself is also an expression.
@@ -13267,6 +13305,7 @@ comparison.@footnote{Technically, string comparison is
supposed to behave
the same way as if the strings were compared with the C @code{strcoll()}
function.}
+@cindex POSIX mode
Because this behavior differs considerably from existing practice,
@command{gawk} only implemented it when in POSIX mode (@pxref{Options}).
Here is an example to illustrate the difference, in an @code{en_US.UTF-8}
@@ -13298,6 +13337,7 @@ a <= b && a >= b
@end example
@end quotation
+@cindex POSIX mode
As of @value{PVERSION} 4.2, @command{gawk} continues to use locale
collating order for @code{<}, @code{<=}, @code{>}, and @code{>=} only
in POSIX mode.
@@ -13312,12 +13352,12 @@ and http://austingroupbugs.net/view.php?id=1070.
@cindex and Boolean-logic operator
@cindex or Boolean-logic operator
@cindex not Boolean-logic operator
-@cindex expressions, Boolean
+@cindex expressions @subentry Boolean
@cindex Boolean expressions
-@cindex operators, Boolean, See Boolean expressions
-@cindex Boolean operators, See Boolean expressions
-@cindex logical operators, See Boolean expressions
-@cindex operators, logical, See Boolean expressions
+@cindex operators, Boolean @seeentry{Boolean expressions}
+@cindex Boolean operators @seeentry{Boolean expressions}
+@cindex logical operators @seeentry{Boolean expressions}
+@cindex operators, logical @seeentry{Boolean expressions}
A @dfn{Boolean expression} is a combination of comparison expressions or
matching expressions, using the Boolean operators ``or''
@@ -13349,7 +13389,7 @@ both @samp{edu} and @samp{li}:
if ($0 ~ /edu/ && $0 ~ /li/) print
@end example
-@cindex side effects, Boolean operators
+@cindex side effects @subentry Boolean operators
The subexpression @var{boolean2} is evaluated only if @var{boolean1}
is true. This can make a difference when @var{boolean2} contains
expressions that have side effects. In the case of @samp{$0 ~ /foo/ &&
@@ -13389,11 +13429,11 @@ BEGIN @{ if (! ("HOME" in ENVIRON))
@end table
@cindex short-circuit operators
-@cindex operators, short-circuit
-@cindex @code{&} (ampersand), @code{&&} operator
-@cindex ampersand (@code{&}), @code{&&} operator
-@cindex @code{|} (vertical bar), @code{||} operator
-@cindex vertical bar (@code{|}), @code{||} operator
+@cindex operators @subentry short-circuit
+@cindex @code{&} (ampersand) @subentry @code{&&} operator
+@cindex ampersand (@code{&}) @subentry @code{&&} operator
+@cindex @code{|} (vertical bar) @subentry @code{||} operator
+@cindex vertical bar (@code{|}) @subentry @code{||} operator
The @samp{&&} and @samp{||} operators are called @dfn{short-circuit}
operators because of the way they work. Evaluation of the full expression
is ``short-circuited'' if the result can be determined partway through
@@ -13405,10 +13445,10 @@ by putting a newline after them. But you cannot put
a newline in front
of either of these operators without using backslash continuation
(@pxref{Statements/Lines}).
-@cindex @code{!} (exclamation point), @code{!} operator
-@cindex exclamation point (@code{!}), @code{!} operator
+@cindex @code{!} (exclamation point) @subentry @code{!} operator
+@cindex exclamation point (@code{!}) @subentry @code{!} operator
@cindex newlines
-@cindex variables, flag
+@cindex variables @subentry flag
@cindex flag variables
The actual value of an expression using the @samp{!} operator is
either one or zero, depending upon the truth value of the expression it
@@ -13462,8 +13502,8 @@ The reason it's there is to avoid printing the
bracketing
@node Conditional Exp
@subsection Conditional Expressions
@cindex conditional expressions
-@cindex expressions, conditional
-@cindex expressions, selecting
+@cindex expressions @subentry conditional
+@cindex expressions @subentry selecting
A @dfn{conditional expression} is a special kind of expression that has
three operands. It allows you to use one expression's value to select
@@ -13487,7 +13527,7 @@ For example, the following expression produces the
absolute value of @code{x}:
x >= 0 ? x : -x
@end example
-@cindex side effects, conditional expressions
+@cindex side effects @subentry conditional expressions
Each time the conditional expression is computed, only one of
@var{if-true-exp} and @var{if-false-exp} is used; the other is ignored.
This is important when the expressions have side effects. For example,
@@ -13505,9 +13545,9 @@ and the other is not.
@xref{Arrays},
for more information about arrays.
-@cindex differences in @command{awk} and @command{gawk}, line continuations
-@cindex line continuations, @command{gawk}
-@cindex @command{gawk}, line continuation in
+@cindex differences in @command{awk} and @command{gawk} @subentry line
continuations
+@cindex line continuations @subentry @command{gawk}
+@cindex @command{gawk} @subentry line continuation in
As a minor @command{gawk} extension,
a statement that uses @samp{?:} can be continued simply
by putting a newline after either character.
@@ -13526,7 +13566,7 @@ This enables you to
ask for it by name at any point in the program. For
example, the function @code{sqrt()} computes the square root of a number.
-@cindex functions, built-in
+@cindex functions @subentry built-in
A fixed set of functions are @dfn{built in}, which means they are
available in every @command{awk} program. The @code{sqrt()} function is one
of these. @xref{Built-in} for a list of built-in
@@ -13537,7 +13577,7 @@ for instructions on how to do this.
Finally, @command{gawk} lets you write functions in C or C++
that may be called from your program (@pxref{Dynamic Extensions}).
-@cindex arguments, in function calls
+@cindex arguments @subentry in function calls
The way to use a function is with a @dfn{function call} expression,
which consists of the function name followed immediately by a list of
@dfn{arguments} in parentheses. The arguments are expressions that
@@ -13552,7 +13592,7 @@ atan2(y, x) @ii{two arguments}
rand() @ii{no arguments}
@end example
-@cindex troubleshooting, function call syntax
+@cindex troubleshooting @subentry function call syntax
@quotation CAUTION
Do not put any space between the function name and the opening parenthesis!
A user-defined function name looks just like the name of a
@@ -13587,7 +13627,7 @@ which is a way to choose the function to call at
runtime, instead of
when you write the source code to your program. We defer discussion of
this feature until later; see @ref{Indirect Calls}.
-@cindex side effects, function calls
+@cindex side effects @subentry function calls
Like every other expression, the function call has a value, often
called the @dfn{return value}, which is computed by the function
based on the arguments you give it. In this example, the return value
@@ -13637,7 +13677,7 @@ $ @kbd{awk -f matchit.awk}
@node Precedence
@section Operator Precedence (How Operators Nest)
@cindex precedence
-@cindex operators, precedence
+@cindex operators @subentry precedence of
@dfn{Operator precedence} determines how operators are grouped when
different operators appear close by in one expression. For example,
@@ -13684,47 +13724,47 @@ to lowest precedence:
@item @code{(}@dots{}@code{)}
Grouping.
-@cindex @code{$} (dollar sign), @code{$} field operator
-@cindex dollar sign (@code{$}), @code{$} field operator
+@cindex @code{$} (dollar sign) @subentry @code{$} field operator
+@cindex dollar sign (@code{$}) @subentry @code{$} field operator
@item @code{$}
Field reference.
-@cindex @code{+} (plus sign), @code{++} operator
-@cindex plus sign (@code{+}), @code{++} operator
-@cindex @code{-} (hyphen), @code{--} operator
-@cindex hyphen (@code{-}), @code{--} operator
+@cindex @code{+} (plus sign) @subentry @code{++} operator
+@cindex plus sign (@code{+}) @subentry @code{++} operator
+@cindex @code{-} (hyphen) @subentry @code{--} operator
+@cindex hyphen (@code{-}) @subentry @code{--} operator
@item @code{++ --}
Increment, decrement.
-@cindex @code{^} (caret), @code{^} operator
-@cindex caret (@code{^}), @code{^} operator
-@cindex @code{*} (asterisk), @code{**} operator
-@cindex asterisk (@code{*}), @code{**} operator
+@cindex @code{^} (caret) @subentry @code{^} operator
+@cindex caret (@code{^}) @subentry @code{^} operator
+@cindex @code{*} (asterisk) @subentry @code{**} operator
+@cindex asterisk (@code{*}) @subentry @code{**} operator
@item @code{^ **}
Exponentiation. These operators group right to left.
-@cindex @code{+} (plus sign), @code{+} operator
-@cindex plus sign (@code{+}), @code{+} operator
-@cindex @code{-} (hyphen), @code{-} operator
-@cindex hyphen (@code{-}), @code{-} operator
-@cindex @code{!} (exclamation point), @code{!} operator
-@cindex exclamation point (@code{!}), @code{!} operator
+@cindex @code{+} (plus sign) @subentry @code{+} operator
+@cindex plus sign (@code{+}) @subentry @code{+} operator
+@cindex @code{-} (hyphen) @subentry @code{-} operator
+@cindex hyphen (@code{-}) @subentry @code{-} operator
+@cindex @code{!} (exclamation point) @subentry @code{!} operator
+@cindex exclamation point (@code{!}) @subentry @code{!} operator
@item @code{+ - !}
Unary plus, minus, logical ``not.''
-@cindex @code{*} (asterisk), @code{*} operator, as multiplication operator
-@cindex asterisk (@code{*}), @code{*} operator, as multiplication operator
-@cindex @code{/} (forward slash), @code{/} operator
-@cindex forward slash (@code{/}), @code{/} operator
-@cindex @code{%} (percent sign), @code{%} operator
-@cindex percent sign (@code{%}), @code{%} operator
+@cindex @code{*} (asterisk) @subentry @code{*} operator @subentry as
multiplication operator
+@cindex asterisk (@code{*}) @subentry @code{*} operator @subentry as
multiplication operator
+@cindex @code{/} (forward slash) @subentry @code{/} operator
+@cindex forward slash (@code{/}) @subentry @code{/} operator
+@cindex @code{%} (percent sign) @subentry @code{%} operator
+@cindex percent sign (@code{%}) @subentry @code{%} operator
@item @code{* / %}
Multiplication, division, remainder.
-@cindex @code{+} (plus sign), @code{+} operator
-@cindex plus sign (@code{+}), @code{+} operator
-@cindex @code{-} (hyphen), @code{-} operator
-@cindex hyphen (@code{-}), @code{-} operator
+@cindex @code{+} (plus sign) @subentry @code{+} operator
+@cindex plus sign (@code{+}) @subentry @code{+} operator
+@cindex @code{-} (hyphen) @subentry @code{-} operator
+@cindex hyphen (@code{-}) @subentry @code{-} operator
@item @code{+ -}
Addition, subtraction.
@@ -13733,35 +13773,35 @@ There is no special symbol for concatenation.
The operands are simply written side by side
(@pxref{Concatenation}).
-@cindex @code{<} (left angle bracket), @code{<} operator
-@cindex left angle bracket (@code{<}), @code{<} operator
-@cindex @code{<} (left angle bracket), @code{<=} operator
-@cindex left angle bracket (@code{<}), @code{<=} operator
-@cindex @code{>} (right angle bracket), @code{>=} operator
-@cindex right angle bracket (@code{>}), @code{>=} operator
-@cindex @code{>} (right angle bracket), @code{>} operator
-@cindex right angle bracket (@code{>}), @code{>} operator
-@cindex @code{=} (equals sign), @code{==} operator
-@cindex equals sign (@code{=}), @code{==} operator
-@cindex @code{!} (exclamation point), @code{!=} operator
-@cindex exclamation point (@code{!}), @code{!=} operator
-@cindex @code{>} (right angle bracket), @code{>>} operator (I/O)
-@cindex right angle bracket (@code{>}), @code{>>} operator (I/O)
-@cindex operators, input/output
-@cindex @code{|} (vertical bar), @code{|} operator (I/O)
-@cindex vertical bar (@code{|}), @code{|} operator (I/O)
-@cindex operators, input/output
-@cindex @code{|} (vertical bar), @code{|&} operator (I/O)
-@cindex vertical bar (@code{|}), @code{|&} operator (I/O)
-@cindex operators, input/output
+@cindex @code{<} (left angle bracket) @subentry @code{<} operator
+@cindex left angle bracket (@code{<}) @subentry @code{<} operator
+@cindex @code{<} (left angle bracket) @subentry @code{<=} operator
+@cindex left angle bracket (@code{<}) @subentry @code{<=} operator
+@cindex @code{>} (right angle bracket) @subentry @code{>=} operator
+@cindex right angle bracket (@code{>}) @subentry @code{>=} operator
+@cindex @code{>} (right angle bracket) @subentry @code{>} operator
+@cindex right angle bracket (@code{>}) @subentry @code{>} operator
+@cindex @code{=} (equals sign) @subentry @code{==} operator
+@cindex equals sign (@code{=}) @subentry @code{==} operator
+@cindex @code{!} (exclamation point) @subentry @code{!=} operator
+@cindex exclamation point (@code{!}) @subentry @code{!=} operator
+@cindex @code{>} (right angle bracket) @subentry @code{>>} operator (I/O)
+@cindex right angle bracket (@code{>}) @subentry @code{>>} operator (I/O)
+@cindex operators @subentry input/output
+@cindex @code{|} (vertical bar) @subentry @code{|} operator (I/O)
+@cindex vertical bar (@code{|}) @subentry @code{|} operator (I/O)
+@cindex operators @subentry input/output
+@cindex @code{|} (vertical bar) @subentry @code{|&} operator (I/O)
+@cindex vertical bar (@code{|}) @subentry @code{|&} operator (I/O)
+@cindex operators @subentry input/output
@item @code{< <= == != > >= >> | |&}
Relational and redirection.
The relational operators and the redirections have the same precedence
level. Characters such as @samp{>} serve both as relationals and as
redirections; the context distinguishes between the two meanings.
-@cindex @code{print} statement, I/O operators in
-@cindex @code{printf} statement, I/O operators in
+@cindex @code{print} statement @subentry I/O operators in
+@cindex @code{printf} statement @subentry I/O operators in
Note that the I/O redirection operators in @code{print} and @code{printf}
statements belong to the statement level, not to expressions. The
redirection does not produce an expression that could be the operand of
@@ -13773,8 +13813,8 @@ The correct way to write this statement is @samp{print
foo > (a ? b : c)}.
@cindex @code{~} (tilde), @code{~} operator
@cindex tilde (@code{~}), @code{~} operator
-@cindex @code{!} (exclamation point), @code{!~} operator
-@cindex exclamation point (@code{!}), @code{!~} operator
+@cindex @code{!} (exclamation point) @subentry @code{!~} operator
+@cindex exclamation point (@code{!}) @subentry @code{!~} operator
@item @code{~ !~}
Matching, nonmatching.
@@ -13782,43 +13822,43 @@ Matching, nonmatching.
@item @code{in}
Array membership.
-@cindex @code{&} (ampersand), @code{&&} operator
-@cindex ampersand (@code{&}), @code{&&} operator
+@cindex @code{&} (ampersand) @subentry @code{&&} operator
+@cindex ampersand (@code{&}) @subentry @code{&&} operator
@item @code{&&}
Logical ``and.''
-@cindex @code{|} (vertical bar), @code{||} operator
-@cindex vertical bar (@code{|}), @code{||} operator
+@cindex @code{|} (vertical bar) @subentry @code{||} operator
+@cindex vertical bar (@code{|}) @subentry @code{||} operator
@item @code{||}
Logical ``or.''
-@cindex @code{?} (question mark), @code{?:} operator
-@cindex question mark (@code{?}), @code{?:} operator
-@cindex @code{:} (colon), @code{?:} operator
-@cindex colon (@code{:}), @code{?:} operator
+@cindex @code{?} (question mark) @subentry @code{?:} operator
+@cindex question mark (@code{?}) @subentry @code{?:} operator
+@cindex @code{:} (colon) @subentry @code{?:} operator
+@cindex colon (@code{:}) @subentry @code{?:} operator
@item @code{?:}
Conditional. This operator groups right to left.
-@cindex @code{+} (plus sign), @code{+=} operator
-@cindex plus sign (@code{+}), @code{+=} operator
-@cindex @code{-} (hyphen), @code{-=} operator
-@cindex hyphen (@code{-}), @code{-=} operator
-@cindex @code{*} (asterisk), @code{*=} operator
-@cindex asterisk (@code{*}), @code{*=} operator
-@cindex @code{*} (asterisk), @code{**=} operator
-@cindex asterisk (@code{*}), @code{**=} operator
-@cindex @code{/} (forward slash), @code{/=} operator
-@cindex forward slash (@code{/}), @code{/=} operator
-@cindex @code{%} (percent sign), @code{%=} operator
-@cindex percent sign (@code{%}), @code{%=} operator
-@cindex @code{^} (caret), @code{^=} operator
-@cindex caret (@code{^}), @code{^=} operator
+@cindex @code{+} (plus sign) @subentry @code{+=} operator
+@cindex plus sign (@code{+}) @subentry @code{+=} operator
+@cindex @code{-} (hyphen) @subentry @code{-=} operator
+@cindex hyphen (@code{-}) @subentry @code{-=} operator
+@cindex @code{*} (asterisk) @subentry @code{*=} operator
+@cindex asterisk (@code{*}) @subentry @code{*=} operator
+@cindex @code{*} (asterisk) @subentry @code{**=} operator
+@cindex asterisk (@code{*}) @subentry @code{**=} operator
+@cindex @code{/} (forward slash) @subentry @code{/=} operator
+@cindex forward slash (@code{/}) @subentry @code{/=} operator
+@cindex @code{%} (percent sign) @subentry @code{%=} operator
+@cindex percent sign (@code{%}) @subentry @code{%=} operator
+@cindex @code{^} (caret) @subentry @code{^=} operator
+@cindex caret (@code{^}) @subentry @code{^=} operator
@item @code{= += -= *= /= %= ^= **=}
Assignment. These operators group right to left.
@end table
-@cindex POSIX @command{awk}, @code{**} operator and
-@cindex portability, operators, not in POSIX @command{awk}
+@cindex POSIX @command{awk} @subentry @code{**} operator and
+@cindex portability @subentry operators @subentry not in POSIX @command{awk}
@quotation NOTE
The @samp{|&}, @samp{**}, and @samp{**=} operators are not specified by POSIX.
For maximum portability, do not use them.
@@ -13965,7 +14005,7 @@ building something useful.
* Empty:: The empty pattern, which matches every record.
@end menu
-@cindex patterns, types of
+@cindex patterns @subentry types of
Patterns in @command{awk} control the execution of rules---a rule is
executed when its pattern matches the current input record.
The following is a summary of the types of @command{awk} patterns:
@@ -14006,8 +14046,8 @@ The empty pattern matches every input record.
@node Regexp Patterns
@subsection Regular Expressions as Patterns
-@cindex patterns, regular expressions as
-@cindex regular expressions, as patterns
+@cindex patterns @subentry regexp constants as
+@cindex regular expressions @subentry as patterns
Regular expressions are one of the first kinds of patterns presented
in this book.
@@ -14023,8 +14063,8 @@ END @{ print buzzwords, "buzzwords seen" @}
@node Expression Patterns
@subsection Expressions as Patterns
-@cindex expressions, as patterns
-@cindex patterns, expressions as
+@cindex expressions @subentry as patterns
+@cindex patterns @subentry expressions as
Any @command{awk} expression is valid as an @command{awk} pattern.
The pattern matches if the expression's value is nonzero (if a
@@ -14035,8 +14075,8 @@ value depends directly on the new input record's text;
otherwise, it
depends on only what has happened so far in the execution of the
@command{awk} program.
-@cindex comparison expressions, as patterns
-@cindex patterns, comparison expressions as
+@cindex comparison expressions @subentry as patterns
+@cindex patterns @subentry comparison expressions as
Comparison expressions, using the comparison operators described in
@ref{Typing and Comparison},
are a very common kind of pattern.
@@ -14049,12 +14089,12 @@ is used as a dynamic regular expression
The following example prints the second field of each input record
whose first field is precisely @samp{li}:
-@cindex @code{/} (forward slash), patterns and
-@cindex forward slash (@code{/}), patterns and
+@cindex @code{/} (forward slash) @subentry patterns and
+@cindex forward slash (@code{/}) @subentry patterns and
@cindex @code{~} (tilde), @code{~} operator
@cindex tilde (@code{~}), @code{~} operator
-@cindex @code{!} (exclamation point), @code{!~} operator
-@cindex exclamation point (@code{!}), @code{!~} operator
+@cindex @code{!} (exclamation point) @subentry @code{!~} operator
+@cindex exclamation point (@code{!}) @subentry @code{!~} operator
@example
$ @kbd{awk '$1 == "li" @{ print $2 @}' mail-list}
@end example
@@ -14070,15 +14110,15 @@ $ @kbd{awk '$1 ~ /li/ @{ print $2 @}' mail-list}
@print{} 555-6699
@end example
-@cindex regexp constants, as patterns
-@cindex patterns, regexp constants as
+@cindex regexp constants @subentry as patterns
+@cindex patterns @subentry regexp constants as
A regexp constant as a pattern is also a special case of an expression
pattern. The expression @code{/li/} has the value one if @samp{li}
appears in the current input record. Thus, as a pattern, @code{/li/}
matches any record containing @samp{li}.
-@cindex Boolean expressions, as patterns
-@cindex patterns, Boolean expressions as
+@cindex Boolean expressions @subentry as patterns
+@cindex patterns @subentry Boolean expressions as
Boolean expressions are also commonly used as patterns.
Whether the pattern
matches an input record depends on whether its subexpressions match.
@@ -14120,10 +14160,10 @@ $ @kbd{awk '! /li/' mail-list}
@end group
@end example
-@cindex @code{BEGIN} pattern, Boolean patterns and
-@cindex @code{END} pattern, Boolean patterns and
-@cindex @code{BEGINFILE} pattern, Boolean patterns and
-@cindex @code{ENDFILE} pattern, Boolean patterns and
+@cindex @code{BEGIN} pattern @subentry Boolean patterns and
+@cindex @code{END} pattern @subentry Boolean patterns and
+@cindex @code{BEGINFILE} pattern @subentry Boolean patterns and
+@cindex @code{ENDFILE} pattern @subentry Boolean patterns and
The subexpressions of a Boolean operator in a pattern can be constant regular
expressions, comparisons, or any other @command{awk} expressions. Range
patterns are not expressions, so they cannot appear inside Boolean
@@ -14139,8 +14179,8 @@ patterns is described in @ref{Precedence}.
@subsection Specifying Record Ranges with Patterns
@cindex range patterns
-@cindex patterns, ranges in
-@cindex lines, matching ranges of
+@cindex patterns @subentry ranges in
+@cindex lines @subentry matching ranges of
@cindex @code{,} (comma), in range patterns
@cindex comma (@code{,}), in range patterns
A @dfn{range pattern} is made of two patterns separated by a comma, in
@@ -14165,7 +14205,7 @@ input record; when this succeeds, the range pattern is
@dfn{turned off} again
for the following record. Then the range pattern goes back to checking
@var{begpat} against each record.
-@cindex @code{if} statement, actions@comma{} changing
+@cindex @code{if} statement @subentry actions, changing
The record that turns on the range pattern and the one that turns it
off both match the range pattern. If you don't want to operate on
these records, you can write @code{if} statements in the rule's action
@@ -14190,13 +14230,13 @@ looks like this:
@end example
@noindent
-@cindex lines, skipping between markers
+@cindex lines @subentry skipping between markers
@c @cindex flag variables
This program fails because the range pattern is both turned on and turned off
by the first line, which just has a @samp{%} on it. To accomplish this task,
write the program in the following manner, using a flag:
-@cindex @code{!} (exclamation point), @code{!} operator
+@cindex @code{!} (exclamation point) @subentry @code{!} operator
@example
/^%$/ @{ skip = ! skip; next @}
skip == 1 @{ next @} # skip lines with `skip' set
@@ -14221,8 +14261,8 @@ $ @kbd{echo Yes | gawk '(/1/,/2/) || /Yes/'}
@error{} gawk: cmd. line:1: ^ syntax error
@end example
-@cindex range patterns, line continuation and
-@cindex dark corner, range patterns, line continuation and
+@cindex range patterns @subentry line continuation and
+@cindex dark corner @subentry range patterns, line continuation and
As a minor point of interest, although it is poor style,
POSIX allows you to put a newline after the comma in
a range pattern. @value{DARKCORNER}
@@ -14264,8 +14304,8 @@ $ @kbd{awk '}
@print{} "li" appears in 4 records.
@end example
-@cindex @code{BEGIN} pattern, operators and
-@cindex @code{END} pattern, operators and
+@cindex @code{BEGIN} pattern @subentry operators and
+@cindex @code{END} pattern @subentry operators and
This program finds the number of records in the input file @file{mail-list}
that contain the string @samp{li}. The @code{BEGIN} rule prints a title
for the report. There is no need to use the @code{BEGIN} rule to
@@ -14313,7 +14353,7 @@ rule checks the @code{FNR} and @code{NR} variables.
@node I/O And BEGIN/END
@subsubsection Input/Output from @code{BEGIN} and @code{END} Rules
-@cindex input/output, from @code{BEGIN} and @code{END}
+@cindex input/output @subentry from @code{BEGIN} and @code{END}
There are several (sometimes subtle) points to be aware of when doing I/O
from a @code{BEGIN} or @code{END} rule.
The first has to do with the value of @code{$0} in a @code{BEGIN}
@@ -14326,11 +14366,11 @@ without a variable (@pxref{Getline}).
Another way is simply to assign a value to @code{$0}.
@cindex Brian Kernighan's @command{awk}
-@cindex differences in @command{awk} and @command{gawk},
@code{BEGIN}/@code{END} patterns
-@cindex POSIX @command{awk}, @code{BEGIN}/@code{END} patterns
-@cindex @code{print} statement, @code{BEGIN}/@code{END} patterns and
-@cindex @code{BEGIN} pattern, @code{print} statement and
-@cindex @code{END} pattern, @code{print} statement and
+@cindex differences in @command{awk} and @command{gawk} @subentry
@code{BEGIN}/@code{END} patterns
+@cindex POSIX @command{awk} @subentry @code{BEGIN}/@code{END} patterns
+@cindex @code{print} statement @subentry @code{BEGIN}/@code{END} patterns and
+@cindex @code{BEGIN} pattern @subentry @code{print} statement and
+@cindex @code{END} pattern @subentry @code{print} statement and
The second point is similar to the first, but from the other direction.
Traditionally, due largely to implementation issues, @code{$0} and
@code{NF} were @emph{undefined} inside an @code{END} rule.
@@ -14353,10 +14393,10 @@ this in @code{BEGIN} rules, it is a very bad idea in
@code{END} rules,
at least in @command{gawk}. It is also poor style, because if an empty
line is needed in the output, the program should print one explicitly.
-@cindex @code{next} statement, @code{BEGIN}/@code{END} patterns and
-@cindex @code{nextfile} statement, @code{BEGIN}/@code{END} patterns and
-@cindex @code{BEGIN} pattern, @code{next}/@code{nextfile} statements and
-@cindex @code{END} pattern, @code{next}/@code{nextfile} statements and
+@cindex @code{next} statement @subentry @code{BEGIN}/@code{END} patterns and
+@cindex @code{nextfile} statement @subentry @code{BEGIN}/@code{END} patterns
and
+@cindex @code{BEGIN} pattern @subentry @code{next}/@code{nextfile} statements
and
+@cindex @code{END} pattern @subentry @code{next}/@code{nextfile} statements and
Finally, the @code{next} and @code{nextfile} statements are not allowed
in a @code{BEGIN} rule, because the implicit
read-a-record-and-match-against-the-rules loop has not started yet.
Similarly, those statements
@@ -14373,7 +14413,7 @@ are not valid in an @code{END} rule, because all the
input has been read.
@subsection The @code{BEGINFILE} and @code{ENDFILE} Special Patterns
@cindex @code{BEGINFILE} pattern
@cindex @code{ENDFILE} pattern
-@cindex differences in @command{awk} and @command{gawk},
@code{BEGINFILE}/@code{ENDFILE} patterns
+@cindex differences in @command{awk} and @command{gawk} @subentry
@code{BEGINFILE}/@code{ENDFILE} patterns
This @value{SECTION} describes a @command{gawk}-specific feature.
@@ -14408,9 +14448,9 @@ file named on the command line cannot be opened for
reading. However,
you can bypass the fatal error and move on to the next file on the
command line.
-@cindex @command{gawk}, @code{ERRNO} variable in
-@cindex @code{ERRNO} variable, with @code{BEGINFILE} pattern
-@cindex @code{nextfile} statement, @code{BEGINFILE}/@code{ENDFILE} patterns and
+@cindex @command{gawk} @subentry @code{ERRNO} variable in
+@cindex @code{ERRNO} variable @subentry with @code{BEGINFILE} pattern
+@cindex @code{nextfile} statement @subentry @code{BEGINFILE}/@code{ENDFILE}
patterns and
You do this by checking if the @code{ERRNO} variable is not the empty
string; if so, then @command{gawk} was not able to open the file. In
this case, your program can execute the @code{nextfile} statement
@@ -14437,13 +14477,13 @@ rule is present, the error becomes non-fatal, and
instead @code{ERRNO}
is set. This makes it possible to catch and process I/O errors at the
level of the @command{awk} program.
-@cindex @code{next} statement, @code{BEGINFILE}/@code{ENDFILE} patterns and
+@cindex @code{next} statement @subentry @code{BEGINFILE}/@code{ENDFILE}
patterns and
The @code{next} statement (@pxref{Next Statement}) is not allowed inside
either a @code{BEGINFILE} or an @code{ENDFILE} rule. The @code{nextfile}
statement is allowed only inside a
@code{BEGINFILE} rule, not inside an @code{ENDFILE} rule.
-@cindex @code{getline} statement, @code{BEGINFILE}/@code{ENDFILE} patterns and
+@cindex @code{getline} command @subentry @code{BEGINFILE}/@code{ENDFILE}
patterns and
The @code{getline} statement (@pxref{Getline}) is restricted inside
both @code{BEGINFILE} and @code{ENDFILE}: only redirected
forms of @code{getline} are allowed.
@@ -14478,7 +14518,7 @@ rule to grab it before moving on to the next file.]
@subsection The Empty Pattern
@cindex empty pattern
-@cindex patterns, empty
+@cindex patterns @subentry empty
An empty (i.e., nonexistent) pattern is considered to match @emph{every}
input record. For example, the program:
@@ -14491,8 +14531,8 @@ prints the first field of every record.
@node Using Shell Variables
@section Using Shell Variables in Programs
-@cindex shells, variables
-@cindex @command{awk} programs, shell variables in
+@cindex shells @subentry variables
+@cindex @command{awk} programs @subentry shell variables in
@c @cindex shell and @command{awk} interaction
@command{awk} programs are often used as components in larger
@@ -14502,7 +14542,7 @@ hold a pattern that the @command{awk} program searches
for.
There are two ways to get the value of the shell variable
into the body of the @command{awk} program.
-@cindex shells, quoting
+@cindex shells @subentry quoting
A common method is to use shell quoting to substitute
the variable's value into the program inside the script.
For example, consider the following program:
@@ -14578,12 +14618,12 @@ in outline, an @command{awk} program generally looks
like this:
@dots{}
@end display
-@cindex @code{@{@}} (braces), actions and
-@cindex braces (@code{@{@}}), actions and
-@cindex separators, for statements in actions
-@cindex newlines, separating statements in actions
-@cindex @code{;} (semicolon), separating statements in actions
-@cindex semicolon (@code{;}), separating statements in actions
+@cindex @code{@{@}} (braces) @subentry actions and
+@cindex braces (@code{@{@}}) @subentry actions and
+@cindex separators @subentry for statements in actions
+@cindex newlines @subentry separating statements in actions
+@cindex @code{;} (semicolon) @subentry separating statements in actions
+@cindex semicolon (@code{;}) @subentry separating statements in actions
An action consists of one or more @command{awk} @dfn{statements}, enclosed
in braces (@samp{@{@r{@dots{}}@}}). Each statement specifies one
thing to do. The statements are separated by newlines or semicolons.
@@ -14600,7 +14640,7 @@ well. An omitted action is equivalent to @samp{@{
print $0 @}}:
The following types of statements are supported in @command{awk}:
@table @asis
-@cindex side effects, statements
+@cindex side effects @subentry statements
@item Expressions
Call functions or assign values to variables
(@pxref{Expressions}). Executing
@@ -14639,21 +14679,21 @@ For deleting array elements.
@node Statements
@section Control Statements in Actions
@cindex control statements
-@cindex statements, control, in actions
-@cindex actions, control statements in
+@cindex statements @subentry control, in actions
+@cindex actions @subentry control statements in
@dfn{Control statements}, such as @code{if}, @code{while}, and so on,
control the flow of execution in @command{awk} programs. Most of
@command{awk}'s
control statements are patterned after similar statements in C.
-@cindex compound statements@comma{} control statements and
-@cindex statements, compound@comma{} control statements and
-@cindex body, in actions
-@cindex @code{@{@}} (braces), statements, grouping
-@cindex braces (@code{@{@}}), statements, grouping
-@cindex newlines, separating statements in actions
-@cindex @code{;} (semicolon), separating statements in actions
-@cindex semicolon (@code{;}), separating statements in actions
+@cindex compound statements, control statements and
+@cindex statements @subentry compound, control statements and
+@cindex body @subentry in actions
+@cindex @code{@{@}} (braces) @subentry statements, grouping
+@cindex braces (@code{@{@}}) @subentry statements, grouping
+@cindex newlines @subentry separating statements in actions
+@cindex @code{;} (semicolon) @subentry separating statements in actions
+@cindex semicolon (@code{;}) @subentry separating statements in actions
All the control statements start with special keywords, such as @code{if}
and @code{while}, to distinguish them from simple expressions.
Many control statements contain other statements. For example, the
@@ -14735,8 +14775,8 @@ the first thing on its line.
@subsection The @code{while} Statement
@cindex @code{while} statement
@cindex loops
-@cindex loops, @code{while}
-@cindex loops, See Also @code{while} statement
+@cindex loops @subentry @code{while}
+@cindex loops @seealso{@code{while} statement}
In programming, a @dfn{loop} is a part of a program that can
be executed two or more times in succession.
@@ -14749,7 +14789,7 @@ while (@var{condition})
@var{body}
@end example
-@cindex body, in loops
+@cindex body @subentry in loops
@noindent
@var{body} is a statement called the @dfn{body} of the loop,
and @var{condition} is an expression that controls how long the loop
@@ -14797,7 +14837,7 @@ program is harder to read without it.
@node Do Statement
@subsection The @code{do}-@code{while} Statement
@cindex @code{do}-@code{while} statement
-@cindex loops, @code{do}-@code{while}
+@cindex loops @subentry @code{do}-@code{while}
The @code{do} loop is a variation of the @code{while} looping statement.
The @code{do} loop executes the @var{body} once and then repeats the
@@ -14843,7 +14883,7 @@ occasionally is there a real use for a @code{do}
statement.
@node For Statement
@subsection The @code{for} Statement
@cindex @code{for} statement
-@cindex loops, @code{for}, iterative
+@cindex loops @subentry @code{for} @subentry iterative
The @code{for} statement makes it more convenient to count iterations of a
loop. The general form of the @code{for} statement looks like this:
@@ -14918,7 +14958,7 @@ while (@var{condition}) @{
@}
@end example
-@cindex loops, @code{continue} statements and
+@cindex loops @subentry @code{continue} statement and
@noindent
The only exception is when the @code{continue} statement
(@pxref{Continue Statement}) is used
@@ -15020,8 +15060,8 @@ described in @ref{Getopt Function}.)
@node Break Statement
@subsection The @code{break} Statement
@cindex @code{break} statement
-@cindex loops, exiting
-@cindex loops, @code{break} statement and
+@cindex loops @subentry exiting
+@cindex loops @subentry @code{break} statement and
The @code{break} statement jumps out of the innermost @code{for},
@code{while}, or @code{do} loop that encloses it. The following example
@@ -15082,9 +15122,9 @@ This is discussed in @ref{Switch Statement}.
@c @cindex @code{break}, outside of loops
@c @cindex historical features
@c @cindex @command{awk} language, POSIX version
-@cindex POSIX @command{awk}, @code{break} statement and
-@cindex dark corner, @code{break} statement
-@cindex @command{gawk}, @code{break} statement in
+@cindex POSIX @command{awk} @subentry @code{break} statement and
+@cindex dark corner @subentry @code{break} statement
+@cindex @command{gawk} @subentry @code{break} statement in
@cindex Brian Kernighan's @command{awk}
The @code{break} statement has no meaning when
used outside the body of a loop or @code{switch}.
@@ -15148,9 +15188,9 @@ the increment (@samp{x++}) is never reached.
@c @cindex @code{continue}, outside of loops
@c @cindex historical features
@c @cindex @command{awk} language, POSIX version
-@cindex POSIX @command{awk}, @code{continue} statement and
-@cindex dark corner, @code{continue} statement
-@cindex @command{gawk}, @code{continue} statement in
+@cindex POSIX @command{awk} @subentry @code{continue} statement and
+@cindex dark corner @subentry @code{continue} statement
+@cindex @command{gawk} @subentry @code{continue} statement in
@cindex Brian Kernighan's @command{awk}
The @code{continue} statement has no special meaning with respect to the
@code{switch} statement, nor does it have any meaning when used outside the
@@ -15183,7 +15223,7 @@ Contrast this with the effect of the @code{getline}
function
flow of control in any way (i.e., the rest of the current action executes
with a new input record).
-@cindex @command{awk} programs, execution of
+@cindex @command{awk} programs @subentry execution of
At the highest level, @command{awk} program execution is a loop that reads
an input record and then tests each rule's pattern against it. If you
think of this loop as a @code{for} statement whose body contains the
@@ -15218,13 +15258,13 @@ then the code in any @code{END} rules is executed.
The @code{next} statement is not allowed inside @code{BEGINFILE} and
@code{ENDFILE} rules. @xref{BEGINFILE/ENDFILE}.
-@c @cindex @command{awk} language, POSIX version
@c @cindex @code{next}, inside a user-defined function
-@cindex @code{BEGIN} pattern, @code{next}/@code{nextfile} statements and
-@cindex @code{END} pattern, @code{next}/@code{nextfile} statements and
-@cindex POSIX @command{awk}, @code{next}/@code{nextfile} statements and
-@cindex @code{next} statement, user-defined functions and
-@cindex functions, user-defined, @code{next}/@code{nextfile} statements and
+@cindex @command{awk} @subentry language, POSIX version
+@cindex @code{BEGIN} pattern @subentry @code{next}/@code{nextfile} statements
and
+@cindex @code{END} pattern @subentry @code{next}/@code{nextfile} statements and
+@cindex POSIX @command{awk} @subentry @code{next}/@code{nextfile} statements
and
+@cindex @code{next} statement @subentry user-defined functions and
+@cindex functions @subentry user-defined @subentry @code{next}/@code{nextfile}
statements and
According to the POSIX standard, the behavior is undefined if the
@code{next} statement is used in a @code{BEGIN} or @code{END} rule.
@command{gawk} treats it as a syntax error. Although POSIX does not disallow
it,
@@ -15287,8 +15327,8 @@ inclusion into the POSIX standard.
See @uref{http://austingroupbugs.net/view.php?id=607, the Austin Group
website}.
@end quotation
-@cindex functions, user-defined, @code{next}/@code{nextfile} statements and
-@cindex @code{nextfile} statement, user-defined functions and
+@cindex functions @subentry user-defined @subentry @code{next}/@code{nextfile}
statements and
+@cindex @code{nextfile} statement @subentry user-defined functions and
@cindex Brian Kernighan's @command{awk}
@cindex @command{mawk} utility
The current version of BWK @command{awk} and @command{mawk}
@@ -15310,8 +15350,8 @@ is ignored. The @code{exit} statement is written as
follows:
@code{exit} [@var{return code}]
@end display
-@cindex @code{BEGIN} pattern, @code{exit} statement and
-@cindex @code{END} pattern, @code{exit} statement and
+@cindex @code{BEGIN} pattern @subentry @code{exit} statement and
+@cindex @code{END} pattern @subentry @code{exit} statement and
When an @code{exit} statement is executed from a @code{BEGIN} rule, the
program stops processing everything immediately. No input records are
read. However, if an @code{END} rule is present,
@@ -15334,7 +15374,7 @@ the @code{END} rule.
@xref{Assert Function}
for an example that does this.
-@cindex dark corner, @code{exit} statement
+@cindex dark corner @subentry @code{exit} statement
If an argument is supplied to @code{exit}, its value is used as the exit
status code for the @command{awk} process. If no argument is supplied,
@code{exit} causes @command{awk} to return a ``success'' status.
@@ -15344,7 +15384,7 @@ called a second time from an @code{END} rule with no
argument,
@command{awk} uses the previously supplied exit value. @value{DARKCORNER}
@xref{Exit Status} for more information.
-@cindex programming conventions, @code{exit} statement
+@cindex programming conventions @subentry @code{exit} statement
For example, suppose an error condition occurs that is difficult or
impossible to handle. Conventionally, programs report this by
exiting with a nonzero status. An @command{awk} program can do this
@@ -15376,7 +15416,7 @@ results across different operating systems.
@node Built-in Variables
@section Predefined Variables
@cindex predefined variables
-@cindex variables, predefined
+@cindex variables @subentry predefined
Most @command{awk} variables are available to use for your own
purposes; they never change unless your program assigns values to
@@ -15387,7 +15427,7 @@ to tell @command{awk} how to do certain things. Others
are set
automatically by @command{awk}, so that they carry information from the
internal workings of @command{awk} to your program.
-@cindex @command{gawk}, predefined variables and
+@cindex @command{gawk} @subentry predefined variables and
This @value{SECTION} documents all of @command{gawk}'s predefined variables,
most of which are also documented in the @value{CHAPTER}s describing
their areas of activity.
@@ -15402,7 +15442,7 @@ their areas of activity.
@node User-modified
@subsection Built-in Variables That Control @command{awk}
-@cindex predefined variables, user-modifiable
+@cindex predefined variables @subentry user-modifiable
@cindex user-modifiable variables
The following is an alphabetical list of variables that you can change to
@@ -15417,8 +15457,8 @@ in the description of each variable.)
@table @code
@cindex @code{BINMODE} variable
@cindex binary input/output
-@cindex input/output, binary
-@cindex differences in @command{awk} and @command{gawk}, @code{BINMODE}
variable
+@cindex input/output @subentry binary
+@cindex differences in @command{awk} and @command{gawk} @subentry
@code{BINMODE} variable
@item BINMODE #
On non-POSIX systems, this variable specifies use of binary mode
for all I/O. Numeric values of one, two, or three specify that input
@@ -15434,9 +15474,9 @@ detail in @ref{PC Using}. @command{mawk} (@pxref{Other
Versions})
also supports this variable, but only using numeric values.
@cindex @code{CONVFMT} variable
-@cindex POSIX @command{awk}, @code{CONVFMT} variable and
-@cindex numbers, converting, to strings
-@cindex strings, converting, numbers to
+@cindex POSIX @command{awk} @subentry @code{CONVFMT} variable and
+@cindex numbers @subentry converting @subentry to strings
+@cindex strings @subentry converting @subentry numbers to
@item @code{CONVFMT}
A string that controls the conversion of numbers to
strings (@pxref{Conversion}).
@@ -15446,11 +15486,11 @@ It works by being passed, in effect, as the first
argument to the
Its default value is @code{"%.6g"}.
@code{CONVFMT} was introduced by the POSIX standard.
-@cindex @command{gawk}, @code{FIELDWIDTHS} variable in
+@cindex @command{gawk} @subentry @code{FIELDWIDTHS} variable in
@cindex @code{FIELDWIDTHS} variable
-@cindex differences in @command{awk} and @command{gawk}, @code{FIELDWIDTHS}
variable
-@cindex field separators, @code{FIELDWIDTHS} variable and
-@cindex separators, field, @code{FIELDWIDTHS} variable and
+@cindex differences in @command{awk} and @command{gawk} @subentry
@code{FIELDWIDTHS} variable
+@cindex field separator @subentry @code{FIELDWIDTHS} variable and
+@cindex separators @subentry field @subentry @code{FIELDWIDTHS} variable and
@item FIELDWIDTHS #
A space-separated list of columns that tells @command{gawk}
how to split input with fixed columnar boundaries.
@@ -15461,11 +15501,11 @@ Assigning a value to @code{FIELDWIDTHS}
overrides the use of @code{FS} and @code{FPAT} for field splitting.
@xref{Constant Size} for more information.
-@cindex @command{gawk}, @code{FPAT} variable in
+@cindex @command{gawk} @subentry @code{FPAT} variable in
@cindex @code{FPAT} variable
-@cindex differences in @command{awk} and @command{gawk}, @code{FPAT} variable
-@cindex field separators, @code{FPAT} variable and
-@cindex separators, field, @code{FPAT} variable and
+@cindex differences in @command{awk} and @command{gawk} @subentry @code{FPAT}
variable
+@cindex field separator @subentry @code{FPAT} variable and
+@cindex separators @subentry field @subentry @code{FPAT} variable and
@item FPAT #
A regular expression (as a string) that tells @command{gawk}
to create the fields based on text that matches the regular expression.
@@ -15474,8 +15514,8 @@ overrides the use of @code{FS} and @code{FIELDWIDTHS}
for field splitting.
@xref{Splitting By Content} for more information.
@cindex @code{FS} variable
-@cindex separators, field
-@cindex field separators
+@cindex separators @subentry field
+@cindex field separator
@item FS
The input field separator (@pxref{Field Separators}).
The value is a single-character string or a multicharacter regular
@@ -15500,19 +15540,19 @@ You can set the value of @code{FS} on the command
line using the
awk -F, '@var{program}' @var{input-files}
@end example
-@cindex @command{gawk}, field separators and
+@cindex @command{gawk} @subentry field separators and
If @command{gawk} is using @code{FIELDWIDTHS} or @code{FPAT}
for field splitting,
assigning a value to @code{FS} causes @command{gawk} to return to
the normal, @code{FS}-based field splitting. An easy way to do this
is to simply say @samp{FS = FS}, perhaps with an explanatory comment.
-@cindex @command{gawk}, @code{IGNORECASE} variable in
+@cindex @command{gawk} @subentry @code{IGNORECASE} variable in
@cindex @code{IGNORECASE} variable
-@cindex differences in @command{awk} and @command{gawk}, @code{IGNORECASE}
variable
-@cindex case sensitivity, string comparisons and
-@cindex case sensitivity, regexps and
-@cindex regular expressions, case sensitivity
+@cindex differences in @command{awk} and @command{gawk} @subentry
@code{IGNORECASE} variable
+@cindex case sensitivity @subentry string comparisons and
+@cindex case sensitivity @subentry regexps and
+@cindex regular expressions @subentry case sensitivity
@item IGNORECASE #
If @code{IGNORECASE} is nonzero or non-null, then all string comparisons
and all regular expression matching are case-independent.
@@ -15527,9 +15567,9 @@ and it does not affect field splitting when using a
single-character
field separator.
@xref{Case-sensitivity}.
-@cindex @command{gawk}, @code{LINT} variable in
+@cindex @command{gawk} @subentry @code{LINT} variable in
@cindex @code{LINT} variable
-@cindex differences in @command{awk} and @command{gawk}, @code{LINT} variable
+@cindex differences in @command{awk} and @command{gawk} @subentry @code{LINT}
variable
@cindex lint checking
@item LINT #
When this variable is true (nonzero or non-null), @command{gawk}
@@ -15551,8 +15591,8 @@ of lint warnings during program execution is
independent of the flavor
of @command{awk} being executed.
@cindex @code{OFMT} variable
-@cindex numbers, converting, to strings
-@cindex strings, converting, numbers to
+@cindex numbers @subentry converting @subentry to strings
+@cindex strings @subentry converting @subentry numbers to
@item OFMT
A string that controls conversion of numbers to
strings (@pxref{Conversion}) for
@@ -15563,10 +15603,10 @@ Its default value is @code{"%.6g"}. Earlier versions
of @command{awk}
used @code{OFMT} to specify the format for converting numbers to
strings in general expressions; this is now done by @code{CONVFMT}.
-@cindex @code{print} statement, @code{OFMT} variable and
+@cindex @code{print} statement @subentry @code{OFMT} variable and
@cindex @code{OFS} variable
-@cindex separators, field
-@cindex field separators
+@cindex separators @subentry field
+@cindex field separator
@item OFS
The output field separator (@pxref{Output Separators}). It is
output between the fields printed by a @code{print} statement. Its
@@ -15590,7 +15630,7 @@ numbers, by default @code{"N"} (@code{roundTiesToEven}
in
the IEEE 754 standard; @pxref{Setting the rounding mode}).
@cindex @code{RS} variable
-@cindex separators, for records
+@cindex separators @subentry for records
@cindex record separators
@item @code{RS}
The input record separator. Its default value is a string
@@ -15610,7 +15650,7 @@ or if @command{gawk} is in compatibility mode
just the first character of @code{RS}'s value is used.
@cindex @code{SUBSEP} variable
-@cindex separators, subscript
+@cindex separators @subentry subscript
@cindex subscript separators
@item @code{SUBSEP}
The subscript separator. It has the default value of
@@ -15619,10 +15659,10 @@ multidimensional array. Thus, the expression
@samp{@w{foo["A", "B"]}}
really accesses @code{foo["A\034B"]}
(@pxref{Multidimensional}).
-@cindex @command{gawk}, @code{TEXTDOMAIN} variable in
+@cindex @command{gawk} @subentry @code{TEXTDOMAIN} variable in
@cindex @code{TEXTDOMAIN} variable
-@cindex differences in @command{awk} and @command{gawk}, @code{TEXTDOMAIN}
variable
-@cindex internationalization, localization
+@cindex differences in @command{awk} and @command{gawk} @subentry
@code{TEXTDOMAIN} variable
+@cindex internationalization @subentry localization
@item TEXTDOMAIN #
Used for internationalization of programs at the
@command{awk} level. It sets the default text domain for specially
@@ -15635,8 +15675,8 @@ The default value of @code{TEXTDOMAIN} is
@code{"messages"}.
@node Auto-set
@subsection Built-in Variables That Convey Information
-@cindex predefined variables, conveying information
-@cindex variables, predefined, conveying information
+@cindex predefined variables @subentry conveying information
+@cindex variables @subentry predefined @subentry conveying information
The following is an alphabetical list of variables that @command{awk}
sets automatically on certain occasions in order to provide
information to your program.
@@ -15649,8 +15689,8 @@ mode (@pxref{Options}), they are not special:
@c @asis for docbook
@table @asis
@cindex @code{ARGC}/@code{ARGV} variables
-@cindex arguments, command-line
-@cindex command line, arguments
+@cindex arguments @subentry command-line
+@cindex command line @subentry arguments
@item @code{ARGC}, @code{ARGV}
The command-line arguments available to @command{awk} programs are stored in
an array called @code{ARGV}. @code{ARGC} is the number of command-line
@@ -15678,12 +15718,12 @@ contains @samp{inventory-shipped}, and @code{ARGV[2]}
contains
index of the last element in @code{ARGV}, because the elements are numbered
from zero.
-@cindex programming conventions, @code{ARGC}/@code{ARGV} variables
+@cindex programming conventions @subentry @code{ARGC}/@code{ARGV} variables
The names @code{ARGC} and @code{ARGV}, as well as the convention of indexing
the array from 0 to @code{ARGC} @minus{} 1, are derived from the C language's
method of accessing command-line arguments.
-@cindex dark corner, value of @code{ARGV[0]}
+@cindex dark corner @subentry value of @code{ARGV[0]}
The value of @code{ARGV[0]} can vary from system to system.
Also, you should note that the program text is @emph{not} included in
@code{ARGV}, nor are any of @command{awk}'s command-line options.
@@ -15692,7 +15732,7 @@ about how @command{awk} uses these variables.
@value{DARKCORNER}
@cindex @code{ARGIND} variable
-@cindex differences in @command{awk} and @command{gawk}, @code{ARGIND} variable
+@cindex differences in @command{awk} and @command{gawk} @subentry
@code{ARGIND} variable
@item @code{ARGIND #}
The index in @code{ARGV} of the current file being processed.
Every time @command{gawk} opens a new @value{DF} for processing, it sets
@@ -15700,18 +15740,18 @@ Every time @command{gawk} opens a new @value{DF} for
processing, it sets
When @command{gawk} is processing the input files,
@samp{FILENAME == ARGV[ARGIND]} is always true.
-@cindex files, processing@comma{} @code{ARGIND} variable and
+@cindex files @subentry processing, @code{ARGIND} variable and
This variable is useful in file processing; it allows you to tell how far
along you are in the list of @value{DF}s as well as to distinguish between
successive instances of the same @value{FN} on the command line.
-@cindex file names, distinguishing
+@cindex file names @subentry distinguishing
While you can change the value of @code{ARGIND} within your @command{awk}
program, @command{gawk} automatically sets it to a new value when it
opens the next file.
@cindex @code{ENVIRON} array
-@cindex environment variables, in @code{ENVIRON} array
+@cindex environment variables @subentry in @code{ENVIRON} array
@item @code{ENVIRON}
An associative array containing the values of the environment. The array
indices are the environment variable names; the elements are the values of
@@ -15747,10 +15787,10 @@ On such systems, the @code{ENVIRON} array is empty
(except for
@pxref{AWKLIBPATH Variable}).
@end ifnotdocbook
-@cindex @command{gawk}, @code{ERRNO} variable in
+@cindex @command{gawk} @subentry @code{ERRNO} variable in
@cindex @code{ERRNO} variable
-@cindex differences in @command{awk} and @command{gawk}, @code{ERRNO} variable
-@cindex error handling, @code{ERRNO} variable and
+@cindex differences in @command{awk} and @command{gawk} @subentry @code{ERRNO}
variable
+@cindex error handling @subentry @code{ERRNO} variable and
@item @code{ERRNO #}
If a system error occurs during a redirection for @code{getline}, during
a read for @code{getline}, or during a @code{close()} operation, then
@@ -15773,7 +15813,7 @@ of @code{errno}. For non-system errors,
@code{PROCINFO["errno"]} will
be zero.
@cindex @code{FILENAME} variable
-@cindex dark corner, @code{FILENAME} variable
+@cindex dark corner @subentry @code{FILENAME} variable
@item @code{FILENAME}
The name of the current input file. When no @value{DF}s are listed
on the command line, @command{awk} reads from the standard input and
@@ -15807,8 +15847,8 @@ to @code{NF} can be used to create fields in or remove
fields from the
current record. @xref{Changing Fields}.
@cindex @code{FUNCTAB} array
-@cindex @command{gawk}, @code{FUNCTAB} array in
-@cindex differences in @command{awk} and @command{gawk}, @code{FUNCTAB}
variable
+@cindex @command{gawk} @subentry @code{FUNCTAB} array in
+@cindex differences in @command{awk} and @command{gawk} @subentry
@code{FUNCTAB} variable
@item @code{FUNCTAB #}
An array whose indices and corresponding values are the names of all
the built-in, user-defined, and extension functions in the program.
@@ -15826,9 +15866,9 @@ the beginning of the program's execution
(@pxref{Records}).
@command{awk} increments @code{NR} each time it reads a new record.
-@cindex @command{gawk}, @code{PROCINFO} array in
+@cindex @command{gawk} @subentry @code{PROCINFO} array in
@cindex @code{PROCINFO} array
-@cindex differences in @command{awk} and @command{gawk}, @code{PROCINFO} array
+@cindex differences in @command{awk} and @command{gawk} @subentry
@code{PROCINFO} array
@item @code{PROCINFO #}
The elements of this array provide access to information about the
running @command{awk} program.
@@ -15837,7 +15877,7 @@ are guaranteed to be available:
@table @code
@item PROCINFO["argv"]
-@cindex command line, arguments
+@cindex command line @subentry arguments
The @code{PROCINFO["argv"]} array contains all of the command-line arguments
(after glob expansion and redirection processing on platforms where that must
be done manually by the program) with subscripts ranging from 0 through
@@ -15917,6 +15957,7 @@ while the program runs.
@item PROCINFO["platform"]
@cindex platform running on
+@cindex @code{PROCINFO} array @subentry platform running on
This element gives a string indicating the platform for which
@command{gawk} was compiled. The value will be one of the following:
@@ -15960,8 +16001,8 @@ Assigning a new value to this element changes the
default.
The value of the @code{getuid()} system call.
@item PROCINFO["version"]
-@cindex version of @command{gawk}
-@cindex @command{gawk} version
+@cindex version of @subentry @command{gawk}
+@cindex @command{gawk} @subentry version of
The version of @command{gawk}.
@end table
@@ -15972,10 +16013,10 @@ if your version of @command{gawk} supports
arbitrary-precision arithmetic
@table @code
@item PROCINFO["gmp_version"]
-@cindex version of GNU MP library
+@cindex version of @subentry GNU MP library
The version of the GNU MP library.
-@cindex version of GNU MPFR library
+@cindex version of @subentry GNU MPFR library
@item PROCINFO["mpfr_version"]
The version of the GNU MPFR library.
@@ -15995,8 +16036,8 @@ of @command{gawk} supports dynamic loading of extension
functions
@table @code
@item PROCINFO["api_major"]
-@cindex version of @command{gawk} extension API
-@cindex extension API, version number
+@cindex version of @subentry @command{gawk} extension API
+@cindex extension API @subentry version number
The major version of the extension API.
@item PROCINFO["api_minor"]
@@ -16068,16 +16109,16 @@ The start index in characters of the substring that
is matched by the
is the position of the string where the matched substring starts, or zero
if no match was found.
-@cindex @command{gawk}, @code{RT} variable in
+@cindex @command{gawk} @subentry @code{RT} variable in
@cindex @code{RT} variable
-@cindex differences in @command{awk} and @command{gawk}, @code{RS}/@code{RT}
variables
+@cindex differences in @command{awk} and @command{gawk} @subentry
@code{RS}/@code{RT} variables
@item @code{RT #}
The input text that matched the text denoted by @code{RS},
the record separator. It is set every time a record is read.
-@cindex @command{gawk}, @code{SYMTAB} array in
+@cindex @command{gawk} @subentry @code{SYMTAB} array in
@cindex @code{SYMTAB} array
-@cindex differences in @command{awk} and @command{gawk}, @code{SYMTAB} variable
+@cindex differences in @command{awk} and @command{gawk} @subentry
@code{SYMTAB} variable
@item @code{SYMTAB #}
An array whose indices are the names of all defined global variables and
arrays in the program. @code{SYMTAB} makes @command{gawk}'s symbol table
@@ -16153,15 +16194,15 @@ is available as an element within the @code{SYMTAB}
array.
@end quotation
@end table
-@cindex sidebar, Changing @code{NR} and @code{FNR}
+@cindex sidebar @subentry Changing @code{NR} and @code{FNR}
@ifdocbook
@docbook
<sidebar><title>Changing @code{NR} and @code{FNR}</title>
@end docbook
-@cindex @code{NR} variable, changing
-@cindex @code{FNR} variable, changing
-@cindex dark corner, @code{FNR}/@code{NR} variables
+@cindex @code{NR} variable @subentry changing
+@cindex @code{FNR} variable @subentry changing
+@cindex dark corner @subentry @code{FNR}/@code{NR} variables
@command{awk} increments @code{NR} and @code{FNR}
each time it reads a record, instead of setting them to the absolute
value of the number of records read. This means that a program can
@@ -16199,9 +16240,9 @@ changed.
@center @b{Changing @code{NR} and @code{FNR}}
-@cindex @code{NR} variable, changing
-@cindex @code{FNR} variable, changing
-@cindex dark corner, @code{FNR}/@code{NR} variables
+@cindex @code{NR} variable @subentry changing
+@cindex @code{FNR} variable @subentry changing
+@cindex dark corner @subentry @code{FNR}/@code{NR} variables
@command{awk} increments @code{NR} and @code{FNR}
each time it reads a record, instead of setting them to the absolute
value of the number of records read. This means that a program can
@@ -16233,9 +16274,9 @@ changed.
@node ARGC and ARGV
@subsection Using @code{ARGC} and @code{ARGV}
-@cindex @code{ARGC}/@code{ARGV} variables, how to use
-@cindex arguments, command-line
-@cindex command line, arguments
+@cindex @code{ARGC}/@code{ARGV} variables @subentry how to use
+@cindex arguments @subentry command-line
+@cindex command line @subentry arguments
@ref{Auto-set}
presented the following program describing the information contained in
@code{ARGC}
@@ -16348,7 +16389,7 @@ BEGIN @{
@}
@end example
-@cindex differences in @command{awk} and @command{gawk},
@code{ARGC}/@code{ARGV} variables
+@cindex differences in @command{awk} and @command{gawk} @subentry
@code{ARGC}/@code{ARGV} variables
Ending the @command{awk} options with @option{--} isn't
necessary in @command{gawk}. Unless @option{--posix} has
been specified, @command{gawk} silently puts any unrecognized options
@@ -16564,10 +16605,10 @@ Only the values are stored; the indices are implicit
from the order of
the values. Here, eight is the value at index zero, because eight appears in
the
position with zero elements before it.
-@cindex arrays, indexing
+@cindex arrays @subentry indexing
@cindex indexing arrays
@cindex associative arrays
-@cindex arrays, associative
+@cindex arrays @subentry associative
Arrays in @command{awk} are different---they are @dfn{associative}. This means
that each array is a collection of pairs---an index and its corresponding
array element value:
@@ -16690,7 +16731,7 @@ whose value is @w{@code{"number ten"}}. The result is:
@noindent
@cindex sparse arrays
-@cindex arrays, sparse
+@cindex arrays @subentry sparse
Now the array is @dfn{sparse}, which just means some indices are missing.
It has elements 0--3 and 10, but doesn't have elements 4, 5, 6, 7, 8, or 9.
@@ -16758,10 +16799,10 @@ array subscripts; this is discussed in more detail in
Here, the number @code{1} isn't double-quoted, because @command{awk}
automatically converts it to a string.
-@cindex @command{gawk}, @code{IGNORECASE} variable in
-@cindex case sensitivity, array indices and
-@cindex arrays, @code{IGNORECASE} variable and
-@cindex @code{IGNORECASE} variable, array indices and
+@cindex @command{gawk} @subentry @code{IGNORECASE} variable in
+@cindex case sensitivity @subentry array indices and
+@cindex arrays @subentry @code{IGNORECASE} variable and
+@cindex @code{IGNORECASE} variable @subentry array indices and
The value of @code{IGNORECASE} has no effect upon array subscripting.
The identical string value used to store an array element must be used
to retrieve it.
@@ -16775,9 +16816,9 @@ is independent of the number of elements in the array.
@node Reference to Elements
@subsection Referring to an Array Element
-@cindex arrays, referencing elements
+@cindex arrays @subentry referencing elements
@cindex array members
-@cindex elements of arrays
+@cindex elements in arrays
The principal way to use an array is to refer to one of its elements.
An @dfn{array reference} is an expression as follows:
@@ -16797,7 +16838,7 @@ The value of the array reference is the current value
of that array
element. For example, @code{foo[4.3]} is an expression referencing the element
of array @code{foo} at index @samp{4.3}.
-@cindex arrays, unassigned elements
+@cindex arrays @subentry unassigned elements
@cindex unassigned array elements
@cindex empty array elements
A reference to an array element that has no recorded value yields a value of
@@ -16806,7 +16847,7 @@ that have not been assigned any value as well as
elements that have been
deleted (@pxref{Delete}).
@cindex non-existent array elements
-@cindex arrays, elements that don't exist
+@cindex arrays @subentry elements @subentry that don't exist
@quotation NOTE
A reference to an element that does not exist @emph{automatically} creates
that array element, with the null string as its value. (In some cases,
@@ -16827,7 +16868,7 @@ an array element equal to the empty string.
@end quotation
@c @cindex arrays, @code{in} operator and
-@cindex @code{in} operator, testing if array element exists
+@cindex @code{in} operator @subentry testing if array element exists
To determine whether an element exists in an array at a certain index, use
the following expression:
@@ -16835,7 +16876,7 @@ the following expression:
@var{indx} in @var{array}
@end example
-@cindex side effects, array indexing
+@cindex side effects @subentry array indexing
@noindent
This expression tests whether the particular index @var{indx} exists,
without the side effect of creating that element if it is not present.
@@ -16868,8 +16909,8 @@ if (frequencies[2] != "")
@node Assigning Elements
@subsection Assigning Array Elements
-@cindex arrays, elements, assigning values
-@cindex elements in arrays, assigning values
+@cindex arrays @subentry elements @subentry assigning values
+@cindex elements in arrays @subentry assigning values
Array elements can be assigned values just like
@command{awk} variables:
@@ -16886,7 +16927,7 @@ assign to that element of the array.
@node Array Example
@subsection Basic Array Example
-@cindex arrays, an example of using
+@cindex arrays @subentry example of using
The following program takes a list of lines, each beginning with a line
number, and prints them out in order of line number. The line numbers
@@ -16961,10 +17002,10 @@ END @{
@node Scanning an Array
@subsection Scanning All Elements of an Array
-@cindex elements in arrays, scanning
+@cindex elements in arrays @subentry scanning
@cindex scanning arrays
-@cindex arrays, scanning
-@cindex loops, @code{for}, array scanning
+@cindex arrays @subentry scanning
+@cindex loops @subentry @code{for} @subentry array scanning
In programs that use arrays, it is often necessary to use a loop that
executes once for each element of an array. In other languages, where
@@ -16983,12 +17024,12 @@ for (@var{var} in @var{array})
@end example
@noindent
-@cindex @code{in} operator, use in loops
+@cindex @code{in} operator @subentry use in loops
This loop executes @var{body} once for each index in @var{array} that the
program has previously used, with the variable @var{var} set to that index.
-@cindex arrays, @code{for} statement and
-@cindex @code{for} statement, looping over arrays
+@cindex arrays @subentry @code{for} statement and
+@cindex @code{for} statement @subentry looping over arrays
The following program uses this form of the @code{for} statement. The
first rule scans the input records and notes which words appear (at
least once) in the input, by storing a one into the array @code{used} with
@@ -17026,9 +17067,9 @@ END @{
@xref{Word Sorting}
for a more detailed example of this type.
-@cindex arrays, elements, order of access by @code{in} operator
-@cindex elements in arrays, order of access by @code{in} operator
-@cindex @code{in} operator, order of array access
+@cindex arrays @subentry elements @subentry order of access by @code{in}
operator
+@cindex elements in arrays @subentry order of access by @code{in} operator
+@cindex @code{in} operator @subentry order of array access
The order in which elements of the array are accessed by this statement
is determined by the internal arrangement of the array elements within
@command{awk} and in standard @command{awk} cannot be controlled
@@ -17106,7 +17147,7 @@ to use for comparison of array elements. This advanced
feature
is described later in @ref{Array Sorting}.
@end itemize
-@cindex @code{PROCINFO}, values of @code{sorted_in}
+@cindex @code{PROCINFO} array @subentry values of @code{sorted_in}
The following special values for @code{PROCINFO["sorted_in"]} are available:
@table @code
@@ -17241,11 +17282,11 @@ sorting arrays; see @ref{Array Sorting Functions}.
@node Numeric Array Subscripts
@section Using Numbers to Subscript Arrays
-@cindex numbers, as array subscripts
-@cindex array subscripts, numbers as
-@cindex arrays, numeric subscripts
-@cindex subscripts in arrays, numbers as
-@cindex @code{CONVFMT} variable, array subscripts and
+@cindex numbers @subentry as array subscripts
+@cindex array subscripts @subentry numbers as
+@cindex arrays @subentry numeric subscripts
+@cindex subscripts in arrays @subentry numbers as
+@cindex @code{CONVFMT} variable @subentry array subscripts and
An important aspect to remember about arrays is that @emph{array subscripts
are always strings}. When a numeric value is used as a subscript,
it is converted to a string value before being used for subscripting
@@ -17275,7 +17316,7 @@ string value from @code{xyz}---this time
@code{"12.15"}---because the value of
@code{CONVFMT} only allows two significant digits. This test fails,
because @code{"12.15"} is different from @code{"12.153"}.
-@cindex converting integer array subscripts
+@cindex converting @subentry integer array subscripts to strings
@cindex integer array indices
According to the rules for conversions
(@pxref{Conversion}), integer
@@ -17309,10 +17350,10 @@ effect on your programs.
@node Uninitialized Subscripts
@section Using Uninitialized Variables as Subscripts
-@cindex variables, uninitialized@comma{} as array subscripts
+@cindex variables @subentry uninitialized, as array subscripts
@cindex uninitialized variables, as array subscripts
-@cindex subscripts in arrays, uninitialized variables as
-@cindex arrays, subscripts, uninitialized variables as
+@cindex subscripts in arrays @subentry uninitialized variables as
+@cindex arrays @subentry subscripts, uninitialized variables as
Suppose it's necessary to write a program
to print the input data in reverse order.
A reasonable attempt to do so (with some test
@@ -17356,10 +17397,10 @@ Here, the @samp{++} forces @code{lines} to be
numeric, thus making
the ``old value'' numeric zero. This is then converted to @code{"0"}
as the array subscript.
-@cindex array subscripts, null strings as
-@cindex null strings, as array subscripts
-@cindex dark corner, array subscripts
-@cindex lint checking, array subscripts
+@cindex array subscripts @subentry null string as
+@cindex null strings @subentry as array subscripts
+@cindex dark corner @subentry array subscripts
+@cindex lint checking @subentry array subscripts
Even though it is somewhat unusual, the null string
(@code{""}) is a valid array subscript.
@value{DARKCORNER}
@@ -17370,9 +17411,9 @@ on the command line (@pxref{Options}).
@node Delete
@section The @code{delete} Statement
@cindex @code{delete} statement
-@cindex deleting elements in arrays
-@cindex arrays, elements, deleting
-@cindex elements in arrays, deleting
+@cindex deleting @subentry elements in arrays
+@cindex arrays @subentry elements @subentry deleting
+@cindex elements in arrays @subentry deleting
To remove an individual element of an array, use the @code{delete}
statement:
@@ -17403,7 +17444,7 @@ if (4 in foo)
print "This will never be printed"
@end example
-@cindex null strings, deleting array elements and
+@cindex null strings @subentry deleting array elements and
It is important to note that deleting an element is @emph{not} the
same as assigning it a null value (the empty string, @code{""}).
For example:
@@ -17416,19 +17457,19 @@ if (4 in foo)
@end group
@end example
-@cindex lint checking, array elements
+@cindex lint checking @subentry array subscripts
It is not an error to delete an element that does not exist.
However, if @option{--lint} is provided on the command line
(@pxref{Options}),
@command{gawk} issues a warning message when an element that
is not in the array is deleted.
-@cindex common extensions, @code{delete} to delete entire arrays
-@cindex extensions, common@comma{} @code{delete} to delete entire arrays
-@cindex arrays, deleting entire contents
-@cindex deleting entire arrays
+@cindex common extensions @subentry @code{delete} to delete entire arrays
+@cindex extensions @subentry common @subentry @code{delete} to delete entire
arrays
+@cindex arrays @subentry deleting entire contents
+@cindex deleting @subentry entire arrays
@cindex @code{delete} @var{array}
-@cindex differences in @command{awk} and @command{gawk}, array elements,
deleting
+@cindex differences in @command{awk} and @command{gawk} @subentry array
elements, deleting
All the elements of an array may be deleted with a single statement
by leaving off the subscript in the @code{delete} statement,
as follows:
@@ -17454,7 +17495,7 @@ POSIX standard. See
@uref{http://austingroupbugs.net/view.php?id=544,
the Austin Group website}.
@end quotation
-@cindex portability, deleting array elements
+@cindex portability @subentry deleting array elements
@cindex Brennan, Michael
The following statement provides a portable but nonobvious way to clear
out an array:@footnote{Thanks to Michael Brennan for pointing this out.}
@@ -17463,7 +17504,7 @@ out an array:@footnote{Thanks to Michael Brennan for
pointing this out.}
split("", array)
@end example
-@cindex @code{split()} function, array elements@comma{} deleting
+@cindex @code{split()} function @subentry array elements, deleting
The @code{split()} function
(@pxref{String Functions})
clears out the target array first. This call asks it to split
@@ -17489,8 +17530,8 @@ a = 3
* Multiscanning:: Scanning multidimensional arrays.
@end menu
-@cindex subscripts in arrays, multidimensional
-@cindex arrays, multidimensional
+@cindex subscripts in arrays @subentry multidimensional
+@cindex arrays @subentry multidimensional
A @dfn{multidimensional array} is an array in which an element is identified
by a sequence of indices instead of a single index. For example, a
two-dimensional array requires two indices. The usual way (in many
@@ -17498,7 +17539,7 @@ languages, including @command{awk}) to refer to an
element of a
two-dimensional array named @code{grid} is with
@code{grid[@var{x},@var{y}]}.
-@cindex @code{SUBSEP} variable, multidimensional arrays and
+@cindex @code{SUBSEP} variable @subentry multidimensional arrays and
Multidimensional arrays are supported in @command{awk} through
concatenation of indices into one string.
@command{awk} converts the indices into strings
@@ -17530,7 +17571,7 @@ combined strings that are ambiguous. Suppose that
@code{SUBSEP} is
"b@@c"]}} are indistinguishable because both are actually
stored as @samp{foo["a@@b@@c"]}.
-@cindex @code{in} operator, index existence in multidimensional arrays
+@cindex @code{in} operator @subentry index existence in multidimensional arrays
To test whether a particular index sequence exists in a
multidimensional array, use the same operator (@code{in}) that is
used for single-dimensional arrays. Write the whole sequence of indices
@@ -17599,8 +17640,8 @@ There is no special @code{for} statement for scanning a
multidimensional arrays or elements---there is only a
multidimensional @emph{way of accessing} an array.
-@cindex subscripts in arrays, multidimensional, scanning
-@cindex arrays, multidimensional, scanning
+@cindex subscripts in arrays @subentry multidimensional @subentry scanning
+@cindex arrays @subentry multidimensional @subentry scanning
@cindex scanning multidimensional arrays
However, if your program has an array that is always accessed as
multidimensional, you can get the effect of scanning it by combining
@@ -17643,7 +17684,7 @@ separate indices is recovered.
@node Arrays of Arrays
@section Arrays of Arrays
-@cindex arrays of arrays
+@cindex arrays @subentry arrays of arrays
@command{gawk} goes beyond standard @command{awk}'s multidimensional
array access and provides true arrays of
@@ -17865,7 +17906,7 @@ element is itself a subarray.
@node Functions
@chapter Functions
-@cindex functions, built-in
+@cindex functions @subentry built-in
@cindex built-in functions
This @value{CHAPTER} describes @command{awk}'s built-in functions,
which fall into three categories: numeric, string, and I/O.
@@ -17919,17 +17960,17 @@ the function followed
by arguments in parentheses. For example, @samp{atan2(y + z, 1)}
is a call to the function @code{atan2()} and has two arguments.
-@cindex programming conventions, functions, calling
-@cindex whitespace, functions@comma{} calling
+@cindex programming conventions @subentry functions @subentry calling
+@cindex whitespace @subentry functions, calling
Whitespace is ignored between the built-in function name and the
opening parenthesis, but nonetheless it is good practice to avoid using
whitespace
there. User-defined functions do not permit whitespace in this way, and
it is easier to avoid mistakes by following a simple
convention that always works---no whitespace after a function name.
-@cindex troubleshooting, @command{gawk}, fatal errors@comma{} function
arguments
-@cindex @command{gawk}, function arguments and
-@cindex differences in @command{awk} and @command{gawk}, function arguments
(@command{gawk})
+@cindex troubleshooting @subentry @command{gawk} @subentry fatal errors,
function arguments
+@cindex @command{gawk} @subentry function arguments and
+@cindex differences in @command{awk} and @command{gawk} @subentry function
arguments
Each built-in function accepts a certain number of arguments.
In some cases, arguments can be omitted. The defaults for omitted
arguments vary from function to function and are described under the
@@ -17946,9 +17987,9 @@ i = 4
j = sqrt(i++)
@end example
-@cindex evaluation order, functions
-@cindex functions, built-in, evaluation order
-@cindex built-in functions, evaluation order
+@cindex evaluation order @subentry functions
+@cindex functions @subentry built-in @subentry evaluation order
+@cindex built-in functions @subentry evaluation order
@noindent
the variable @code{i} is incremented to the value five before @code{sqrt()}
is called with a value of four for its actual parameter.
@@ -17970,7 +18011,7 @@ two arguments 11 and 10.
@node Numeric Functions
@subsection Numeric Functions
-@cindex numeric functions
+@cindex numeric @subentry functions
The following list describes all of
the built-in functions that work with numbers.
@@ -18039,7 +18080,7 @@ is negative.
@cindex Beebe, Nelson H.F.@:
@item @code{rand()}
@cindexawkfunc{rand}
-@cindex random numbers, @code{rand()}/@code{srand()} functions
+@cindex random numbers @subentry @code{rand()}/@code{srand()} functions
Return a random number. The values of @code{rand()} are
uniformly distributed between zero and one.
The value could be zero but is never one.@footnote{The C version of
@@ -18085,7 +18126,7 @@ function roll(n) @{ return 1 + int(rand() * n) @}
@end example
@cindex seeding random number generator
-@cindex random numbers, seed of
+@cindex random numbers @subentry seed of
@quotation CAUTION
In most @command{awk} implementations, including @command{gawk},
@code{rand()} starts generating numbers from the same
@@ -18188,7 +18229,7 @@ pound sign (@samp{#}). They are not available in
compatibility mode
@itemx @code{asorti(}@var{source} [@code{,} @var{dest} [@code{,} @var{how} ]
]@code{) #}
@cindexgawkfunc{asorti}
@cindex sort array
-@cindex arrays, elements, retrieving number of
+@cindex arrays @subentry elements @subentry retrieving number of
@cindexgawkfunc{asort}
@cindex sort array indices
These two functions are similar in behavior, so they are described
@@ -18208,7 +18249,7 @@ sequential integers starting with one. If the optional
array @var{dest}
is specified, then @var{source} is duplicated into @var{dest}. @var{dest}
is then sorted, leaving the indices of @var{source} unchanged.
-@cindex @command{gawk}, @code{IGNORECASE} variable in
+@cindex @command{gawk} @subentry @code{IGNORECASE} variable in
When comparing strings, @code{IGNORECASE} affects the sorting
(@pxref{Array Sorting Functions}). If the
@var{source} array contains subarrays as values (@pxref{Arrays of
@@ -18339,7 +18380,7 @@ and the third argument must be assignable.
@item @code{index(@var{in}, @var{find})}
@cindexawkfunc{index}
-@cindex search in string
+@cindex search for substring
@cindex find substring in string
Search the string @var{in} for the first occurrence of the string
@var{find}, and return the position in characters where that occurrence
@@ -18353,7 +18394,7 @@ $ @kbd{awk 'BEGIN @{ print index("peanut", "an") @}'}
@noindent
If @var{find} is not found, @code{index()} returns zero.
-@cindex dark corner, regexp as second argument to @code{index()}
+@cindex dark corner @subentry regexp as second argument to @code{index()}
With BWK @command{awk} and @command{gawk},
it is a fatal error to use a regexp constant for @var{find}.
Other implementations allow it, simply treating the regexp
@@ -18361,7 +18402,7 @@ constant as an expression meaning @samp{$0 ~ /regexp/}.
@value{DARKCORNER}
@item @code{length(}[@var{string}]@code{)}
@cindexawkfunc{length}
-@cindex string length
+@cindex string @subentry length
@cindex length of string
Return the number of characters in @var{string}. If
@var{string} is a number, the length of the digit string representing
@@ -18386,8 +18427,8 @@ three characters.
If no argument is supplied, @code{length()} returns the length of @code{$0}.
@c @cindex historical features
-@cindex portability, @code{length()} function
-@cindex POSIX @command{awk}, functions and, @code{length()}
+@cindex portability @subentry @code{length()} function
+@cindex POSIX @command{awk} @subentry functions and @subentry @code{length()}
@quotation NOTE
In older versions of @command{awk}, the @code{length()} function could
be called
@@ -18397,7 +18438,7 @@ support historical practice. For programs to be
maximally portable,
always supply the parentheses.
@end quotation
-@cindex dark corner, @code{length()} function
+@cindex dark corner @subentry @code{length()} function
If @code{length()} is called with a variable that has not been used,
@command{gawk} forces the variable to be a scalar. Other
implementations of @command{awk} leave the variable without a type.
@@ -18418,11 +18459,11 @@ If @option{--lint} has
been specified on the command line, @command{gawk} issues a
warning about this.
-@cindex common extensions, @code{length()} applied to an array
-@cindex extensions, common@comma{} @code{length()} applied to an array
-@cindex differences in @command{awk} and @command{gawk}, @code{length()}
function
+@cindex common extensions @subentry @code{length()} applied to an array
+@cindex extensions @subentry common @subentry @code{length()} applied to an
array
+@cindex differences in @command{awk} and @command{gawk} @subentry
@code{length()} function
@cindex number of array elements
-@cindex array, number of elements
+@cindex arrays @subentry number of elements
With @command{gawk} and several other @command{awk} implementations, when
given an
array argument, the @code{length()} function returns the number of elements
in the array. @value{COMMONEXT}
@@ -18437,7 +18478,7 @@ If @option{--posix} is supplied, using an array
argument is a fatal error
@item @code{match(@var{string}, @var{regexp}} [@code{, @var{array}}]@code{)}
@cindexawkfunc{match}
-@cindex string, regular expression match
+@cindex string @subentry regular expression match of
@cindex match regexp in string
Search @var{string} for the
longest, leftmost substring matched by the regular expression
@@ -18458,9 +18499,11 @@ functions that work with regular expressions, such as
for @code{match()}, the order is the same as for the @samp{~} operator:
@samp{@var{string} ~ @var{regexp}}.
-@cindex @code{RSTART} variable, @code{match()} function and
-@cindex @code{RLENGTH} variable, @code{match()} function and
-@cindex @code{match()} function, @code{RSTART}/@code{RLENGTH} variables
+@cindex @code{RSTART} variable @subentry @code{match()} function and
+@cindex @code{RLENGTH} variable @subentry @code{match()} function and
+@cindex @code{match()} function @subentry @code{RSTART}/@code{RLENGTH}
variables
+@cindex @code{match()} function @subentry side effects
+@cindex side effects @subentry @code{match()} function
The @code{match()} function sets the predefined variable @code{RSTART} to
the index. It also sets the predefined variable @code{RLENGTH} to the
length in characters of the matched substring. If no match is found,
@@ -18508,7 +18551,7 @@ Match of ru+n found at 12 in My program runs
Match of Melvin found at 1 in Melvin was here.
@end example
-@cindex differences in @command{awk} and @command{gawk}, @code{match()}
function
+@cindex differences in @command{awk} and @command{gawk} @subentry
@code{match()} function
If @var{array} is present, it is cleared, and then the zeroth element
of @var{array} is set to the entire portion of @var{string}
matched by @var{regexp}. If @var{regexp} contains parentheses,
@@ -18545,7 +18588,7 @@ subexpression, because they may not all have matched
text; thus, they
should be tested for with the @code{in} operator
(@pxref{Reference to Elements}).
-@cindex troubleshooting, @code{match()} function
+@cindex troubleshooting @subentry @code{match()} function
The @var{array} argument to @code{match()} is a
@command{gawk} extension. In compatibility mode
(@pxref{Options}),
@@ -18608,7 +18651,7 @@ split("cul-de-sac", a, "-", seps)
@end example
@noindent
-@cindex strings splitting, example
+@cindex strings @subentry splitting, example
splits the string @code{"cul-de-sac"} into three fields using @samp{-} as the
separator. It sets the contents of the array @code{a} as follows:
@@ -18628,7 +18671,7 @@ seps[2] = "-"
@noindent
The value returned by this call to @code{split()} is three.
-@cindex differences in @command{awk} and @command{gawk}, @code{split()}
function
+@cindex differences in @command{awk} and @command{gawk} @subentry
@code{split()} function
As with input field-splitting, when the value of @var{fieldsep} is
@w{@code{" "}}, leading and trailing whitespace is ignored in values assigned
to
the elements of
@@ -18644,7 +18687,7 @@ Note, however, that @code{RS} has no effect on the way
@code{split()}
works. Even though @samp{RS = ""} causes the newline character to also be an
input
field separator, this does not affect how @code{split()} splits strings.
-@cindex dark corner, @code{split()} function
+@cindex dark corner @subentry @code{split()} function
Modern implementations of @command{awk}, including @command{gawk}, allow
the third argument to be a regexp constant (@w{@code{/}@dots{}@code{/}})
as well as a string. @value{DARKCORNER}
@@ -18664,11 +18707,12 @@ If @var{string} does not match @var{fieldsep} at all
(but is not null),
@var{array} has one element only. The value of that element is the original
@var{string}.
+@cindex POSIX mode
In POSIX mode (@pxref{Options}), the fourth argument is not allowed.
@item @code{sprintf(@var{format}, @var{expression1}, @dots{})}
@cindexawkfunc{sprintf}
-@cindex formatting strings
+@cindex formatting @subentry strings
Return (without printing) the string that @code{printf} would
have printed out with the same arguments
(@pxref{Printf}).
@@ -18682,7 +18726,7 @@ pival = sprintf("pi = %.2f (approx.)", 22/7)
assigns the string @w{@samp{pi = 3.14 (approx.)}} to the variable @code{pival}.
@cindexgawkfunc{strtonum}
-@cindex convert string to number
+@cindex converting @subentry string to numbers
@item @code{strtonum(@var{str}) #}
Examine @var{str} and return its numeric value. If @var{str}
begins with a leading @samp{0}, @code{strtonum()} assumes that @var{str}
@@ -18781,8 +18825,10 @@ an @samp{&}:
@{ sub(/\|/, "\\&"); print @}
@end example
-@cindex @code{sub()} function, arguments of
-@cindex @code{gsub()} function, arguments of
+@cindex @code{sub()} function @subentry arguments of
+@cindex @code{gsub()} function @subentry arguments of
+@cindex side effects @subentry @code{sub()} function
+@cindex side effects @subentry @code{gsub()} function
As mentioned, the third argument to @code{sub()} must
be a variable, field, or array element.
Some versions of @command{awk} allow the third argument to
@@ -18797,7 +18843,7 @@ sub(/USA/, "United States", "the USA and Canada")
@end example
@noindent
-@cindex troubleshooting, @code{gsub()}/@code{sub()} functions
+@cindex troubleshooting @subentry @code{gsub()}/@code{sub()} functions
For historical compatibility, @command{gawk} accepts such erroneous code.
However, using any other nonchangeable
object as the third parameter causes a fatal error and your program
@@ -18832,7 +18878,7 @@ in the string, @code{substr()} returns the null string.
Similarly, if @var{length} is present but less than or equal to zero,
the null string is returned.
-@cindex troubleshooting, @code{substr()} function
+@cindex troubleshooting @subentry @code{substr()} function
The string returned by @code{substr()} @emph{cannot} be
assigned. Thus, it is a mistake to attempt to change a portion of
a string, as shown in the following example:
@@ -18851,7 +18897,7 @@ of @code{sub()} or @code{gsub()}:
gsub(/xyz/, "pdq", substr($0, 5, 20)) # WRONG
@end example
-@cindex portability, @code{substr()} function
+@cindex portability @subentry @code{substr()} function
(Some commercial versions of @command{awk} treat
@code{substr()} as assignable, but doing so is not portable.)
@@ -18864,11 +18910,11 @@ string = "abcdef"
string = substr(string, 1, 2) "CDE" substr(string, 6)
@end example
-@cindex case sensitivity, converting case
-@cindex strings, converting letter case
+@cindex case sensitivity @subentry converting case
+@cindex strings @subentry converting letter case
@item @code{tolower(@var{string})}
@cindexawkfunc{tolower}
-@cindex convert string to lower case
+@cindex converting @subentry string to lower case
Return a copy of @var{string}, with each uppercase character
in the string replaced with its corresponding lowercase character.
Nonalphabetic characters are left unchanged. For example,
@@ -18876,23 +18922,23 @@ Nonalphabetic characters are left unchanged. For
example,
@item @code{toupper(@var{string})}
@cindexawkfunc{toupper}
-@cindex convert string to upper case
+@cindex converting @subentry string to upper case
Return a copy of @var{string}, with each lowercase character
in the string replaced with its corresponding uppercase character.
Nonalphabetic characters are left unchanged. For example,
@code{toupper("MiXeD cAsE 123")} returns @code{"MIXED CASE 123"}.
@end table
-@cindex sidebar, Matching the Null String
+@cindex sidebar @subentry Matching the Null String
@ifdocbook
@docbook
<sidebar><title>Matching the Null String</title>
@end docbook
-@cindex matching, null strings
-@cindex null strings, matching
-@cindex @code{*} (asterisk), @code{*} operator, null strings@comma{} matching
-@cindex asterisk (@code{*}), @code{*} operator, null strings@comma{} matching
+@cindex matching @subentry null strings
+@cindex null strings @subentry matching
+@cindex @code{*} (asterisk) @subentry @code{*} operator @subentry null
strings, matching
+@cindex asterisk (@code{*}) @subentry @code{*} operator @subentry null
strings, matching
In @command{awk}, the @samp{*} operator can match the null string.
This is particularly important for the @code{sub()}, @code{gsub()},
@@ -18916,10 +18962,10 @@ Although this makes a certain amount of sense, it can
be surprising.
@center @b{Matching the Null String}
-@cindex matching, null strings
-@cindex null strings, matching
-@cindex @code{*} (asterisk), @code{*} operator, null strings@comma{} matching
-@cindex asterisk (@code{*}), @code{*} operator, null strings@comma{} matching
+@cindex matching @subentry null strings
+@cindex null strings @subentry matching
+@cindex @code{*} (asterisk) @subentry @code{*} operator @subentry null
strings, matching
+@cindex asterisk (@code{*}) @subentry @code{*} operator @subentry null
strings, matching
In @command{awk}, the @samp{*} operator can match the null string.
This is particularly important for the @code{sub()}, @code{gsub()},
@@ -18939,14 +18985,14 @@ Although this makes a certain amount of sense, it can
be surprising.
@node Gory Details
@subsubsection More about @samp{\} and @samp{&} with @code{sub()},
@code{gsub()}, and @code{gensub()}
-@cindex escape processing, @code{gsub()}/@code{gensub()}/@code{sub()} functions
-@cindex @code{sub()} function, escape processing
-@cindex @code{gsub()} function, escape processing
-@cindex @code{gensub()} function (@command{gawk}), escape processing
-@cindex @code{\} (backslash), @code{gsub()}/@code{gensub()}/@code{sub()}
functions and
-@cindex backslash (@code{\}), @code{gsub()}/@code{gensub()}/@code{sub()}
functions and
-@cindex @code{&} (ampersand), @code{gsub()}/@code{gensub()}/@code{sub()}
functions and
-@cindex ampersand (@code{&}), @code{gsub()}/@code{gensub()}/@code{sub()}
functions and
+@cindex escape processing @subentry @code{gsub()}/@code{gensub()}/@code{sub()}
functions
+@cindex @code{sub()} function @subentry escape processing
+@cindex @code{gsub()} function @subentry escape processing
+@cindex @code{gensub()} function (@command{gawk}) @subentry escape processing
+@cindex @code{\} (backslash) @subentry
@code{gsub()}/@code{gensub()}/@code{sub()} functions and
+@cindex backslash (@code{\}) @subentry
@code{gsub()}/@code{gensub()}/@code{sub()} functions and
+@cindex @code{&} (ampersand) @subentry
@code{gsub()}/@code{gensub()}/@code{sub()} functions and
+@cindex ampersand (@code{&}) @subentry
@code{gsub()}/@code{gensub()}/@code{sub()} functions and
@quotation CAUTION
This subsubsection has been reported to cause headaches.
@@ -19112,7 +19158,7 @@ was expected. In addition, the @command{gawk}
maintainer's proposal was
lost during the standardization process. The final rules are
somewhat simpler. The results are similar except for one case.
-@cindex POSIX @command{awk}, functions and, @code{gsub()}/@code{sub()}
+@cindex POSIX @command{awk} @subentry functions and @subentry
@code{gsub()}/@code{sub()}
The POSIX rules state that @samp{\&} in the replacement string produces
a literal @samp{&}, @samp{\\} produces a literal @samp{\}, and @samp{\}
followed
by anything else is not special; the @samp{\} is placed straight into the
output.
@@ -19242,7 +19288,7 @@ to do substitutions.
@node I/O Functions
@subsection Input/Output Functions
-@cindex input/output functions
+@cindex input/output @subentry functions
The following functions relate to input/output (I/O).
Optional parameters are enclosed in square brackets ([ ]):
@@ -19250,7 +19296,7 @@ Optional parameters are enclosed in square brackets ([
]):
@table @asis
@item @code{close(}@var{filename} [@code{,} @var{how}]@code{)}
@cindexawkfunc{close}
-@cindex files, closing
+@cindex files @subentry closing
@cindex close file or coprocess
Close the file @var{filename} for input or output. Alternatively, the
argument may be a shell command that was used for creating a coprocess, or
@@ -19278,8 +19324,8 @@ Flush any buffered output associated with
@var{filename}, which is either a
file opened for writing or a shell command for redirecting output to
a pipe or coprocess.
-@cindex buffers, flushing
-@cindex output, buffering
+@cindex buffers @subentry flushing
+@cindex output @subentry buffering
Many utility programs @dfn{buffer} their output (i.e., they save information
to write to a disk file or the screen in memory until there is enough
for it to be worthwhile to send the data to the output device).
@@ -19291,7 +19337,7 @@ This is the purpose of the @code{fflush()}
function---@command{gawk} also
buffers its output, and the @code{fflush()} function forces
@command{gawk} to flush its buffers.
-@cindex extensions, common@comma{} @code{fflush()} function
+@cindex extensions @subentry common @subentry @code{fflush()} function
@cindex Brian Kernighan's @command{awk}
Brian Kernighan added @code{fflush()} to his @command{awk} in April
1992. For two decades, it was a common extension. In December
@@ -19318,7 +19364,7 @@ only the standard output.
@c @cindex automatic warnings
@c @cindex warnings, automatic
-@cindex troubleshooting, @code{fflush()} function
+@cindex troubleshooting @subentry @code{fflush()} function
@code{fflush()} returns zero if the buffer is successfully flushed;
otherwise, it returns a nonzero value. (@command{gawk} returns @minus{}1.)
In the case where all buffers are flushed, the return value is zero
@@ -19333,13 +19379,13 @@ In such a case, @code{fflush()} returns @minus{}1, as
well.
@c end the table to let the sidebar take up the full width of the page.
@end table
-@cindex sidebar, Interactive Versus Noninteractive Buffering
+@cindex sidebar @subentry Interactive Versus Noninteractive Buffering
@ifdocbook
@docbook
<sidebar><title>Interactive Versus Noninteractive Buffering</title>
@end docbook
-@cindex buffering, interactive vs.@: noninteractive
+@cindex buffering @subentry interactive vs.@: noninteractive
As a side point, buffering issues can be even more confusing if
your program is @dfn{interactive} (i.e., communicating
@@ -19390,7 +19436,7 @@ it is all buffered and sent down the pipe to
@command{cat} in one shot.
@center @b{Interactive Versus Noninteractive Buffering}
-@cindex buffering, interactive vs.@: noninteractive
+@cindex buffering @subentry interactive vs.@: noninteractive
As a side point, buffering issues can be even more confusing if
your program is @dfn{interactive} (i.e., communicating
@@ -19466,8 +19512,8 @@ close("/bin/sh")
@end example
@noindent
-@cindex troubleshooting, @code{system()} function
-@cindex @option{--sandbox} option, disabling @code{system()} function
+@cindex troubleshooting @subentry @code{system()} function
+@cindex @option{--sandbox} option @subentry disabling @code{system()} function
However, if your @command{awk}
program is interactive, @code{system()} is useful for running large
self-contained programs, such as a shell or an editor.
@@ -19512,15 +19558,15 @@ The return values are summarized in
@ref{table-system-return-values}.
As of August, 2018, BWK @command{awk} now follows @command{gawk}'s behavior
for the return value of @code{system()}.
-@cindex sidebar, Controlling Output Buffering with @code{system()}
+@cindex sidebar @subentry Controlling Output Buffering with @code{system()}
@ifdocbook
@docbook
<sidebar><title>Controlling Output Buffering with @code{system()}</title>
@end docbook
-@cindex buffers, flushing
-@cindex buffering, input/output
-@cindex output, buffering
+@cindex buffers @subentry flushing
+@cindex buffering @subentry input/output
+@cindex output @subentry buffering
The @code{fflush()} function provides explicit control over output buffering
for
individual files and pipes. However, its use is not portable to many older
@@ -19583,9 +19629,9 @@ you would see the latter (undesirable) output.
@center @b{Controlling Output Buffering with @code{system()}}
-@cindex buffers, flushing
-@cindex buffering, input/output
-@cindex output, buffering
+@cindex buffers @subentry flushing
+@cindex buffering @subentry input/output
+@cindex output @subentry buffering
The @code{fflush()} function provides explicit control over output buffering
for
individual files and pipes. However, its use is not portable to many older
@@ -19646,9 +19692,9 @@ you would see the latter (undesirable) output.
@cindex timestamps
@cindex log files, timestamps in
-@cindex files, log@comma{} timestamps in
-@cindex @command{gawk}, timestamps
-@cindex POSIX @command{awk}, timestamps and
+@cindex files @subentry log, timestamps in
+@cindex @command{gawk} @subentry timestamps
+@cindex POSIX @command{awk} @subentry timestamps and
@command{awk} programs are commonly used to process log files
containing timestamp information, indicating when a
particular log record was written. Many programs log their timestamps
@@ -19679,8 +19725,8 @@ which is sufficient to represent times through
including negative timestamps that represent times before the
epoch.
-@cindex @command{date} utility, GNU
-@cindex time, retrieving
+@cindex @command{date} utility @subentry GNU
+@cindex time @subentry retrieving
In order to make it easier to process such log files and to produce
useful reports, @command{gawk} provides the following functions for
working with timestamps. They are @command{gawk} extensions; they are
@@ -19723,7 +19769,7 @@ whether daylight savings time is in effect for the
specified time.
If @var{datespec} does not contain enough elements or if the resulting time
is out of range, @code{mktime()} returns @minus{}1.
-@cindex @command{gawk}, @code{PROCINFO} array in
+@cindex @command{gawk} @subentry @code{PROCINFO} array in
@cindex @code{PROCINFO} array
@item @code{strftime(}[@var{format} [@code{,} @var{timestamp} [@code{,}
@var{utc-flag}] ] ]@code{)}
@cindexgawkfunc{strftime}
@@ -19761,9 +19807,9 @@ log file with the current time of day. In particular,
it is easy to
determine how long ago a particular record was logged. It also allows
you to produce log records using the ``seconds since the epoch'' format.
-@cindex converting, dates to timestamps
-@cindex dates, converting to timestamps
-@cindex timestamps, converting dates to
+@cindex converting @subentry dates to timestamps
+@cindex dates @subentry converting to timestamps
+@cindex timestamps @subentry converting dates to
The @code{mktime()} function allows you to convert a textual representation
of a date and time into a timestamp. This makes it easy to do before/after
comparisons of dates and times, particularly when dealing with date and
@@ -19777,7 +19823,7 @@ in that it copies nonformat specification characters
verbatim to the
returned string, while substituting date and time values for format
specifications in the @var{format} string.
-@cindex format specifiers, @code{strftime()} function (@command{gawk})
+@cindex format specifiers @subentry @code{strftime()} function (@command{gawk})
@code{strftime()} is guaranteed by the 1999 ISO C
standard@footnote{Unfortunately,
not every system's @code{strftime()} necessarily
@@ -19877,7 +19923,7 @@ The weekday as a decimal number (1--7). Monday is day
one.
The week number of the year (with the first Sunday as the first day of week
one)
as a decimal number (00--53).
-@c @cindex ISO 8601
+@cindex ISO @subentry ISO 8601 date and time standard
@item %V
The week number of the year (with the first Monday as the first
day of week one) as a decimal number (01--53).
@@ -19978,8 +20024,8 @@ The date in VMS format (e.g., @samp{20-JUN-1991}).
Additionally, the alternative representations are recognized but their
normal representations are used.
-@cindex @code{date} utility, POSIX
-@cindex POSIX @command{awk}, @code{date} utility and
+@cindex @code{date} utility @subentry POSIX
+@cindex POSIX @command{awk} @subentry @code{date} utility and
The following example is an @command{awk} implementation of the POSIX
@command{date} utility. Normally, the @command{date} utility prints the
current date and time of day in a well-known format. However, if you
@@ -20028,7 +20074,7 @@ gawk 'BEGIN @{
@node Bitwise Functions
@subsection Bit-Manipulation Functions
@cindex bit-manipulation functions
-@cindex bitwise, operations
+@cindex bitwise @subentry operations
@cindex AND bitwise operation
@cindex OR bitwise operation
@cindex XOR bitwise operation
@@ -20155,7 +20201,7 @@ Operands | 0 | 1 | 0 | 1 | 0 | 1
@end docbook
@end float
-@cindex bitwise complement
+@cindex bitwise @subentry complement
@cindex complement, bitwise
As you can see, the result of an AND operation is 1 only when @emph{both}
bits are 1.
@@ -20166,7 +20212,7 @@ The next operation is the @dfn{complement}; the
complement of 1 is 0 and
the complement of 0 is 1. Thus, this operation ``flips'' all the bits
of a given value.
-@cindex bitwise, shift
+@cindex bitwise @subentry shift
@cindex left shift, bitwise
@cindex right shift, bitwise
@cindex shift, bitwise
@@ -20181,35 +20227,33 @@ bits, you end up with @samp{11001000}. The following
list describes
@command{gawk}'s built-in functions that implement the bitwise operations.
Optional parameters are enclosed in square brackets ([ ]):
-@cindex @command{gawk}, bitwise operations in
+@cindex @command{gawk} @subentry bitwise operations in
@table @asis
@cindexgawkfunc{and}
-@cindex bitwise AND
+@cindex bitwise @subentry AND
@item @code{and(}@var{v1}@code{,} @var{v2} [@code{,} @dots{}]@code{)}
Return the bitwise AND of the arguments. There must be at least two.
@cindexgawkfunc{compl}
-@cindex bitwise complement
+@cindex bitwise @subentry complement
@item @code{compl(@var{val})}
Return the bitwise complement of @var{val}.
@cindexgawkfunc{lshift}
-@cindex left shift
@item @code{lshift(@var{val}, @var{count})}
Return the value of @var{val}, shifted left by @var{count} bits.
@cindexgawkfunc{or}
-@cindex bitwise OR
+@cindex bitwise @subentry OR
@item @code{or(}@var{v1}@code{,} @var{v2} [@code{,} @dots{}]@code{)}
Return the bitwise OR of the arguments. There must be at least two.
@cindexgawkfunc{rshift}
-@cindex right shift
@item @code{rshift(@var{val}, @var{count})}
Return the value of @var{val}, shifted right by @var{count} bits.
@cindexgawkfunc{xor}
-@cindex bitwise XOR
+@cindex bitwise @subentry XOR
@item @code{xor(}@var{v1}@code{,} @var{v2} [@code{,} @dots{}]@code{)}
Return the bitwise XOR of the arguments. There must be at least two.
@end table
@@ -20225,6 +20269,7 @@ Here is a user-defined function (@pxref{User-defined})
that illustrates the use of these functions:
@cindex @code{bits2str()} user-defined function
+@cindex user-defined @subentry function @subentry @code{bits2str()}
@cindex @code{testbits.awk} program
@example
@group
@@ -20298,11 +20343,11 @@ $ @kbd{gawk -f testbits.awk}
@print{} rshift(0x99, 2) = 0x26 = 00100110
@end example
-@cindex converting, strings to numbers
-@cindex strings, converting
-@cindex numbers, converting
-@cindex converting, numbers to strings
-@cindex numbers, as string of bits
+@cindex converting @subentry string to numbers
+@cindex strings @subentry converting
+@cindex numbers @subentry converting
+@cindex converting @subentry numbers to strings
+@cindex numbers @subentry as string of bits
The @code{bits2str()} function turns a binary number into a string.
Initializing @code{mask} to one creates
a binary value where the rightmost bit
@@ -20325,7 +20370,7 @@ decimal and octal values for the same numbers
and then demonstrates the
results of the @code{compl()}, @code{lshift()}, and @code{rshift()} functions.
-@cindex sidebar, Beware The Smoke and Mirrors!
+@cindex sidebar @subentry Beware The Smoke and Mirrors!
@ifdocbook
@docbook
<sidebar><title>Beware The Smoke and Mirrors!</title>
@@ -20463,8 +20508,8 @@ that traverses every element of an array of arrays
Return a true value if @var{x} is an array. Otherwise, return false.
@cindexgawkfunc{typeof}
-@cindex variable type
-@cindex type, of variable
+@cindex variable type, @code{typeof()} function (@command{gawk})
+@cindex type @subentry of variable, @code{typeof()} function (@command{gawk})
@item typeof(@var{x})
Return one of the following strings, depending upon the type of @var{x}:
@@ -20548,11 +20593,11 @@ not change their arguments from untyped to unassigned.
@node I18N Functions
@subsection String-Translation Functions
-@cindex @command{gawk}, string-translation functions
-@cindex functions, string-translation
+@cindex @command{gawk} @subentry string-translation functions
+@cindex functions @subentry string-translation
@cindex string-translation functions
@cindex internationalization
-@cindex @command{awk} programs, internationalizing
+@cindex @command{awk} programs @subentry internationalizing
@command{gawk} provides facilities for internationalizing @command{awk}
programs.
These include the functions described in the following list.
@@ -20598,8 +20643,8 @@ The default value for @var{category} is
@code{"LC_MESSAGES"}.
@node User-defined
@section User-Defined Functions
-@cindex user-defined functions
-@cindex functions, user-defined
+@cindex user-defined @subentry functions
+@cindex functions @subentry user-defined
Complicated @command{awk} programs can often be simplified by defining
your own functions. User-defined functions can be called just like
built-in ones (@pxref{Function Calls}), but it is up to you to define
@@ -20623,7 +20668,7 @@ variable definitions is appallingly awful.}
@author Brian Kernighan
@end quotation
-@cindex functions, defining
+@cindex functions @subentry defining
Definitions of functions can appear anywhere between the rules of an
@command{awk} program. Thus, the general form of an @command{awk} program is
extended to include sequences of rules @emph{and} user-defined function
@@ -20643,9 +20688,9 @@ The definition of a function named @var{name} looks
like this:
@end group
@end display
-@cindex names, functions
-@cindex functions, names of
-@cindex namespace issues, functions
+@cindex names @subentry functions
+@cindex functions @subentry names of
+@cindex naming issues @subentry functions
@noindent
Here, @var{name} is the name of the function to define. A valid function
name is like a valid variable name: a sequence of letters, digits, and
@@ -20700,13 +20745,13 @@ arguments on some occasions and local variables on
others. Another
way to think of this is that omitted arguments default to the
null string.
-@cindex programming conventions, functions, writing
+@cindex programming conventions @subentry functions @subentry writing
Usually when you write a function, you know how many names you intend to
use for arguments and how many you intend to use as local variables. It is
conventional to place some extra space between the arguments and
the local variables, in order to document how your function is supposed to be
used.
-@cindex variables, shadowing
+@cindex variables @subentry shadowing
@cindex shadowing of variable values
During execution of the function body, the arguments and local variable
values hide, or @dfn{shadow}, any variables of the same names used in the
@@ -20721,7 +20766,7 @@ is executing. Once the body finishes, you can once
again access the
variables that were shadowed while the function was running.
@cindex recursive functions
-@cindex functions, recursive
+@cindex functions @subentry recursive
The function body can contain expressions that call functions. They
can even call this function, either directly or by way of another
function. When this happens, we say the function is @dfn{recursive}.
@@ -20733,11 +20778,11 @@ which is described in detail in @ref{Return
Statement}.
Many of the subsequent examples in this @value{SECTION} use
the @code{return} statement.
-@cindex common extensions, @code{func} keyword
-@cindex extensions, common@comma{} @code{func} keyword
-@c @cindex @command{awk} language, POSIX version
+@cindex common extensions @subentry @code{func} keyword
+@cindex extensions @subentry common @subentry @code{func} keyword
@c @cindex POSIX @command{awk}
-@cindex POSIX @command{awk}, @code{function} keyword in
+@cindex @command{awk} @subentry language, POSIX version
+@cindex POSIX @command{awk} @subentry @code{function} keyword in
In many @command{awk} implementations, including @command{gawk},
the keyword @code{function} may be
abbreviated @code{func}. @value{COMMONEXT}
@@ -20760,7 +20805,7 @@ syntactically valid, because functions may be used
before they are defined
in @command{awk} programs.@footnote{This program won't actually run,
because @code{foo()} is undefined.})
-@cindex portability, functions@comma{} defining
+@cindex portability @subentry functions, defining
To ensure that your @command{awk} programs are portable, always use the
keyword @code{function} when defining a function.
@@ -20835,6 +20880,7 @@ already empty:
@c 8/2014: Thanks to Mike Brennan for the improved formulation
@cindex @code{rev()} user-defined function
+@cindex user-defined @subentry function @subentry @code{rev()}
@example
function rev(str)
@{
@@ -20861,6 +20907,7 @@ The following example uses the built-in
@code{strftime()} function
to create an @command{awk} version of @code{ctime()}:
@cindex @code{ctime()} user-defined function
+@cindex user-defined @subentry function @subentry @code{ctime()}
@example
@c file eg/lib/ctime.awk
# ctime.awk
@@ -20886,7 +20933,7 @@ code could have changed @code{PROCINFO["strftime"]}.
@node Function Calling
@subsection Calling User-Defined Functions
-@cindex functions, user-defined, calling
+@cindex functions @subentry user-defined @subentry calling
@dfn{Calling a function} means causing the function to run and do its job.
A function call is an expression and its value is the value returned by
the function.
@@ -20924,8 +20971,8 @@ an error.
@node Variable Scope
@subsubsection Controlling Variable Scope
-@cindex local variables, in a function
-@cindex variables, local to a function
+@cindex local variables @subentry in a function
+@cindex variables @subentry local to a function
Unlike in many languages,
there is no way to make a variable local to a @code{@{} @dots{} @code{@}}
block in
@command{awk}, but you can make a variable local to a function. It is
@@ -21110,8 +21157,8 @@ cannot alter this outer value, because it is shadowed
during the
execution of @code{myfunc()} and cannot be seen or changed from there.
@cindex call by reference
-@cindex arrays, as parameters to functions
-@cindex functions, arrays as parameters to
+@cindex arrays @subentry as parameters to functions
+@cindex functions @subentry arrays as parameters to
However, when arrays are the parameters to functions, they are @emph{not}
copied. Instead, the array itself is made available for direct manipulation
by the function. This is usually termed @dfn{call by reference}.
@@ -21146,7 +21193,7 @@ prints @samp{a[1] = 1, a[2] = two, a[3] = 3}, because
@subsubsection Other Points About Calling Functions
@cindex undefined functions
-@cindex functions, undefined
+@cindex functions @subentry undefined
Some @command{awk} implementations allow you to call a function that
has not been defined. They only report a problem at runtime, when the
program actually tries to call the function. For example:
@@ -21167,12 +21214,12 @@ Because the @samp{if} statement will never be true,
it is not really a
problem that @code{foo()} has not been defined. Usually, though, it is a
problem if a program calls an undefined function.
-@cindex lint checking, undefined functions
+@cindex lint checking @subentry undefined functions
If @option{--lint} is specified
(@pxref{Options}),
@command{gawk} reports calls to undefined functions.
-@cindex portability, @code{next} statement in user-defined functions
+@cindex portability @subentry @code{next} statement in user-defined functions
Some @command{awk} implementations generate a runtime
error if you use either the @code{next} statement
or the @code{nextfile} statement
@@ -21218,7 +21265,7 @@ don't like the warning, fix your code! It's incorrect,
after all.)
@node Return Statement
@subsection The @code{return} Statement
-@cindex @code{return} statement@comma{} user-defined functions
+@cindex @code{return} statement, user-defined functions
As seen in several earlier examples,
the body of a user-defined function can contain a @code{return} statement.
@@ -21263,7 +21310,7 @@ function maxelt(vec, i, ret)
@}
@end example
-@cindex programming conventions, function parameters
+@cindex programming conventions @subentry function parameters
@noindent
You call @code{maxelt()} with one argument, which is an array name. The local
variables @code{i} and @code{ret} are not intended to be arguments;
@@ -21349,10 +21396,10 @@ being aware of them.
@section Indirect Function Calls
@cindex indirect function calls
-@cindex function calls, indirect
+@cindex function calls @subentry indirect
@cindex function pointers
@cindex pointers to functions
-@cindex differences in @command{awk} and @command{gawk}, indirect function
calls
+@cindex differences in @command{awk} and @command{gawk} @subentry indirect
function calls
This section describes an advanced, @command{gawk}-specific extension.
@@ -21404,9 +21451,10 @@ This style of programming works, but can be awkward.
With @dfn{indirect}
function calls, you tell @command{gawk} to use the @emph{value} of a
variable as the @emph{name} of the function to call.
-@cindex @code{@@}-notation for indirect function calls
-@cindex indirect function calls, @code{@@}-notation
-@cindex function calls, indirect, @code{@@}-notation for
+@cindex @code{@@} (at-sign) @subentry @code{@@}-notation for indirect function
calls
+@cindex at-sign (@code{@@}) @subentry @code{@@}-notation for indirect function
calls
+@cindex indirect function calls @subentry @code{@@}-notation
+@cindex function calls @subentry indirect @subentry @code{@@}-notation for
The syntax is similar to that of a regular function call: an identifier
immediately followed by an opening parenthesis, any arguments, and then
a closing parenthesis, with the addition of a leading @samp{@@}
@@ -21819,8 +21867,8 @@ It contains the following chapters:
@node Library Functions
@chapter A Library of @command{awk} Functions
@cindex libraries of @command{awk} functions
-@cindex functions, library
-@cindex functions, user-defined, library of
+@cindex functions @subentry library
+@cindex functions @subentry user-defined @subentry library of
@ref{User-defined} describes how to write
your own @command{awk} functions. Writing functions is important, because
@@ -21867,7 +21915,7 @@ and would like to contribute them to the @command{awk}
user community, see
@ref{How To Contribute}, for more information.
@end ifclear
-@cindex portability, example programs
+@cindex portability @subentry example programs
The programs in this @value{CHAPTER} and in
@ref{Sample Programs},
freely use @command{gawk}-specific features.
@@ -21887,8 +21935,8 @@ to skip any remaining input in the input file.
@item
@c 12/2000: Thanks to Nelson Beebe for pointing out the output issue.
-@cindex case sensitivity, example programs
-@cindex @code{IGNORECASE} variable, in example programs
+@cindex case sensitivity @subentry example programs
+@cindex @code{IGNORECASE} variable @subentry in example programs
Finally, some of the programs choose to ignore upper- and lowercase
distinctions in their input. They do so by assigning one to @code{IGNORECASE}.
You can achieve almost the same effect@footnote{The effects are
@@ -21925,19 +21973,19 @@ comparisons use only lowercase letters.
@node Library Names
@section Naming Library Function Global Variables
-@cindex names, arrays/variables
-@cindex names, functions
-@cindex namespace issues
-@cindex @command{awk} programs, documenting
-@cindex documentation, of @command{awk} programs
+@cindex names @subentry arrays/variables
+@cindex names @subentry functions
+@cindex naming issues
+@cindex @command{awk} programs @subentry documenting
+@cindex documentation @subentry of @command{awk} programs
Due to the way the @command{awk} language evolved, variables are either
@dfn{global} (usable by the entire program) or @dfn{local} (usable just by
a specific function). There is no intermediate state analogous to
@code{static} variables in C.
-@cindex variables, global, for library functions
+@cindex variables @subentry global @subentry for library functions
@cindex private variables
-@cindex variables, private
+@cindex variables @subentry private
Library functions often need to have global variables that they can use to
preserve state information between calls to the function---for example,
@code{getopt()}'s variable @code{_opti}
@@ -21951,15 +21999,15 @@ either another library function or a user's main
program. For example, a
name like @code{i} or @code{j} is not a good choice, because user programs
often use variable names like these for their own purposes.
-@cindex programming conventions, private variable names
+@cindex programming conventions @subentry private variable names
The example programs shown in this @value{CHAPTER} all start the names of their
private variables with an underscore (@samp{_}). Users generally don't use
leading underscores in their variable names, so this convention immediately
decreases the chances that the variable names will be accidentally shared
with the user's program.
-@cindex @code{_} (underscore), in names of private variables
-@cindex underscore (@code{_}), in names of private variables
+@cindex @code{_} (underscore) @subentry in names of private variables
+@cindex underscore (@code{_}) @subentry in names of private variables
In addition, several of the library functions use a prefix that helps
indicate what function or set of functions use the variables---for example,
@code{_pw_byname()} in the user database routines
@@ -21981,7 +22029,7 @@ The leading capital letter indicates that it is global,
while the fact that
the variable name is not all capital letters indicates that the variable is
not one of @command{awk}'s predefined variables, such as @code{FS}.
-@cindex @option{--dump-variables} option, using for library functions
+@cindex @option{--dump-variables} option @subentry using for library functions
It is also important that @emph{all} variables in library
functions that do not need to save state are, in fact, declared
local.@footnote{@command{gawk}'s @option{--dump-variables} command-line
@@ -21999,9 +22047,9 @@ function lib_func(x, y, l1, l2)
@}
@end example
-@cindex arrays, associative, library functions and
-@cindex libraries of @command{awk} functions, associative arrays and
-@cindex functions, library, associative arrays and
+@cindex arrays @subentry associative @subentry library functions and
+@cindex libraries of @command{awk} functions @subentry associative arrays and
+@cindex functions @subentry library @subentry associative arrays and
@cindex Tcl
A different convention, common in the Tcl community, is to use a single
associative array to hold the values needed by the library function(s), or
@@ -22149,9 +22197,10 @@ be tested with @command{gawk} and the results compared
to the built-in
@cindex assertions
@cindex @code{assert()} function (C library)
-@cindex libraries of @command{awk} functions, assertions
-@cindex functions, library, assertions
-@cindex @command{awk} programs, lengthy, assertions
+@cindex C library functions @subentry @code{assert()}
+@cindex libraries of @command{awk} functions @subentry assertions
+@cindex functions @subentry library @subentry assertions
+@cindex @command{awk} programs @subentry lengthy @subentry assertions
When writing large programs, it is often useful to know
that a condition or set of conditions is true. Before proceeding with a
particular computation, you make a statement about what you believe to be
@@ -22182,6 +22231,7 @@ prog.c:5: assertion failed: a <= 5 && b >= 17.1
@end example
@cindex @code{assert()} user-defined function
+@cindex user-defined @subentry function @subentry @code{assert()}
The C language makes it possible to turn the condition into a string for use
in printing the diagnostic message. This is not possible in @command{awk}, so
this @code{assert()} function also requires a string version of the condition
@@ -22253,7 +22303,7 @@ If the assertion fails, you see a message similar to
the following:
mydata:1357: assertion failed: a <= 5 && b >= 17.1
@end example
-@cindex @code{END} pattern, @code{assert()} user-defined function and
+@cindex @code{END} pattern @subentry @code{assert()} user-defined function and
There is a small problem with this version of @code{assert()}.
An @code{END} rule is automatically added
to the program calling @code{assert()}. Normally, if a program consists
@@ -22263,7 +22313,7 @@ attempts to read the input @value{DF}s or standard input
(@pxref{Using BEGIN/END}),
most likely causing the program to hang as it waits for input.
-@cindex @code{BEGIN} pattern, @code{assert()} user-defined function and
+@cindex @code{BEGIN} pattern @subentry @code{assert()} user-defined function
and
There is a simple workaround to this:
make sure that such a @code{BEGIN} rule always ends
with an @code{exit} statement.
@@ -22272,12 +22322,12 @@ with an @code{exit} statement.
@subsection Rounding Numbers
@cindex rounding numbers
-@cindex numbers, rounding
-@cindex libraries of @command{awk} functions, rounding numbers
-@cindex functions, library, rounding numbers
-@cindex @code{print} statement, @code{sprintf()} function and
-@cindex @code{printf} statement, @code{sprintf()} function and
-@cindex @code{sprintf()} function, @code{print}/@code{printf} statements and
+@cindex numbers @subentry rounding
+@cindex libraries of @command{awk} functions @subentry rounding numbers
+@cindex functions @subentry library @subentry rounding numbers
+@cindex @code{print} statement @subentry @code{sprintf()} function and
+@cindex @code{printf} statement @subentry @code{sprintf()} function and
+@cindex @code{sprintf()} function @subentry @code{print}/@code{printf}
statements and
The way @code{printf} and @code{sprintf()}
(@pxref{Printf})
perform rounding often depends upon the system's C @code{sprintf()}
@@ -22291,6 +22341,7 @@ traditional rounding; it might be useful if your
@command{awk}'s @code{printf}
does unbiased rounding:
@cindex @code{round()} user-defined function
+@cindex user-defined @subentry function @subentry @code{round()}
@example
@c file eg/lib/round.awk
# round.awk --- do normal rounding
@@ -22338,10 +22389,10 @@ function round(x, ival, aval, fraction)
@node Cliff Random Function
@subsection The Cliff Random Number Generator
-@cindex random numbers, Cliff
+@cindex random numbers @subentry Cliff
@cindex Cliff random numbers
-@cindex numbers, Cliff random
-@cindex functions, library, Cliff random numbers
+@cindex numbers @subentry Cliff random
+@cindex functions @subentry library @subentry Cliff random numbers
The
@uref{http://mathworld.wolfram.com/CliffRandomNumberGenerator.html, Cliff
random number generator}
@@ -22350,6 +22401,7 @@ for randomness by showing no structure.''
It is easily programmed, in less than 10 lines of @command{awk} code:
@cindex @code{cliff_rand()} user-defined function
+@cindex user-defined @subentry function @subentry @code{cliff_rand()}
@example
@c file eg/lib/cliff_rand.awk
# cliff_rand.awk --- generate Cliff random numbers
@@ -22384,10 +22436,10 @@ isn't random enough, you might try using this
function instead.
@node Ordinal Functions
@subsection Translating Between Characters and Numbers
-@cindex libraries of @command{awk} functions, character values as numbers
-@cindex functions, library, character values as numbers
-@cindex characters, values of as numbers
-@cindex numbers, as values of characters
+@cindex libraries of @command{awk} functions @subentry character values as
numbers
+@cindex functions @subentry library @subentry character values as numbers
+@cindex characters @subentry values of as numbers
+@cindex numbers @subentry as values of characters
One commercial implementation of @command{awk} supplies a built-in function,
@code{ord()}, which takes a character and returns the numeric value for that
character in the machine's character set. If the string passed to
@@ -22399,8 +22451,11 @@ Both functions are written very nicely in
@command{awk}; there is no real
reason to build them into the @command{awk} interpreter:
@cindex @code{ord()} user-defined function
+@cindex user-defined @subentry function @subentry @code{ord()}
@cindex @code{chr()} user-defined function
+@cindex user-defined @subentry function @subentry @code{chr()}
@cindex @code{_ord_init()} user-defined function
+@cindex user-defined @subentry function @subentry @code{_ord_init()}
@example
@c file eg/lib/ord.awk
# ord.awk --- do ord and chr
@@ -22509,10 +22564,10 @@ function. It is commented out for production use.
@node Join Function
@subsection Merging an Array into a String
-@cindex libraries of @command{awk} functions, merging arrays into strings
-@cindex functions, library, merging arrays into strings
-@cindex strings, merging arrays into
-@cindex arrays, merging into strings
+@cindex libraries of @command{awk} functions @subentry merging arrays into
strings
+@cindex functions @subentry library @subentry merging arrays into strings
+@cindex strings @subentry merging arrays into
+@cindex arrays @subentry merging into strings
When doing string processing, it is often useful to be able to join
all the strings in an array into one long string. The following function,
@code{join()}, accomplishes this task. It is used later in several of
@@ -22527,6 +22582,7 @@ assumption, as the array was likely created with
@code{split()}
(@pxref{String Functions}):
@cindex @code{join()} user-defined function
+@cindex user-defined @subentry function @subentry @code{join()}
@example
@c file eg/lib/join.awk
# join.awk --- join an array into a string
@@ -22569,10 +22625,10 @@ more difficult than they really need to be.}
@node Getlocaltime Function
@subsection Managing the Time of Day
-@cindex libraries of @command{awk} functions, managing, time
-@cindex functions, library, managing time
-@cindex timestamps, formatted
-@cindex time, managing
+@cindex libraries of @command{awk} functions @subentry managing @subentry time
+@cindex functions @subentry library @subentry managing time
+@cindex timestamps @subentry formatted
+@cindex time @subentry managing
The @code{systime()} and @code{strftime()} functions described in
@ref{Time Functions}
provide the minimum functionality necessary for dealing with the time of day
@@ -22585,6 +22641,7 @@ with preformatted time information. It returns a
string with the current
time formatted in the same way as the @command{date} utility:
@cindex @code{getlocaltime()} user-defined function
+@cindex user-defined @subentry function @subentry @code{getlocaltime()}
@example
@c file eg/lib/gettime.awk
# getlocaltime.awk --- get the time of day in a usable format
@@ -22696,6 +22753,7 @@ The following function, based on a suggestion by Denis
Shirokov,
reads the entire contents of the named file in one shot:
@cindex @code{readfile()} user-defined function
+@cindex user-defined @subentry function @subentry @code{readfile()}
@example
@c file eg/lib/readfile.awk
# readfile.awk --- read an entire file at once
@@ -22825,9 +22883,9 @@ function shell_quote(s, # parameter
@node Data File Management
@section @value{DDF} Management
-@cindex files, managing
-@cindex libraries of @command{awk} functions, managing, data files
-@cindex functions, library, managing data files
+@cindex files @subentry managing
+@cindex libraries of @command{awk} functions @subentry managing @subentry data
files
+@cindex functions @subentry library @subentry managing data files
This @value{SECTION} presents functions that are useful for managing
command-line @value{DF}s.
@@ -22842,8 +22900,8 @@ command-line @value{DF}s.
@node Filetrans Function
@subsection Noting @value{DDF} Boundaries
-@cindex files, managing, data file boundaries
-@cindex files, initialization and cleanup
+@cindex files @subentry managing @subentry data file boundaries
+@cindex files @subentry initialization and cleanup
The @code{BEGIN} and @code{END} rules are each executed exactly once, at
the beginning and end of your @command{awk} program, respectively
(@pxref{BEGIN/END}).
@@ -22908,7 +22966,9 @@ supplied in the ``main'' program, @code{endfile()} is
called first. Once
again, the value of multiple @code{BEGIN} and @code{END} rules should be clear.
@cindex @code{beginfile()} user-defined function
+@cindex user-defined @subentry function @subentry @code{beginfile()}
@cindex @code{endfile()} user-defined function
+@cindex user-defined @subentry function @subentry @code{endfile()}
If the same @value{DF} occurs twice in a row on the command line, then
@code{endfile()} and @code{beginfile()} are not executed at the end of the
first pass and at the beginning of the second pass.
@@ -22944,7 +23004,7 @@ END @{ endfile(_filename_) @}
shows how this library function can be used and
how it simplifies writing the main program.
-@cindex sidebar, So Why Does @command{gawk} Have @code{BEGINFILE} and
@code{ENDFILE}?
+@cindex sidebar @subentry So Why Does @command{gawk} Have @code{BEGINFILE} and
@code{ENDFILE}?
@ifdocbook
@docbook
<sidebar><title>So Why Does @command{gawk} Have @code{BEGINFILE} and
@code{ENDFILE}?</title>
@@ -22993,7 +23053,7 @@ For more information, refer to @ref{BEGINFILE/ENDFILE}.
@node Rewind Function
@subsection Rereading the Current File
-@cindex files, reading
+@cindex files @subentry reading
Another request for a new built-in function was for a
function that would make it possible to reread the current file.
The requesting user didn't want to have to use @code{getline}
@@ -23006,6 +23066,7 @@ and then start over with it from the top.
For lack of a better name, we'll call the function @code{rewind()}:
@cindex @code{rewind()} user-defined function
+@cindex user-defined @subentry function @subentry @code{rewind()}
@example
@c file eg/lib/rewind.awk
# rewind.awk --- rewind the current file and start over
@@ -23079,9 +23140,9 @@ $ @kbd{gawk -f rewind.awk -f test.awk data }
@node File Checking
@subsection Checking for Readable @value{DDF}s
-@cindex troubleshooting, readable data files
-@cindex readable data files@comma{} checking
-@cindex files, skipping
+@cindex troubleshooting @subentry readable data files
+@cindex readable data files, checking
+@cindex files @subentry skipping
Normally, if you give @command{awk} a @value{DF} that isn't readable,
it stops with a fatal error. There are times when you might want to
just ignore such files and keep going.@footnote{The @code{BEGINFILE}
@@ -23119,7 +23180,7 @@ BEGIN @{
@c endfile
@end example
-@cindex troubleshooting, @code{getline} function
+@cindex troubleshooting @subentry @code{getline} command
This works, because the @code{getline} won't be fatal.
Removing the element from @code{ARGV} with @code{delete}
skips the file (because it's no longer in the list).
@@ -23197,7 +23258,7 @@ not @samp{<}.
@subsection Treating Assignments as @value{FFN}s
@cindex assignments as file names
-@cindex file names, assignments as
+@cindex file names @subentry assignments as
Occasionally, you might not want @command{awk} to process command-line
variable assignments
(@pxref{Assignment Options}).
@@ -23256,12 +23317,12 @@ are left alone.
@node Getopt Function
@section Processing Command-Line Options
-@cindex libraries of @command{awk} functions, command-line options
-@cindex functions, library, command-line options
-@cindex command-line options, processing
-@cindex options, command-line, processing
-@cindex functions, library, C library
-@cindex arguments, processing
+@cindex libraries of @command{awk} functions @subentry command-line options
+@cindex functions @subentry library @subentry command-line options
+@cindex command line @subentry options @subentry processing
+@cindex options @subentry command-line @subentry processing
+@cindex functions @subentry library @subentry C library
+@cindex arguments @subentry processing
Most utilities on POSIX-compatible systems take options on
the command line that can be used to change the way a program behaves.
@command{awk} is an example of such a program
@@ -23273,6 +23334,7 @@ The first occurrence on the command line of either
@option{--} or a
string that does not begin with @samp{-} ends the options.
@cindex @code{getopt()} function (C library)
+@cindex C library functions @subentry @code{getopt()}
Modern Unix systems provide a C function named @code{getopt()} for processing
command-line arguments. The programmer provides a string describing the
one-letter options. If an option requires an argument, it is followed in the
@@ -23376,6 +23438,7 @@ We have left it alone, as using @code{substr()} is more
portable.}
The discussion that follows walks through the code a bit at a time:
@cindex @code{getopt()} user-defined function
+@cindex user-defined @subentry function @subentry @code{getopt()}
@example
@c file eg/lib/getopt.awk
# getopt.awk --- Do C library getopt(3) function in awk
@@ -23418,6 +23481,7 @@ a string of options (the @code{options} parameter). If
@code{options}
has a zero length, @code{getopt()} immediately returns @minus{}1:
@cindex @code{getopt()} user-defined function
+@cindex user-defined @subentry function @subentry @code{getopt()}
@example
@c file eg/lib/getopt.awk
function getopt(argc, argv, options, thisopt, i)
@@ -23615,10 +23679,10 @@ use @code{getopt()} to process their arguments.
@node Passwd Functions
@section Reading the User Database
-@cindex libraries of @command{awk} functions, user database, reading
-@cindex functions, library, user database@comma{} reading
-@cindex user database@comma{} reading
-@cindex database, users@comma{} reading
+@cindex libraries of @command{awk} functions @subentry user database, reading
+@cindex functions @subentry library @subentry user database, reading
+@cindex user database, reading
+@cindex database @subentry users, reading
@cindex @code{PROCINFO} array
The @code{PROCINFO} array
(@pxref{Built-in Variables})
@@ -23632,12 +23696,14 @@ user database. @xref{Group Functions}
for a similar suite that retrieves information from the group database.
@cindex @code{getpwent()} function (C library)
+@cindex C library functions @subentry @code{getpwent()}
@cindex @code{getpwent()} user-defined function
-@cindex users, information about, retrieving
+@cindex user-defined @subentry function @subentry @code{getpwent()}
+@cindex users, information about @subentry retrieving
@cindex login information
@cindex account information
@cindex password file
-@cindex files, password
+@cindex files @subentry password
The POSIX standard does not define the file where user information is
kept. Instead, it provides the @code{<pwd.h>} header file
and several C language subroutines for obtaining user information.
@@ -23765,8 +23831,8 @@ shell, such as Bash.
A few lines representative of @command{pwcat}'s output are as follows:
@cindex Jacobs, Andrew
-@cindex Robbins, Arnold
-@cindex Robbins, Miriam
+@cindex Robbins @subentry Arnold
+@cindex Robbins @subentry Miriam
@example
$ @kbd{pwcat}
@print{} root:x:0:1:Operator:/:/bin/sh
@@ -23785,6 +23851,7 @@ information. There are several functions here,
corresponding to the C
functions of the same names:
@cindex @code{_pw_init()} user-defined function
+@cindex user-defined @subentry function @subentry @code{_pw_init()}
@example
@c file eg/lib/passwdawk.in
# passwd.awk --- access password file information
@@ -23838,7 +23905,7 @@ function _pw_init( oldfs, oldrs, olddol0, pwcat,
using_fw, using_fpat)
@c endfile
@end example
-@cindex @code{BEGIN} pattern, @code{pwcat} program
+@cindex @code{BEGIN} pattern @subentry @code{pwcat} program
The @code{BEGIN} rule sets a private variable to the directory where
@command{pwcat} is stored. Because it is used to help out an @command{awk}
library
routine, we have chosen to put it in @file{/usr/local/libexec/awk};
@@ -23851,8 +23918,8 @@ occurrence (@code{_pw_bycount}).
The variable @code{_pw_inited} is used for efficiency, as @code{_pw_init()}
needs to be called only once.
-@cindex @code{PROCINFO} array, testing the field splitting
-@cindex @code{getline} command, @code{_pw_init()} function
+@cindex @code{PROCINFO} array @subentry testing the field splitting
+@cindex @code{getline} command @subentry @code{_pw_init()} function
Because this function uses @code{getline} to read information from
@command{pwcat}, it first saves the values of @code{FS}, @code{RS}, and
@code{$0}.
It notes in the variable @code{using_fw} whether field splitting
@@ -23877,12 +23944,14 @@ if necessary), @code{RS}, and @code{$0}.
The use of @code{@w{_pw_count}} is explained shortly.
@cindex @code{getpwnam()} function (C library)
+@cindex C library functions @subentry @code{getpwnam()}
The @code{getpwnam()} function takes a username as a string argument. If that
user is in the database, it returns the appropriate line. Otherwise, it
relies on the array reference to a nonexistent
element to create the element with the null string as its value:
@cindex @code{getpwnam()} user-defined function
+@cindex user-defined @subentry function @subentry @code{getpwnam()}
@example
@group
@c file eg/lib/passwdawk.in
@@ -23896,11 +23965,13 @@ function getpwnam(name)
@end example
@cindex @code{getpwuid()} function (C library)
+@cindex C library functions @subentry @code{getpwuid()}
Similarly, the @code{getpwuid()} function takes a user ID number
argument. If that user number is in the database, it returns the
appropriate line. Otherwise, it returns the null string:
@cindex @code{getpwuid()} user-defined function
+@cindex user-defined @subentry function @subentry @code{getpwuid()}
@example
@c file eg/lib/passwdawk.in
function getpwuid(uid)
@@ -23912,11 +23983,13 @@ function getpwuid(uid)
@end example
@cindex @code{getpwent()} function (C library)
+@cindex C library functions @subentry @code{getpwent()}
The @code{getpwent()} function simply steps through the database, one entry at
a time. It uses @code{_pw_count} to track its current position in the
@code{_pw_bycount} array:
@cindex @code{getpwent()} user-defined function
+@cindex user-defined @subentry function @subentry @code{getpwent()}
@example
@c file eg/lib/passwdawk.in
function getpwent()
@@ -23930,10 +24003,12 @@ function getpwent()
@end example
@cindex @code{endpwent()} function (C library)
+@cindex C library functions @subentry @code{endpwent()}
The @code{@w{endpwent()}} function resets @code{@w{_pw_count}} to zero, so that
subsequent calls to @code{getpwent()} start over again:
@cindex @code{endpwent()} user-defined function
+@cindex user-defined @subentry function @subentry @code{endpwent()}
@example
@c file eg/lib/passwdawk.in
function endpwent()
@@ -23968,17 +24043,19 @@ uses these functions.
@node Group Functions
@section Reading the Group Database
-@cindex libraries of @command{awk} functions, group database, reading
-@cindex functions, library, group database@comma{} reading
+@cindex libraries of @command{awk} functions @subentry group database, reading
+@cindex functions @subentry library @subentry group database, reading
@cindex group database, reading
-@cindex database, group, reading
-@cindex @code{PROCINFO} array, group membership and
+@cindex database @subentry group, reading
+@cindex @code{PROCINFO} array @subentry group membership and
@cindex @code{getgrent()} function (C library)
+@cindex C library functions @subentry @code{getgrent()}
@cindex @code{getgrent()} user-defined function
-@cindex groups@comma{} information about
+@cindex user-defined @subentry function @subentry @code{getgrent()}
+@cindex groups, information about
@cindex account information
@cindex group file
-@cindex files, group
+@cindex files @subentry group
Much of the discussion presented in
@ref{Passwd Functions}
applies to the group database as well. Although there has traditionally
@@ -24114,8 +24191,9 @@ $ @kbd{grcat}
Here are the functions for obtaining information from the group database.
There are several, modeled after the C library functions of the same names:
-@cindex @code{getline} command, @code{_gr_init()} user-defined function
+@cindex @code{getline} command @subentry @code{_gr_init()} user-defined
function
@cindex @code{_gr_init()} user-defined function
+@cindex user-defined @subentry function @subentry @code{_gr_init()}
@example
@c file eg/lib/groupawk.in
# group.awk --- functions for dealing with the group file
@@ -24229,6 +24307,7 @@ initializes @code{_gr_count} to zero
(it is used later), and makes @code{_gr_inited} nonzero.
@cindex @code{getgrnam()} function (C library)
+@cindex C library functions @subentry @code{getgrnam()}
The @code{getgrnam()} function takes a group name as its argument, and if that
group exists, it is returned.
Otherwise, it
@@ -24236,6 +24315,7 @@ relies on the array reference to a nonexistent
element to create the element with the null string as its value:
@cindex @code{getgrnam()} user-defined function
+@cindex user-defined @subentry function @subentry @code{getgrnam()}
@example
@c file eg/lib/groupawk.in
function getgrnam(group)
@@ -24247,10 +24327,12 @@ function getgrnam(group)
@end example
@cindex @code{getgrgid()} function (C library)
+@cindex C library functions @subentry @code{getgrgid()}
The @code{getgrgid()} function is similar; it takes a numeric group ID and
looks up the information associated with that group ID:
@cindex @code{getgrgid()} user-defined function
+@cindex user-defined @subentry function @subentry @code{getgrgid()}
@example
@c file eg/lib/groupawk.in
function getgrgid(gid)
@@ -24262,10 +24344,12 @@ function getgrgid(gid)
@end example
@cindex @code{getgruser()} function (C library)
+@cindex C library functions @subentry @code{getgruser()}
The @code{getgruser()} function does not have a C counterpart. It takes a
username and returns the list of groups that have the user as a member:
-@cindex @code{getgruser()} function, user-defined
+@cindex @code{getgruser()} user-defined function
+@cindex user-defined @subentry function @subentry @code{getgruser()}
@example
@c file eg/lib/groupawk.in
function getgruser(user)
@@ -24277,10 +24361,12 @@ function getgruser(user)
@end example
@cindex @code{getgrent()} function (C library)
+@cindex C library functions @subentry @code{getgrent()}
The @code{getgrent()} function steps through the database one entry at a time.
It uses @code{_gr_count} to track its position in the list:
@cindex @code{getgrent()} user-defined function
+@cindex user-defined @subentry function @subentry @code{getgrent()}
@example
@c file eg/lib/groupawk.in
function getgrent()
@@ -24296,10 +24382,12 @@ function getgrent()
@end example
@cindex @code{endgrent()} function (C library)
+@cindex C library functions @subentry @code{endgrent()}
The @code{endgrent()} function resets @code{_gr_count} to zero so that
@code{getgrent()} can
start over again:
@cindex @code{endgrent()} user-defined function
+@cindex user-defined @subentry function @subentry @code{endgrent()}
@example
@c file eg/lib/groupawk.in
function endgrent()
@@ -24336,6 +24424,7 @@ You call it with the array and a string representing
the name
of the array:
@cindex @code{walk_array()} user-defined function
+@cindex user-defined @subentry function @subentry @code{walk_array()}
@example
@c file eg/lib/walkarray.awk
function walk_array(arr, name, i)
@@ -24561,7 +24650,7 @@ output identical to that of the original version.
@node Sample Programs
@chapter Practical @command{awk} Programs
-@cindex @command{awk} programs, examples of
+@cindex @command{awk} programs @subentry examples of
@c FULLXREF ON
@ref{Library Functions},
@@ -24630,7 +24719,7 @@ cut.awk -- -c1-8 myfiles > results
@node Clones
@section Reinventing Wheels for Fun and Profit
-@cindex POSIX, programs@comma{} implementing in @command{awk}
+@cindex POSIX @subentry programs, implementing in @command{awk}
This @value{SECTION} presents a number of POSIX utilities implemented in
@command{awk}. Reinventing these programs in @command{awk} is often enjoyable,
@@ -24661,8 +24750,8 @@ The programs are presented in alphabetical order.
@cindex @command{cut} utility
@cindex @command{cut} utility
-@cindex fields, cutting
-@cindex columns, cutting
+@cindex fields @subentry cutting
+@cindex columns @subentry cutting
The @command{cut} utility selects, or ``cuts,'' characters or fields
from its standard input and sends them to its standard output.
Fields are separated by TABs by default,
@@ -24742,8 +24831,8 @@ function usage()
@c endfile
@end example
-@cindex @code{BEGIN} pattern, running @command{awk} programs and
-@cindex @code{FS} variable, running @command{awk} programs and
+@cindex @code{BEGIN} pattern @subentry running @command{awk} programs and
+@cindex @code{FS} variable @subentry running @command{awk} programs and
Next comes a @code{BEGIN} rule that parses the command-line options.
It sets @code{FS} to a single TAB character, because that is @command{cut}'s
default field separator. The rule then sets the output field separator to be
the
@@ -24789,7 +24878,7 @@ BEGIN @{
@c endfile
@end example
-@cindex field separators, spaces as
+@cindex field separator @subentry spaces as
The code must take
special care when the field delimiter is a space. Using
a single space (@code{@w{" "}}) for the value of @code{FS} is
@@ -24981,9 +25070,9 @@ of picking the input line apart by characters.
@node Egrep Program
@subsection Searching for Regular Expressions in Files
-@cindex regular expressions, searching for
-@cindex searching, files for regular expressions
-@cindex files, searching for regular expressions
+@cindex regular expressions @subentry searching for
+@cindex searching @subentry files for regular expressions
+@cindex files @subentry searching for regular expressions
@cindex @command{egrep} utility
The @command{egrep} utility searches files for patterns. It uses regular
expressions that are almost identical to those available in @command{awk}
@@ -25196,8 +25285,8 @@ print the @value{FN}, and then skip to the next file
with @code{nextfile}.
Finally, each line is printed, with a leading @value{FN} and colon
if necessary:
-@cindex @code{!} (exclamation point), @code{!} operator
-@cindex exclamation point (@code{!}), @code{!} operator
+@cindex @code{!} (exclamation point) @subentry @code{!} operator
+@cindex exclamation point (@code{!}) @subentry @code{!} operator
@example
@c file eg/prog/egrep.awk
@{
@@ -25257,8 +25346,8 @@ function usage()
@node Id Program
@subsection Printing Out User Information
-@cindex printing, user information
-@cindex users, information about, printing
+@cindex printing @subentry user information
+@cindex users, information about @subentry printing
@cindex @command{id} utility
The @command{id} utility lists a user's real and effective user ID numbers,
real and effective group ID numbers, and the user's group set, if any.
@@ -25271,7 +25360,7 @@ $ @kbd{id}
@print{} uid=1000(arnold) gid=1000(arnold)
groups=1000(arnold),4(adm),7(lp),27(sudo)
@end example
-@cindex @code{PROCINFO} array, user and group ID numbers and
+@cindex @code{PROCINFO} array @subentry user and group ID numbers and
This information is part of what is provided by @command{gawk}'s
@code{PROCINFO} array (@pxref{Built-in Variables}).
However, the @command{id} utility provides a more palatable output than just
@@ -25398,7 +25487,7 @@ the empty string into this function saves several lines
of code.
@c FIXME: One day, update to current POSIX version of split
-@cindex files, splitting
+@cindex files @subentry splitting
@cindex @code{split} utility
The @command{split} program splits large text files into smaller pieces.
Usage is as follows:@footnote{This is the traditional usage. The
@@ -25540,8 +25629,8 @@ way as to solve the EBCDIC issue as well.
@node Tee Program
@subsection Duplicating Output into Multiple Files
-@cindex files, multiple@comma{} duplicating output into
-@cindex output, duplicating into files
+@cindex files @subentry multiple, duplicating output into
+@cindex output @subentry duplicating into files
@cindex @code{tee} utility
The @code{tee} program is known as a ``pipe fitting.'' @code{tee} copies
its standard input to its standard output and also duplicates it to the
@@ -25664,8 +25753,8 @@ END @{
@c FIXME: One day, update to current POSIX version of uniq
-@cindex printing, unduplicated lines of text
-@cindex text@comma{} printing, unduplicated lines of
+@cindex printing @subentry unduplicated lines of text
+@cindex text, printing @subentry unduplicated lines of
@cindex @command{uniq} utility
The @command{uniq} utility reads sorted lines of data on its standard
input, and by default removes duplicate lines. In other words, it only
@@ -25945,11 +26034,11 @@ suggestion.
@c FIXME: One day, update to current POSIX version of wc
-@cindex counting
-@cindex input files, counting elements in
-@cindex words, counting
-@cindex characters, counting
-@cindex lines, counting
+@cindex counting words, lines, and characters
+@cindex input files @subentry counting elements in
+@cindex words @subentry counting
+@cindex characters @subentry counting
+@cindex lines @subentry counting
@cindex @command{wc} utility
The @command{wc} (word count) utility counts lines, words, and characters in
one or more input files. Its usage is as follows:
@@ -26147,9 +26236,9 @@ We hope you find them both interesting and enjoyable.
@node Dupword Program
@subsection Finding Duplicated Words in a Document
-@cindex words, duplicate@comma{} searching for
-@cindex searching, for words
-@cindex documents@comma{} searching
+@cindex words @subentry duplicate, searching for
+@cindex searching @subentry for words
+@cindex documents, searching
A common error when writing large amounts of prose is to accidentally
duplicate words. Typically you will see this in text as something like ``the
the program does the following@dots{}'' When the text is online, often
@@ -26217,7 +26306,7 @@ word, comparing it to the previous one:
@node Alarm Program
@subsection An Alarm Clock Program
@cindex insomnia, cure for
-@cindex Robbins, Arnold
+@cindex Robbins @subentry Arnold
@quotation
@i{Nothing cures insomnia like a ringing alarm clock.}
@author Arnold Robbins
@@ -26249,7 +26338,7 @@ Aharon Robbins <address@hidden> wrote:
@author Erik Quanstrom
@end quotation
-@cindex time, alarm clock example program
+@cindex time @subentry alarm clock example program
@cindex alarm clock example program
The following program is a simple ``alarm clock'' program.
You give it a time of day and an optional message. At the specified time,
@@ -26260,6 +26349,7 @@ repetitions.
This program uses the @code{getlocaltime()} function from
@ref{Getlocaltime Function}.
+@cindex ASCII
All the work is done in the @code{BEGIN} rule. The first part is argument
checking and setting of defaults: the delay, the count, and the message to
print. If the user supplied a message without the ASCII BEL
@@ -26405,7 +26495,7 @@ seconds are necessary:
@node Translate Program
@subsection Transliterating Characters
-@cindex characters, transliterating
+@cindex characters @subentry transliterating
@cindex @command{tr} utility
The system @command{tr} utility transliterates characters. For example, it is
often used to map uppercase letters into lowercase for further processing:
@@ -26557,8 +26647,8 @@ for inspiration.
@node Labels Program
@subsection Printing Mailing Labels
-@cindex printing, mailing labels
-@cindex mailing labels@comma{} printing
+@cindex printing @subentry mailing labels
+@cindex mailing labels, printing
Here is a ``real-world''@footnote{``Real world'' is defined as
``a program actually used to get something done.''}
program. This
@@ -26689,7 +26779,7 @@ END @{
@node Word Sorting
@subsection Generating Word-Usage Counts
-@cindex words, usage counts@comma{} generating
+@cindex words @subentry usage counts, generating
When working with large amounts of text, it can be interesting to know
how often different words appear. For example, an author may overuse
@@ -26820,7 +26910,7 @@ to use the @command{sort} program.
@node History Sorting
@subsection Removing Duplicates from Unsorted Text
-@cindex lines, duplicate@comma{} removing
+@cindex lines @subentry duplicate, removing
The @command{uniq} program
(@pxref{Uniq Program})
removes duplicate lines from @emph{sorted} data.
@@ -26890,8 +26980,8 @@ seen.
@node Extract Program
@subsection Extracting Programs from Texinfo Source Files
-@cindex Texinfo, extracting programs from source files
-@cindex files, Texinfo@comma{} extracting programs from
+@cindex Texinfo @subentry extracting programs from source files
+@cindex files @subentry Texinfo, extracting programs from
@ifnotinfo
Both this chapter and the previous chapter
(@ref{Library Functions})
@@ -27267,8 +27357,8 @@ value of @code{RT}.
@node Igawk Program
@subsection An Easy Way to Use Library Functions
-@cindex libraries of @command{awk} functions, example program for using
-@cindex functions, library, example program for using
+@cindex libraries of @command{awk} functions @subentry example program for
using
+@cindex functions @subentry library @subentry example program for using
In @ref{Include Files}, we saw how @command{gawk} provides a built-in
file-inclusion capability. However, this is a @command{gawk} extension.
This @value{SECTION} provides the motivation for making file inclusion
@@ -28100,10 +28190,10 @@ things considerably. What problem does this engender
though?
@c answer, reading from "-" or /dev/stdin
@cindex search paths
-@cindex search paths, for source files
-@cindex source files@comma{} search path for
-@cindex files, source@comma{} search path for
-@cindex directories, searching
+@cindex search paths @subentry for source files
+@cindex source files, search path for
+@cindex files @subentry source, search path for
+@cindex directories @subentry searching @subentry for source files
@item
As an additional example of the idea that it is not always necessary to
add new features to a program, consider the idea of having two files in
@@ -28169,8 +28259,8 @@ It contains the following chapters:
@node Advanced Features
@chapter Advanced Features of @command{gawk}
-@cindex @command{gawk}, features, advanced
-@cindex advanced features, @command{gawk}
+@cindex @command{gawk} @subentry features @subentry advanced
+@cindex advanced features @subentry @command{gawk}
@ignore
Contributed by: Peter Langston <pud!address@hidden>
@@ -28238,9 +28328,9 @@ discusses the ability to dynamically add new built-in
functions to
@node Nondecimal Data
@section Allowing Nondecimal Input Data
@cindex @option{--non-decimal-data} option
-@cindex advanced features, nondecimal input data
-@cindex input, data@comma{} nondecimal
-@cindex constants, nondecimal
+@cindex advanced features @subentry nondecimal input data
+@cindex input @subentry data, nondecimal
+@cindex constants @subentry nondecimal
If you run @command{gawk} with the @option{--non-decimal-data} option,
you can have nondecimal values in your input data:
@@ -28278,9 +28368,9 @@ Because it is common to have decimal data with leading
zeros, and because
using this facility could lead to surprising results, the default is to leave
it
disabled. If you want it, you must explicitly request it.
-@cindex programming conventions, @code{--non-decimal-data} option
-@cindex @option{--non-decimal-data} option, @code{strtonum()} function and
-@cindex @code{strtonum()} function (@command{gawk}), @code{--non-decimal-data}
option and
+@cindex programming conventions @subentry @code{--non-decimal-data} option
+@cindex @option{--non-decimal-data} option @subentry @code{strtonum()}
function and
+@cindex @code{strtonum()} function (@command{gawk}) @subentry
@code{--non-decimal-data} option and
@quotation CAUTION
@emph{Use of this option is not recommended.}
It can break old programs very badly.
@@ -28571,6 +28661,7 @@ function should use the @code{isarray()} function
(@pxref{Type Functions})
to check for this, and choose a defined sorting order for subarrays.
+@cindex POSIX mode
All sorting based on @code{PROCINFO["sorted_in"]}
is disabled in POSIX mode,
because the @code{PROCINFO} array is not special in that case.
@@ -28587,11 +28678,14 @@ sorted array traversal is not the default.
@node Array Sorting Functions
@subsection Sorting Array Values and Indices with @command{gawk}
-@cindex arrays, sorting
+@cindex arrays @subentry sorting @subentry @code{asort()} function
(@command{gawk})
+@cindex arrays @subentry sorting @subentry @code{asorti()} function
(@command{gawk})
@cindexgawkfunc{asort}
-@cindex @code{asort()} function (@command{gawk}), arrays@comma{} sorting
+@cindex @code{asort()} function (@command{gawk}) @subentry arrays, sorting
+@cindex @code{asort()} function (@command{gawk}) @subentry side effects
@cindexgawkfunc{asorti}
-@cindex @code{asorti()} function (@command{gawk}), arrays@comma{} sorting
+@cindex @code{asorti()} function (@command{gawk}) @subentry arrays, sorting
+@cindex @code{asorti()} function (@command{gawk}) @subentry side effects
@cindex sort function, arrays, sorting
In most @command{awk} implementations, sorting an array requires writing
a @code{sort()} function. This can be educational for exploring
@@ -28615,7 +28709,8 @@ The default comparison is based on the type of the
elements
All numeric values come before all string values,
which in turn come before all subarrays.
-@cindex side effects, @code{asort()} function
+@cindex side effects @subentry @code{asort()} function
+@cindex side effects @subentry @code{asorti()} function
An important side effect of calling @code{asort()} is that
@emph{the array's original indices are irrevocably lost}.
As this isn't always desirable, @code{asort()} accepts a
@@ -28684,9 +28779,9 @@ both arrays use the values.
@end quotation
@c Document It And Call It A Feature. Sigh.
-@cindex @command{gawk}, @code{IGNORECASE} variable in
-@cindex arrays, sorting, @code{IGNORECASE} variable and
-@cindex @code{IGNORECASE} variable, array sorting functions and
+@cindex @command{gawk} @subentry @code{IGNORECASE} variable in
+@cindex arrays @subentry sorting @subentry @code{IGNORECASE} variable and
+@cindex @code{IGNORECASE} variable @subentry array sorting functions and
Because @code{IGNORECASE} affects string comparisons, the value
of @code{IGNORECASE} also affects sorting for both @code{asort()} and
@code{asorti()}.
Note also that the locale's sorting order does @emph{not}
@@ -28785,7 +28880,7 @@ Mike Brennan
@end smallexample
@end ignore
-@cindex advanced features, processes@comma{} communicating with
+@cindex advanced features @subentry processes, communicating with
@cindex processes, two-way communications with
It is often useful to be able to
send data to a separate program for
@@ -28816,10 +28911,10 @@ Brennan suggests the use of @command{rand()} to
generate unique
remain more difficult to use than two-way pipes.} @c 8/2014
@cindex coprocesses
-@cindex input/output, two-way
-@cindex @code{|} (vertical bar), @code{|&} operator (I/O)
-@cindex vertical bar (@code{|}), @code{|&} operator (I/O)
-@cindex @command{csh} utility, @code{|&} operator, comparison with
+@cindex input/output @subentry two-way
+@cindex @code{|} (vertical bar) @subentry @code{|&} operator (I/O)
+@cindex vertical bar (@code{|}) @subentry @code{|&} operator (I/O)
+@cindex @command{csh} utility @subentry @code{|&} operator, comparison with
However, with @command{gawk}, it is possible to
open a @emph{two-way} pipe to another process. The second process is
termed a @dfn{coprocess}, as it runs in parallel with @command{gawk}.
@@ -28855,8 +28950,8 @@ standard error goes. It is not possible to read the
child's
standard error separately.
@cindex deadlocks
-@cindex buffering, input/output
-@cindex @code{getline} command, deadlock and
+@cindex buffering @subentry input/output
+@cindex @code{getline} command @subentry deadlock and
@item
I/O buffering may be a problem. @command{gawk} automatically
flushes all output down the pipe to the coprocess.
@@ -28867,7 +28962,7 @@ known as @dfn{deadlock}, where each process is waiting
for the
other one to do something.
@end itemize
-@cindex @code{close()} function, two-way pipes and
+@cindex @code{close()} function @subentry two-way pipes and
It is possible to close just one end of the two-way pipe to
a coprocess, by supplying a second argument to the @code{close()}
function of either @code{"to"} or @code{"from"}
@@ -28876,7 +28971,7 @@ These strings tell @command{gawk} to close the end of
the pipe
that sends data to the coprocess or the end that reads from it,
respectively.
-@cindex @command{sort} utility, coprocesses and
+@cindex @command{sort} utility @subentry coprocesses and
This is particularly necessary in order to use
the system @command{sort} utility as part of a coprocess;
@command{sort} must read @emph{all} of its input
@@ -28911,6 +29006,7 @@ indication. This causes @command{sort} to sort the
data and write the
sorted data back to the @command{gawk} program. Once all of the data
has been read, @command{gawk} terminates the coprocess and exits.
+@cindex ASCII
As a side note, the assignment @samp{LC_ALL=C} in the @command{sort}
command ensures traditional Unix (ASCII) sorting from @command{sort}.
This is not strictly necessary here, but it's good to know how to do this.
@@ -28933,8 +29029,8 @@ or @code{getline}.
@xref{Nonfatal}, for more information.
@end quotation
-@cindex @command{gawk}, @code{PROCINFO} array in
-@cindex @code{PROCINFO} array, communications via ptys and
+@cindex @command{gawk} @subentry @code{PROCINFO} array in
+@cindex @code{PROCINFO} array @subentry communications via ptys and
You may also use pseudo-ttys (ptys) for
two-way communication instead of pipes, if your system supports them.
This is done on a per-command basis, by setting a special element
@@ -29021,15 +29117,15 @@ And now, magically, it works!
@node TCP/IP Networking
@section Using @command{gawk} for Network Programming
-@cindex advanced features, network programming
-@cindex networks, programming
+@cindex advanced features @subentry network programming
+@cindex networks @subentry programming
@cindex TCP/IP
@cindex @code{/inet/@dots{}} special files (@command{gawk})
-@cindex files, @code{/inet/@dots{}} (@command{gawk})
+@cindex files @subentry @code{/inet/@dots{}} (@command{gawk})
@cindex @code{/inet4/@dots{}} special files (@command{gawk})
-@cindex files, @code{/inet4/@dots{}} (@command{gawk})
+@cindex files @subentry @code{/inet4/@dots{}} (@command{gawk})
@cindex @code{/inet6/@dots{}} special files (@command{gawk})
-@cindex files, @code{/inet6/@dots{}} (@command{gawk})
+@cindex files @subentry @code{/inet6/@dots{}} (@command{gawk})
@cindex @code{EMRED}
@ifnotdocbook
@quotation
@@ -29084,6 +29180,7 @@ respectively. TCP should be used for most applications.
@item local-port
@cindex @code{getaddrinfo()} function (C library)
+@cindex C library functions @subentry @code{getaddrinfo()}
The local TCP or UDP port number to use. Use a port number of @samp{0}
when you want the system to pick a port. This is what you should do
when writing a TCP or UDP client.
@@ -29101,7 +29198,7 @@ Again, use @samp{0} if you don't care, or else a
well-known
service name.
@end table
-@cindex @command{gawk}, @code{ERRNO} variable in
+@cindex @command{gawk} @subentry @code{ERRNO} variable in
@cindex @code{ERRNO} variable
@quotation NOTE
Failure in opening a two-way socket will result in a nonfatal error
@@ -29148,10 +29245,10 @@ no way to access services available over Secure
Socket Layer
@node Profiling
@section Profiling Your @command{awk} Programs
-@cindex @command{awk} programs, profiling
+@cindex @command{awk} programs @subentry profiling
@cindex profiling @command{awk} programs
@cindex @code{awkprof.out} file
-@cindex files, @code{awkprof.out}
+@cindex files @subentry @code{awkprof.out}
You may produce execution traces of your @command{awk} programs.
This is done by passing the option @option{--profile} to @command{gawk}.
@@ -29219,8 +29316,8 @@ Here is the @file{awkprof.out} that results from
running the
illustrates that @command{awk} programmers sometimes get up very early
in the morning to work):
-@cindex @code{BEGIN} pattern, profiling and
-@cindex @code{END} pattern, profiling and
+@cindex @code{BEGIN} pattern @subentry profiling and
+@cindex @code{END} pattern @subentry profiling and
@example
# gawk profile, created Mon Sep 29 05:16:21 2014
@@ -29284,7 +29381,7 @@ Multiple @code{BEGIN} and @code{END} rules retain their
separate identities, as do
multiple @code{BEGINFILE} and @code{ENDFILE} rules.
-@cindex patterns, counts, in a profile
+@cindex patterns @subentry counts, in a profile
@item
Pattern--action rules have two counts.
The first count, to the left of the rule, shows how many times
@@ -29304,7 +29401,7 @@ is a count showing how many times the condition was
true.
The count for the @code{else}
indicates how many times the test failed.
-@cindex loops, count for header, in a profile
+@cindex loops @subentry count for header, in a profile
@item
The count for a loop header (such as @code{for}
or @code{while}) shows how many times the loop test was executed.
@@ -29312,8 +29409,8 @@ or @code{while}) shows how many times the loop test was
executed.
statement in a rule to determine how many times the rule was executed.
If the first statement is a loop, the count is misleading.)
-@cindex functions, user-defined, counts@comma{} in a profile
-@cindex user-defined, functions, counts@comma{} in a profile
+@cindex functions @subentry user-defined @subentry counts, in a profile
+@cindex user-defined @subentry functions @subentry counts, in a profile
@item
For user-defined functions, the count next to the @code{function}
keyword indicates how many times the function was called.
@@ -29327,8 +29424,8 @@ The layout uses ``K&R'' style with TABs.
Braces are used everywhere, even when
the body of an @code{if}, @code{else}, or loop is only a single statement.
-@cindex @code{()} (parentheses), in a profile
-@cindex parentheses @code{()}, in a profile
+@cindex @code{()} (parentheses) @subentry in a profile
+@cindex parentheses @code{()} @subentry in a profile
@item
Parentheses are used only where needed, as indicated by the structure
of the program and the precedence rules.
@@ -29383,8 +29480,9 @@ which is correct, but possibly unexpected.
(If a program uses both @samp{print $0} and plain
@samp{print}, that distinction is retained.)
-@cindex profiling @command{awk} programs, dynamically
-@cindex @command{gawk} program, dynamic profiling
+@cindex profiling @command{awk} programs @subentry dynamically
+@cindex @command{gawk} @subentry dynamic profiling
+@cindex @command{gawk} @subentry profiling programs
@cindex dynamic profiling
Besides creating profiles when a program has completed,
@command{gawk} can produce a profile while it is running.
@@ -29398,10 +29496,10 @@ $ @kbd{gawk --profile -f myprog &}
[1] 13992
@end example
-@cindex @command{kill} command@comma{} dynamic profiling
+@cindex @command{kill} command, dynamic profiling
@cindex @code{USR1} signal, for dynamic profiling
@cindex @code{SIGUSR1} signal, for dynamic profiling
-@cindex signals, @code{USR1}/@code{SIGUSR1}, for profiling
+@cindex signals @subentry @code{USR1}/@code{SIGUSR1}, for profiling
@noindent
The shell prints a job number and process ID number; in this case, 13992.
Use the @command{kill} command to send the @code{USR1} signal
@@ -29434,16 +29532,16 @@ profile file.
@cindex @code{HUP} signal, for dynamic profiling
@cindex @code{SIGHUP} signal, for dynamic profiling
-@cindex signals, @code{HUP}/@code{SIGHUP}, for profiling
+@cindex signals @subentry @code{HUP}/@code{SIGHUP}, for profiling
If you use the @code{HUP} signal instead of the @code{USR1} signal,
@command{gawk} produces the profile and the function call trace and then exits.
@cindex @code{INT} signal (MS-Windows)
@cindex @code{SIGINT} signal (MS-Windows)
-@cindex signals, @code{INT}/@code{SIGINT} (MS-Windows)
+@cindex signals @subentry @code{INT}/@code{SIGINT} (MS-Windows)
@cindex @code{QUIT} signal (MS-Windows)
@cindex @code{SIGQUIT} signal (MS-Windows)
-@cindex signals, @code{QUIT}/@code{SIGQUIT} (MS-Windows)
+@cindex signals @subentry @code{QUIT}/@code{SIGQUIT} (MS-Windows)
When @command{gawk} runs on MS-Windows systems, it uses the
@code{INT} and @code{QUIT} signals for producing the profile, and in
the case of the @code{INT} signal, @command{gawk} exits. This is
@@ -29463,8 +29561,8 @@ Once upon a time, the @option{--pretty-print} option
would also run
your program. This is no longer the case.
@end quotation
-@cindex profiling, pretty-printing, difference with
-@cindex pretty-printing, profiling, difference with
+@cindex profiling, pretty printing, difference with
+@cindex pretty printing @subentry profiling, difference with
There is a significant difference between the output created when
profiling, and that created when pretty-printing. Pretty-printed output
preserves the original comments that were in the program, although their
@@ -29548,9 +29646,9 @@ countries, they were able to sell more systems.
As a result, internationalization and localization
of programs and software systems became a common practice.
-@cindex internationalization, localization
-@cindex @command{gawk}, internationalization and, See internationalization
-@cindex internationalization, localization, @command{gawk} and
+@cindex internationalization @subentry localization
+@cindex @command{gawk} @subentry internationalization
@seeentry{internationalization}
+@cindex internationalization @subentry localization @subentry @command{gawk}
and
For many years, the ability to provide internationalization
was largely restricted to programs written in C and C++.
This @value{CHAPTER} describes the underlying library @command{gawk}
@@ -29576,8 +29674,8 @@ a requirement.
@section Internationalization and Localization
@cindex internationalization
-@cindex localization, See internationalization@comma{} localization
-@cindex localization
+@cindex localization @seeentry{internationalization, localization}
+@cindex internationalization @subentry localization
@dfn{Internationalization} means writing (or modifying) a program once,
in such a way that it can use multiple languages without requiring
further source code changes.
@@ -29602,7 +29700,7 @@ port doesn't support GNU @command{gettext}.
Therefore, these features are not available
if you are using one of those operating systems. Sorry.}
-@cindex portability, @command{gettext} library and
+@cindex portability @subentry @command{gettext} library and
When using GNU @command{gettext}, each application has its own
@dfn{text domain}. This is a unique name, such as @samp{kpilot} or
@samp{gawk},
that identifies the application.
@@ -29624,15 +29722,16 @@ A table with strings of option names is not (e.g.,
@command{gawk}'s
language).
@cindex @code{textdomain()} function (C library)
+@cindex C library functions @subentry @code{textdomain()}
@item
The programmer indicates the application's text domain
(@command{"guide"}) to the @command{gettext} library,
by calling the @code{textdomain()} function.
@cindex @code{.pot} files
-@cindex files, @code{.pot}
-@cindex portable object template files
-@cindex files, portable object template
+@cindex files @subentry @code{.pot}
+@cindex portable object @subentry template files
+@cindex files @subentry portable object @subentry template file (@file{.pot})
@item
Messages from the application are extracted from the source code and
collected into a portable object template file (@file{guide.pot}),
@@ -29642,9 +29741,9 @@ The original (usually English) messages serve as the
key for
lookup of the translations.
@cindex @code{.po} files
-@cindex files, @code{.po}
-@cindex portable object files
-@cindex files, portable object
+@cindex files @subentry @code{.po}
+@cindex portable object @subentry files
+@cindex files @subentry portable object
@item
For each language with a translator, @file{guide.pot}
is copied to a portable object file (@code{.po})
@@ -29652,9 +29751,9 @@ and translations are created and shipped with the
application.
For example, there might be a @file{fr.po} for a French translation.
@cindex @code{.gmo} files
-@cindex files, @code{.gmo}
+@cindex files @subentry @code{.gmo}
@cindex message object files
-@cindex files, message object
+@cindex files @subentry message object
@item
Each language's @file{.po} file is converted into a binary
message object (@file{.gmo}) file.
@@ -29667,15 +29766,16 @@ When @command{guide} is built and installed, the
binary translation files
are installed in a standard place.
@cindex @code{bindtextdomain()} function (C library)
+@cindex C library functions @subentry @code{bindtextdomain()}
@item
For testing and development, it is possible to tell @command{gettext}
to use @file{.gmo} files in a different directory than the standard
one by using the @code{bindtextdomain()} function.
-@cindex @code{.gmo} files, specifying directory of
-@cindex files, @code{.gmo}, specifying directory of
-@cindex message object files, specifying directory of
-@cindex files, message object, specifying directory of
+@cindex @code{.gmo} files @subentry specifying directory of
+@cindex files @subentry @code{.gmo} @subentry specifying directory of
+@cindex message object files @subentry specifying directory of
+@cindex files @subentry message object @subentry specifying directory of
@item
At runtime, @command{guide} looks up each string via a call
to @code{gettext()}. The returned string is the translated string
@@ -29689,6 +29789,7 @@ and forth.
@end enumerate
@cindex @code{gettext()} function (C library)
+@cindex C library functions @subentry @code{gettext()}
In C (or C++), the string marking and dynamic translation lookup
are accomplished by wrapping each string in a call to @code{gettext()}:
@@ -29699,8 +29800,8 @@ printf("%s", gettext("Don't Panic!\n"));
The tools that extract messages from source code pull out all
strings enclosed in calls to @code{gettext()}.
-@cindex @code{_} (underscore), C macro
-@cindex underscore (@code{_}), C macro
+@cindex @code{_} (underscore) @subentry C macro
+@cindex underscore (@code{_}) @subentry C macro
The GNU @command{gettext} developers, recognizing that typing
@samp{gettext(@dots{})} over and over again is both painful and ugly to look
at, use the macro @samp{_} (an underscore) to make things easier:
@@ -29713,8 +29814,8 @@ at, use the macro @samp{_} (an underscore) to make
things easier:
printf("%s", _("Don't Panic!\n"));
@end example
-@cindex internationalization, localization, locale categories
-@cindex @command{gettext} library, locale categories
+@cindex internationalization @subentry localization @subentry locale categories
+@cindex @command{gettext} library @subentry locale categories
@cindex locale categories
@noindent
This reduces the typing overhead to just three extra characters per string
@@ -29757,6 +29858,8 @@ such as @code{/[[:alnum:]]/}
@cindex monetary information, localization
@cindex currency symbols, localization
+@cindex internationalization @subentry localization @subentry monetary
information
+@cindex internationalization @subentry localization @subentry currency symbols
@cindex @code{LC_MONETARY} locale category
@item LC_MONETARY
Monetary information, such as the currency symbol, and whether the
@@ -29770,8 +29873,8 @@ use a comma every three decimal places and a period for
the decimal
point, while many Europeans do exactly the opposite:
1,234.56 versus 1.234,56.}
-@cindex time, localization and
-@cindex dates, information related to@comma{} localization
+@cindex time @subentry localization and
+@cindex dates @subentry information related to, localization
@cindex @code{LC_TIME} locale category
@item LC_TIME
Time- and date-related information, such as 12- or 24-hour clock, month printed
@@ -29784,6 +29887,7 @@ All of the above. (Not too useful in the context of
@command{gettext}.)
@quotation NOTE
@cindex @env{LANGUAGE} environment variable
+@cindex environment variables @subentry @env{LANGUAGE}
As described in @ref{Locales}, environment variables with the same
name as the locale categories (@env{LC_CTYPE}, @env{LC_ALL}, etc.)
influence @command{gawk}'s behavior (and that of other utilities).
@@ -29797,6 +29901,8 @@ look to see if @env{LANGUAGE} is defined, and if so,
use the shell's
@command{unset} command to remove it.
@end quotation
+@cindex @env{GAWK_LOCALE_DIR} environment variable
+@cindex environment variables @subentry @env{GAWK_LOCALE_DIR}
For testing translations of @command{gawk} itself, you can set
the @env{GAWK_LOCALE_DIR} environment variable. See the documentation
for the C @code{bindtextdomain()} function and also see
@@ -29804,7 +29910,7 @@ for the C @code{bindtextdomain()} function and also see
@node Programmer i18n
@section Internationalizing @command{awk} Programs
-@cindex @command{awk} programs, internationalizing
+@cindex @command{awk} programs @subentry internationalizing
@command{gawk} provides the following variables for
internationalization:
@@ -29816,8 +29922,8 @@ This variable indicates the application's text domain.
For compatibility with GNU @command{gettext}, the default
value is @code{"messages"}.
-@cindex internationalization, localization, marked strings
-@cindex strings, for localization
+@cindex internationalization @subentry localization @subentry marked strings
+@cindex strings @subentry for localization
@item _"your message here"
String constants marked with a leading underscore
are candidates for translation at runtime.
@@ -29866,10 +29972,10 @@ The default value for @var{category} is
@code{"LC_MESSAGES"}.
The same remarks about argument order as for the @code{dcgettext()} function
apply.
-@cindex @code{.gmo} files, specifying directory of
-@cindex files, @code{.gmo}, specifying directory of
-@cindex message object files, specifying directory of
-@cindex files, message object, specifying directory of
+@cindex @code{.gmo} files @subentry specifying directory of
+@cindex files @subentry @code{.gmo} @subentry specifying directory of
+@cindex message object files @subentry specifying directory of
+@cindex files @subentry message object @subentry specifying directory of
@cindexgawkfunc{bindtextdomain}
@item @code{bindtextdomain(@var{directory}} [@code{,} @var{domain} ]@code{)}
Change the directory in which
@@ -29887,8 +29993,8 @@ given @var{domain}.
To use these facilities in your @command{awk} program, follow these steps:
@enumerate
-@cindex @code{BEGIN} pattern, @code{TEXTDOMAIN} variable and
-@cindex @code{TEXTDOMAIN} variable, @code{BEGIN} pattern and
+@cindex @code{BEGIN} pattern @subentry @code{TEXTDOMAIN} variable and
+@cindex @code{TEXTDOMAIN} variable @subentry @code{BEGIN} pattern and
@item
Set the variable @code{TEXTDOMAIN} to the text domain of
your program. This is best done in a @code{BEGIN} rule
@@ -29903,8 +30009,8 @@ BEGIN @{
@}
@end example
-@cindex @code{_} (underscore), translatable string
-@cindex underscore (@code{_}), translatable string
+@cindex @code{_} (underscore) @subentry translatable strings
+@cindex underscore (@code{_}) @subentry translatable strings
@item
Mark all translatable strings with a leading underscore (@samp{_})
character. It @emph{must} be adjacent to the opening
@@ -29950,7 +30056,7 @@ printf(message, ncustomers)
@end example
-@cindex @code{LC_MESSAGES} locale category, @code{bindtextdomain()} function
(@command{gawk})
+@cindex @code{LC_MESSAGES} locale category @subentry @code{bindtextdomain()}
function (@command{gawk})
@item
During development, you might want to put the @file{.gmo}
file in a private directory for testing. This is done
@@ -29979,9 +30085,9 @@ and use translations from @command{awk}.
@section Translating @command{awk} Programs
@cindex @code{.po} files
-@cindex files, @code{.po}
-@cindex portable object files
-@cindex files, portable object
+@cindex files @subentry @code{.po}
+@cindex portable object @subentry files
+@cindex files @subentry portable object
Once a program's translatable strings have been marked, they must
be extracted to create the initial @file{.pot} file.
As part of translation, it is often helpful to rearrange the order
@@ -30001,10 +30107,10 @@ is covered.
@node String Extraction
@subsection Extracting Marked Strings
-@cindex strings, extracting
+@cindex strings @subentry extracting
@cindex @option{--gen-pot} option
-@cindex command-line options, string extraction
-@cindex string extraction (internationalization)
+@cindex command line @subentry options @subentry string extraction
+@cindex string @subentry extraction (internationalization)
@cindex marked string extraction (internationalization)
@cindex extraction, of marked strings (internationalization)
@@ -30038,7 +30144,7 @@ translations for @command{guide}.
@node Printf Ordering
@subsection Rearranging @code{printf} Arguments
-@cindex @code{printf} statement, positional specifiers
+@cindex @code{printf} statement @subentry positional specifiers
@cindex positional specifiers, @code{printf} statement
Format strings for @code{printf} and @code{sprintf()}
(@pxref{Printf})
@@ -30106,9 +30212,9 @@ comes first, then the integer position, and then the
@samp{$}.
This is somewhat counterintuitive.
@end quotation
-@cindex @code{printf} statement, positional specifiers, mixing with regular
formats
-@cindex positional specifiers, @code{printf} statement, mixing with regular
formats
-@cindex format specifiers, mixing regular with positional specifiers
+@cindex @code{printf} statement @subentry positional specifiers @subentry
mixing with regular formats
+@cindex positional specifiers, @code{printf} statement @subentry mixing with
regular formats
+@cindex format specifiers @subentry mixing regular with positional specifiers
@command{gawk} does not allow you to mix regular format specifiers
and those with positional specifiers in the same string:
@@ -30134,8 +30240,8 @@ is first written.
@node I18N Portability
@subsection @command{awk} Portability Issues
-@cindex portability, internationalization and
-@cindex internationalization, localization, portability and
+@cindex portability @subentry internationalization and
+@cindex internationalization @subentry localization @subentry portability and
@command{gawk}'s internationalization features were purposely chosen to
have as little impact as possible on the portability of @command{awk}
programs that use them to other versions of @command{awk}.
@@ -30156,7 +30262,7 @@ However, it is actually almost portable, requiring very
little
change:
@itemize @value{BULLET}
-@cindex @code{TEXTDOMAIN} variable, portability and
+@cindex @code{TEXTDOMAIN} variable @subentry portability and
@item
Assignments to @code{TEXTDOMAIN} won't have any effect,
because @code{TEXTDOMAIN} is not special in other @command{awk}
implementations.
@@ -30175,9 +30281,9 @@ and @code{bindtextdomain()}, the @command{awk} program
can be made to run, but
all the messages are output in the original language.
For example:
-@cindex @code{bindtextdomain()} function (@command{gawk}), portability and
-@cindex @code{dcgettext()} function (@command{gawk}), portability and
-@cindex @code{dcngettext()} function (@command{gawk}), portability and
+@cindex @code{bindtextdomain()} function (@command{gawk}) @subentry
portability and
+@cindex @code{dcgettext()} function (@command{gawk}) @subentry portability and
+@cindex @code{dcngettext()} function (@command{gawk}) @subentry portability and
@example
@c file eg/lib/libintl.awk
function bindtextdomain(dir, domain)
@@ -30291,7 +30397,6 @@ msgstr "Like, the scoop is"
@c endfile
@end example
-@cindex Linux
@cindex GNU/Linux
@quotation NOTE
The following instructions apply to GNU/Linux with the GNU C Library. Be
@@ -30305,6 +30410,14 @@ file and then to create the @file{guide.mo} file.
The directory has the form @file{@var{locale}/LC_MESSAGES}, where
@var{locale} is a locale name known to the C @command{gettext} routines.
+@cindex @env{LANGUAGE} environment variable
+@cindex environment variables @subentry @env{LANGUAGE}
+@cindex @env{LC_ALL} environment variable
+@cindex environment variables @subentry @env{LC_ALL}
+@cindex @env{LANG} environment variable
+@cindex environment variables @subentry @env{LANG}
+@cindex @env{LC_MESSAGES} environment variable
+@cindex environment variables @subentry @env{LC_MESSAGES}
How do we know which locale to use? It turns out that there are
four different environment variables used by the C @command{gettext} routines.
In order, they are @env{$LANGUAGE}, @env{$LC_ALL}, @env{$LANG}, and
@@ -30324,14 +30437,14 @@ We next make the directories:
$ @kbd{mkdir en_US.UTF-8 en_US.UTF-8/LC_MESSAGES}
@end example
-@cindex @code{.po} files, converting to @code{.mo}
-@cindex files, @code{.po}, converting to @code{.mo}
+@cindex @code{.po} files @subentry converting to @code{.mo}
+@cindex files @subentry @code{.po} @subentry converting to @code{.mo}
@cindex @code{.mo} files, converting from @code{.po}
-@cindex files, @code{.mo}, converting from @code{.po}
-@cindex portable object files, converting to message object files
-@cindex files, portable object, converting to message object files
-@cindex message object files, converting from portable object files
-@cindex files, message object, converting from portable object files
+@cindex files @subentry @code{.mo}, converting from @code{.po}
+@cindex portable object @subentry files @subentry converting to message object
files
+@cindex files @subentry portable object @subentry converting to message object
files
+@cindex message object files @subentry converting from portable object files
+@cindex files @subentry message object @subentry converting from portable
object files
@cindex @command{msgfmt} utility
The @command{msgfmt} utility converts the human-readable
@file{.po} file into a machine-readable @file{.mo} file.
@@ -30428,7 +30541,7 @@ a number of translations for its messages.
@node Debugger
@chapter Debugging @command{awk} Programs
-@cindex debugging @command{awk} programs
+@cindex debugging @subentry @command{awk} programs
@c The original text for this chapter was contributed by Efraim Yawitz.
@@ -30476,7 +30589,7 @@ In that case, what can you expect from such a tool?
The answer to that
depends on the language being debugged, but in general, you can expect at
least the following:
-@cindex debugger capabilities
+@cindex debugger @subentry capabilities
@itemize @value{BULLET}
@item
The ability to watch a program execute its instructions one by one,
@@ -30509,14 +30622,14 @@ functional program that you or someone else wrote).
@node Debugging Terms
@subsection Debugging Concepts
-@cindex debugger, concepts
+@cindex debugger @subentry concepts
Before diving in to the details, we need to introduce several
important concepts that apply to just about all debuggers.
The following list defines terms used throughout the rest of
this @value{CHAPTER}:
@table @dfn
-@cindex call stack (debugger)
+@cindex call stack @subentry explanation of
@cindex stack frame (debugger)
@item Stack frame
Programs generally call functions during the course of their execution.
@@ -30539,7 +30652,7 @@ invoked. Commands that print the call stack print
information about
each stack frame (as detailed later on).
@item Breakpoint
-@cindex breakpoint (debugger)
+@cindex breakpoint
During debugging, you often wish to let the program run until it
reaches a certain point, and then continue execution from there one
statement (or instruction) at a time. The way to do this is to set
@@ -30585,7 +30698,7 @@ does not work at the level of machine instructions.}
@section Sample @command{gawk} Debugging Session
@cindex sample debugging session
@cindex example debugging session
-@cindex debugging, example session
+@cindex debugging @subentry example session
In order to illustrate the use of @command{gawk} as a debugger, let's look at
a sample
debugging session. We will use the @command{awk} implementation of the
@@ -30600,7 +30713,7 @@ as our example.
@node Debugger Invocation
@subsection How to Start the Debugger
@cindex starting the debugger
-@cindex debugger, how to start
+@cindex debugger @subentry how to start
Starting the debugger is almost exactly like running @command{gawk} normally,
except you have to pass an additional option, @option{--debug}, or the
@@ -30623,7 +30736,7 @@ in the command line to the debugger rather than as part
of the @code{run}
command at the debugger prompt.)
The @option{-1} is an option to @file{uniq.awk}.
-@cindex debugger, prompt
+@cindex debugger @subentry prompt
Instead of immediately running the program on @file{inputfile}, as
@command{gawk} would ordinarily do, the debugger merely loads all
the program source files, compiles them internally, and then gives
@@ -30673,10 +30786,10 @@ a breakpoint in @file{uniq.awk} is at the beginning
of the function
@code{are_equal()}, which compares the current line with the previous one. To
set
the breakpoint, use the @code{b} (breakpoint) command:
-@cindex debugger, setting a breakpoint
-@cindex debugger, @code{breakpoint} command
-@cindex debugger, @code{break} command
-@cindex debugger, @code{b} command
+@cindex debugger @subentry setting a breakpoint
+@cindex debugger @subentry commands @subentry @code{breakpoint}
+@cindex debugger @subentry commands @subentry @code{break}
+@cindex debugger @subentry commands @subentry @code{b} (@code{break})
@example
gawk> @kbd{b are_equal}
@print{} Breakpoint 1 set at file `awklib/eg/prog/uniq.awk', line 63
@@ -30686,8 +30799,8 @@ The debugger tells us the file and line number where
the breakpoint is.
Now type @samp{r} or @samp{run} and the program runs until it hits
the breakpoint for the first time:
-@cindex debugger, running the program
-@cindex debugger, @code{run} command
+@cindex debugger @subentry running the program
+@cindex debugger @subentry commands @subentry @code{run}
@example
gawk> @kbd{r}
@print{} Starting program:
@@ -30703,9 +30816,9 @@ let's see how we got to where we are. At the prompt,
we type @samp{bt}
(short for ``backtrace''), and the debugger responds with a
listing of the current stack frames:
-@cindex debugger, stack frames, showing
-@cindex debugger, @code{bt} command
-@cindex debugger, @code{backtrace} command
+@cindex debugger @subentry stack frames, showing
+@cindex debugger @subentry commands @subentry @code{bt} (@code{backtrace})
+@cindex debugger @subentry commands @subentry @code{backtrace}
@example
gawk> @kbd{bt}
@print{} #0 are_equal(n, m, clast, cline, alast, aline)
@@ -30725,8 +30838,8 @@ of some variables. Let's say we type @samp{p n}
@code{n}, a parameter to @code{are_equal()}. Actually, the debugger
gives us:
-@cindex debugger, @code{print} command
-@cindex debugger, @code{p} command
+@cindex debugger @subentry commands @subentry @code{print}
+@cindex debugger @subentry commands @subentry @code{p} (@code{print})
@example
gawk> @kbd{p n}
@print{} n = untyped variable
@@ -30777,8 +30890,8 @@ be inside this function. To investigate further, we
must begin
``stepping through'' the lines of @code{are_equal()}. We start by typing
@samp{n} (for ``next''):
-@cindex debugger, @code{n} command
-@cindex debugger, @code{next} command
+@cindex debugger @subentry commands @subentry @code{n} (@code{next})
+@cindex debugger @subentry commands @subentry @code{next}
@example
@group
gawk> @kbd{n}
@@ -30824,7 +30937,7 @@ This information is useful enough (we now know that
none of the words were accidentally left out), but what if we want to see
inside the array?
-@cindex debugger, printing single array elements
+@cindex debugger @subentry printing single array elements
The first choice would be to use subscripts:
@example
@@ -30844,7 +30957,7 @@ This would be kind of slow for a 100-member array,
though, so
@command{gawk} provides a shortcut (reminiscent of another language
not to be mentioned):
-@cindex debugger, printing all array elements
+@cindex debugger @subentry printing all array elements
@example
gawk> @kbd{p @@alast}
@print{} alast["1"] = "awk"
@@ -30924,7 +31037,7 @@ Getting information
Miscellaneous
@end itemize
-@cindex debugger, repeating commands
+@cindex debugger @subentry repeating commands
Each of these are discussed in the following subsections.
In the following descriptions, commands that may be abbreviated
show the abbreviation on a second description line.
@@ -30954,12 +31067,12 @@ will otherwise just run as if it was not under the
debugger. The commands for
controlling breakpoints are:
@table @asis
-@cindex debugger commands, @code{b} (@code{break})
-@cindex debugger commands, @code{break}
+@cindex debugger @subentry commands @subentry @code{b} (@code{break})
+@cindex debugger @subentry commands @subentry @code{break}
@cindex @code{break} debugger command
@cindex @code{b} debugger command (alias for @code{break})
@cindex set breakpoint
-@cindex breakpoint, setting
+@cindex breakpoint @subentry setting
@item @code{break} [[@var{filename}@code{:}]@var{n} | @var{function}]
[@code{"@var{expression}"}]
@itemx @code{b} [[@var{filename}@code{:}]@var{n} | @var{function}]
[@code{"@var{expression}"}]
Without any argument, set a breakpoint at the next instruction
@@ -30989,10 +31102,10 @@ evaluates whenever the breakpoint is reached. If the
condition is true,
then the debugger stops execution and prompts for a command. Otherwise,
it continues executing the program.
-@cindex debugger commands, @code{clear}
+@cindex debugger @subentry commands @subentry @code{clear}
@cindex @code{clear} debugger command
-@cindex delete breakpoint, at location
-@cindex breakpoint at location, how to delete
+@cindex delete breakpoint @subentry at location
+@cindex breakpoint @subentry at location, how to delete
@item @code{clear} [[@var{filename}@code{:}]@var{n} | @var{function}]
Without any argument, delete any breakpoint at the next instruction
to be executed in the selected stack frame. If the program stops at
@@ -31011,9 +31124,9 @@ Delete breakpoint(s) set at line number @var{n} in
source file @var{filename}.
Delete breakpoint(s) set at entry to function @var{function}.
@end table
-@cindex debugger commands, @code{condition}
+@cindex debugger @subentry commands @subentry @code{condition}
@cindex @code{condition} debugger command
-@cindex breakpoint condition
+@cindex breakpoint @subentry condition
@item @code{condition} @var{n} @code{"@var{expression}"}
Add a condition to existing breakpoint or watchpoint @var{n}. The
condition is an @command{awk} expression @emph{enclosed in double quotes}
@@ -31024,27 +31137,27 @@ the debugger continues executing the program. If the
condition expression is
not specified, any existing condition is removed (i.e., the breakpoint or
watchpoint is made unconditional).
-@cindex debugger commands, @code{d} (@code{delete})
-@cindex debugger commands, @code{delete}
+@cindex debugger @subentry commands @subentry @code{d} (@code{delete})
+@cindex debugger @subentry commands @subentry @code{delete}
@cindex @code{delete} debugger command
@cindex @code{d} debugger command (alias for @code{delete})
-@cindex delete breakpoint, by number
-@cindex breakpoint, delete by number
+@cindex delete breakpoint @subentry by number
+@cindex breakpoint @subentry delete by number
@item @code{delete} [@var{n1 n2} @dots{}] [@var{n}--@var{m}]
@itemx @code{d} [@var{n1 n2} @dots{}] [@var{n}--@var{m}]
Delete specified breakpoints or a range of breakpoints. Delete
all defined breakpoints if no argument is supplied.
-@cindex debugger commands, @code{disable}
+@cindex debugger @subentry commands @subentry @code{disable}
@cindex @code{disable} debugger command
@cindex disable breakpoint
-@cindex breakpoint, how to disable or enable
+@cindex breakpoint @subentry how to disable or enable
@item @code{disable} [@var{n1 n2} @dots{} | @var{n}--@var{m}]
Disable specified breakpoints or a range of breakpoints. Without
any argument, disable all breakpoints.
-@cindex debugger commands, @code{e} (@code{enable})
-@cindex debugger commands, @code{enable}
+@cindex debugger @subentry commands @subentry @code{e} (@code{enable})
+@cindex debugger @subentry commands @subentry @code{enable}
@cindex @code{enable} debugger command
@cindex @code{e} debugger command (alias for @code{enable})
@cindex enable breakpoint
@@ -31065,15 +31178,15 @@ Enable the breakpoints temporarily, then disable each
one when
the program stops at it.
@end table
-@cindex debugger commands, @code{ignore}
+@cindex debugger @subentry commands @subentry @code{ignore}
@cindex @code{ignore} debugger command
@cindex ignore breakpoint
@item @code{ignore} @var{n} @var{count}
Ignore breakpoint number @var{n} the next @var{count} times it is
hit.
-@cindex debugger commands, @code{t} (@code{tbreak})
-@cindex debugger commands, @code{tbreak}
+@cindex debugger @subentry commands @subentry @code{t} (@code{tbreak})
+@cindex debugger @subentry commands @subentry @code{tbreak}
@cindex @code{tbreak} debugger command
@cindex @code{t} debugger command (alias for @code{tbreak})
@cindex temporary breakpoint
@@ -31091,13 +31204,13 @@ and observing its behavior. There are more commands
for controlling
execution of the program than we saw in our earlier example:
@table @asis
-@cindex debugger commands, @code{commands}
+@cindex debugger @subentry commands @subentry @code{commands}
@cindex @code{commands} debugger command
-@cindex debugger commands, @code{silent}
+@cindex debugger @subentry commands @subentry @code{silent}
@cindex @code{silent} debugger command
-@cindex debugger commands, @code{end}
+@cindex debugger @subentry commands @subentry @code{end}
@cindex @code{end} debugger command
-@cindex breakpoint commands
+@cindex breakpoint @subentry commands to execute at
@cindex commands to execute at breakpoint
@item @code{commands} [@var{n}]
@itemx @code{silent}
@@ -31124,8 +31237,8 @@ gawk> @kbd{commands}
gawk>
@end example
-@cindex debugger commands, @code{c} (@code{continue})
-@cindex debugger commands, @code{continue}
+@cindex debugger @subentry commands @subentry @code{c} (@code{continue})
+@cindex debugger @subentry commands @subentry @code{continue}
@cindex continue program, in debugger
@cindex @code{continue} debugger command
@item @code{continue} [@var{count}]
@@ -31134,14 +31247,14 @@ Resume program execution. If continued from a
breakpoint and @var{count} is
specified, ignore the breakpoint at that location the next @var{count} times
before stopping.
-@cindex debugger commands, @code{finish}
+@cindex debugger @subentry commands @subentry @code{finish}
@cindex @code{finish} debugger command
@item @code{finish}
Execute until the selected stack frame returns.
Print the returned value.
-@cindex debugger commands, @code{n} (@code{next})
-@cindex debugger commands, @code{next}
+@cindex debugger @subentry commands @subentry @code{n} (@code{next})
+@cindex debugger @subentry commands @subentry @code{next}
@cindex @code{next} debugger command
@cindex @code{n} debugger command (alias for @code{next})
@cindex single-step execution, in the debugger
@@ -31151,15 +31264,15 @@ Continue execution to the next source line, stepping
over function calls.
The argument @var{count} controls how many times to repeat the action, as
in @code{step}.
-@cindex debugger commands, @code{ni} (@code{nexti})
-@cindex debugger commands, @code{nexti}
+@cindex debugger @subentry commands @subentry @code{ni} (@code{nexti})
+@cindex debugger @subentry commands @subentry @code{nexti}
@cindex @code{nexti} debugger command
@cindex @code{ni} debugger command (alias for @code{nexti})
@item @code{nexti} [@var{count}]
@itemx @code{ni} [@var{count}]
Execute one (or @var{count}) instruction(s), stepping over function calls.
-@cindex debugger commands, @code{return}
+@cindex debugger @subentry commands @subentry @code{return}
@cindex @code{return} debugger command
@item @code{return} [@var{value}]
Cancel execution of a function call. If @var{value} (either a string or a
@@ -31168,8 +31281,8 @@ frame other than the innermost one (the currently
executing function; i.e.,
frame number 0), discard all inner frames in addition to the selected one,
and the caller of that frame becomes the innermost frame.
-@cindex debugger commands, @code{r} (@code{run})
-@cindex debugger commands, @code{run}
+@cindex debugger @subentry commands @subentry @code{r} (@code{run})
+@cindex debugger @subentry commands @subentry @code{run}
@cindex @code{run} debugger command
@cindex @code{r} debugger command (alias for @code{run})
@item @code{run}
@@ -31178,8 +31291,8 @@ Start/restart execution of the program. When
restarting, the debugger
retains the current breakpoints, watchpoints, command history,
automatic display variables, and debugger options.
-@cindex debugger commands, @code{s} (@code{step})
-@cindex debugger commands, @code{step}
+@cindex debugger @subentry commands @subentry @code{s} (@code{step})
+@cindex debugger @subentry commands @subentry @code{step}
@cindex @code{step} debugger command
@cindex @code{s} debugger command (alias for @code{step})
@item @code{step} [@var{count}]
@@ -31189,8 +31302,8 @@ current stack frame, stepping inside any function
called within
the line. If the argument @var{count} is supplied, steps that many times
before
stopping, unless it encounters a breakpoint or watchpoint.
-@cindex debugger commands, @code{si} (@code{stepi})
-@cindex debugger commands, @code{stepi}
+@cindex debugger @subentry commands @subentry @code{si} (@code{stepi})
+@cindex debugger @subentry commands @subentry @code{stepi}
@cindex @code{stepi} debugger command
@cindex @code{si} debugger command (alias for @code{stepi})
@item @code{stepi} [@var{count}]
@@ -31199,8 +31312,8 @@ Execute one (or @var{count}) instruction(s), stepping
inside function calls.
(For illustration of what is meant by an ``instruction'' in @command{gawk},
see the output shown under @code{dump} in @ref{Miscellaneous Debugger
Commands}.)
-@cindex debugger commands, @code{u} (@code{until})
-@cindex debugger commands, @code{until}
+@cindex debugger @subentry commands @subentry @code{u} (@code{until})
+@cindex debugger @subentry commands @subentry @code{until}
@cindex @code{until} debugger command
@cindex @code{u} debugger command (alias for @code{until})
@item @code{until} [[@var{filename}@code{:}]@var{n} | @var{function}]
@@ -31217,7 +31330,7 @@ stack frame returns.
The commands for viewing and changing variables inside of @command{gawk} are:
@table @asis
-@cindex debugger commands, @code{display}
+@cindex debugger @subentry commands @subentry @code{display}
@cindex @code{display} debugger command
@item @code{display} [@var{var} | @code{$}@var{n}]
Add variable @var{var} (or field @code{$@var{n}}) to the display list.
@@ -31237,7 +31350,7 @@ no such variable of the given name exists.
Without argument, @code{display} displays the current values of
items on the list.
-@cindex debugger commands, @code{eval}
+@cindex debugger @subentry commands @subentry @code{eval}
@cindex @code{eval} debugger command
@cindex evaluate expressions, in debugger
@item @code{eval "@var{awk statements}"}
@@ -31264,8 +31377,8 @@ This form of @code{eval} is similar, but it allows you
to define
@var{awk statements}, instead of using variables or function
parameters defined by the program.
-@cindex debugger commands, @code{p} (@code{print})
-@cindex debugger commands, @code{print}
+@cindex debugger @subentry commands @subentry @code{p} (@code{print})
+@cindex debugger @subentry commands @subentry @code{print}
@cindex @code{print} debugger command
@cindex @code{p} debugger command (alias for @code{print})
@cindex print variables, in debugger
@@ -31292,7 +31405,7 @@ gawk> @kbd{print @@a}
This prints the indices and the corresponding values for all elements in
the array @code{a}.
-@cindex debugger commands, @code{printf}
+@cindex debugger @subentry commands @subentry @code{printf}
@cindex @code{printf} debugger command
@item @code{printf} @var{format} [@code{,} @var{arg} @dots{}]
Print formatted text. The @var{format} may include escape sequences,
@@ -31300,7 +31413,7 @@ such as @samp{\n}
(@pxref{Escape Sequences}).
No newline is printed unless one is specified.
-@cindex debugger commands, @code{set}
+@cindex debugger @subentry commands @subentry @code{set}
@cindex @code{set} debugger command
@cindex assign values to variables, in debugger
@item @code{set} @var{var}@code{=}@var{value}
@@ -31311,8 +31424,8 @@ String values must be enclosed between double quotes
(@code{"}@dots{}@code{"}).
You can also set special @command{awk} variables, such as @code{FS},
@code{NF}, @code{NR}, and so on.
-@cindex debugger commands, @code{w} (@code{watch})
-@cindex debugger commands, @code{watch}
+@cindex debugger @subentry commands @subentry @code{w} (@code{watch})
+@cindex debugger @subentry commands @subentry @code{watch}
@cindex @code{watch} debugger command
@cindex @code{w} debugger command (alias for @code{watch})
@cindex set watchpoint
@@ -31330,14 +31443,14 @@ evaluates whenever the watchpoint is reached. If the
condition is true,
then the debugger stops execution and prompts for a command. Otherwise,
@command{gawk} continues executing the program.
-@cindex debugger commands, @code{undisplay}
+@cindex debugger @subentry commands @subentry @code{undisplay}
@cindex @code{undisplay} debugger command
@cindex stop automatic display, in debugger
@item @code{undisplay} [@var{n}]
Remove item number @var{n} (or all items, if no argument) from the
automatic display list.
-@cindex debugger commands, @code{unwatch}
+@cindex debugger @subentry commands @subentry @code{unwatch}
@cindex @code{unwatch} debugger command
@cindex delete watchpoint
@item @code{unwatch} [@var{n}]
@@ -31356,13 +31469,13 @@ and also move around in the stack to see what the
state of things was in the
functions that called the one you are in. The commands for doing this are:
@table @asis
-@cindex debugger commands, @code{bt} (@code{backtrace})
-@cindex debugger commands, @code{backtrace}
-@cindex debugger commands, @code{where} (@code{backtrace})
+@cindex debugger @subentry commands @subentry @code{bt} (@code{backtrace})
+@cindex debugger @subentry commands @subentry @code{backtrace}
+@cindex debugger @subentry commands @subentry @code{where} (@code{backtrace})
@cindex @code{backtrace} debugger command
@cindex @code{bt} debugger command (alias for @code{backtrace})
@cindex @code{where} debugger command (alias for @code{backtrace})
-@cindex call stack, display in debugger
+@cindex call stack @subentry display in debugger
@cindex traceback, display in debugger
@item @code{backtrace} [@var{count}]
@itemx @code{bt} [@var{count}]
@@ -31374,14 +31487,14 @@ function, the source @value{FN}, and the line number.
The alias @code{where} for @code{backtrace} is provided for longtime
GDB users who may be used to that command.
-@cindex debugger commands, @code{down}
+@cindex debugger @subentry commands @subentry @code{down}
@cindex @code{down} debugger command
@item @code{down} [@var{count}]
Move @var{count} (default 1) frames down the stack toward the innermost frame.
Then select and print the frame.
-@cindex debugger commands, @code{f} (@code{frame})
-@cindex debugger commands, @code{frame}
+@cindex debugger @subentry commands @subentry @code{f} (@code{frame})
+@cindex debugger @subentry commands @subentry @code{frame}
@cindex @code{frame} debugger command
@cindex @code{f} debugger command (alias for @code{frame})
@item @code{frame} [@var{n}]
@@ -31392,7 +31505,7 @@ called the innermost one. The highest-numbered frame is
the one for the
main program. The printed information consists of the frame number,
function and argument names, source file, and the source line.
-@cindex debugger commands, @code{up}
+@cindex debugger @subentry commands @subentry @code{up}
@cindex @code{up} debugger command
@item @code{up} [@var{count}]
Move @var{count} (default 1) frames up the stack toward the outermost frame.
@@ -31410,8 +31523,8 @@ is used with one of a number of arguments that tell it
exactly what
you want to know:
@table @asis
-@cindex debugger commands, @code{i} (@code{info})
-@cindex debugger commands, @code{info}
+@cindex debugger @subentry commands @subentry @code{i} (@code{info})
+@cindex debugger @subentry commands @subentry @code{info}
@cindex @code{info} debugger command
@cindex @code{i} debugger command (alias for @code{info})
@item @code{info} @var{what}
@@ -31421,11 +31534,13 @@ The value for @var{what} should be one of the
following:
@c nested table
@table @code
@item args
-@cindex show function arguments, in debugger
+@cindex show in debugger @subentry function arguments
+@cindex function arguments, show in debugger
List arguments of the selected frame.
@item break
-@cindex show breakpoints
+@cindex show in debugger @subentry breakpoints
+@cindex breakpoint @subentry show all in debugger
List all currently set breakpoints.
@item display
@@ -31438,15 +31553,19 @@ Give a description of the selected stack frame.
@item functions
@cindex list function definitions, in debugger
+@cindex function definitions, list in debugger
List all function definitions including source @value{FN}s and
line numbers.
@item locals
-@cindex show local variables, in debugger
+@cindex show in debugger @subentry local variables
+@cindex local variables @subentry show in debugger
List local variables of the selected frame.
@item source
-@cindex show name of current source file, in debugger
+@cindex show in debugger @subentry name of current source file
+@cindex current source file, show in debugger
+@cindex source file, show in debugger
Print the name of the current source file. Each time the program stops, the
current source file is the file containing the current instruction.
When the debugger first starts, the current source file is the first file
@@ -31455,15 +31574,18 @@ included via the @option{-f} option. The
be used at any time to change the current source.
@item sources
-@cindex show all source files, in debugger
+@cindex show in debugger @subentry all source files
+@cindex all source files, show in debugger
List all program sources.
@item variables
@cindex list all global variables, in debugger
+@cindex global variables, show in debugger
List all global variables.
@item watch
-@cindex show watchpoints
+@cindex show in debugger @subentry watchpoints
+@cindex watchpoints, show in debugger
List all items in the watch list.
@end table
@end table
@@ -31473,12 +31595,12 @@ save the debugger's state, and the ability to run
debugger commands
from a file. The commands are:
@table @asis
-@cindex debugger commands, @code{o} (@code{option})
-@cindex debugger commands, @code{option}
+@cindex debugger @subentry commands @subentry @code{o} (@code{option})
+@cindex debugger @subentry commands @subentry @code{option}
@cindex @code{option} debugger command
@cindex @code{o} debugger command (alias for @code{option})
@cindex display debugger options
-@cindex debugger, options
+@cindex debugger @subentry options
@item @code{option} [@var{name}[@code{=}@var{value}]]
@itemx @code{o} [@var{name}[@code{=}@var{value}]]
Without an argument, display the available debugger options
@@ -31491,12 +31613,12 @@ The available options are:
@c asis for docbook
@table @asis
@item @code{history_size}
-@cindex debugger, history size
+@cindex debugger @subentry history size
Set the maximum number of lines to keep in the history file
@file{./.gawk_history}. The default is 100.
@item @code{listsize}
-@cindex debugger, default list amount
+@cindex debugger @subentry default list amount
Specify the number of lines that @code{list} prints. The default is 15.
@item @code{outfile}
@@ -31506,11 +31628,11 @@ to standard output. An empty string (@code{""})
resets output to
standard output.
@item @code{prompt}
-@cindex debugger, prompt
+@cindex debugger @subentry prompt
Change the debugger prompt. The default is @samp{@w{gawk> }}.
@item @code{save_history} [@code{on} | @code{off}]
-@cindex debugger, history file
+@cindex debugger @subentry history file
Save command history to file @file{./.gawk_history}.
The default is @code{on}.
@@ -31522,17 +31644,17 @@ Options are read back into the next session upon
startup.
@item @code{trace} [@code{on} | @code{off}]
@cindex instruction tracing, in debugger
-@cindex debugger, instruction tracing
+@cindex debugger @subentry instruction tracing
Turn instruction tracing on or off. The default is @code{off}.
@end table
-@cindex debugger, save commands to a file
+@cindex debugger @subentry save commands to a file
@item @code{save} @var{filename}
Save the commands from the current session to the given @value{FN},
so that they can be replayed using the @command{source} command.
@item @code{source} @var{filename}
-@cindex debugger, read commands from a file
+@cindex debugger @subentry read commands from a file
Run command(s) from a file; an error in any command does not
terminate execution of subsequent commands. Comments (lines starting
with @samp{#}) are allowed in a command file.
@@ -31556,7 +31678,7 @@ There are a few more commands that do not fit into the
previous categories, as follows:
@table @asis
-@cindex debugger commands, @code{dump}
+@cindex debugger @subentry commands @subentry @code{dump}
@cindex @code{dump} debugger command
@item @code{dump} [@var{filename}]
Dump byte code of the program to standard output or to the file
@@ -31626,8 +31748,8 @@ gawk>
Exit the debugger.
See the entry for @samp{quit}, later in this list.
-@cindex debugger commands, @code{h} (@code{help})
-@cindex debugger commands, @code{help}
+@cindex debugger @subentry commands @subentry @code{h} (@code{help})
+@cindex debugger @subentry commands @subentry @code{help}
@cindex @code{help} debugger command
@cindex @code{h} debugger command (alias for @code{help})
@item @code{help}
@@ -31636,8 +31758,8 @@ Print a list of all of the @command{gawk} debugger
commands with a short
summary of their usage. @samp{help @var{command}} prints the information
about the command @var{command}.
-@cindex debugger commands, @code{l} (@code{list})
-@cindex debugger commands, @code{list}
+@cindex debugger @subentry commands @subentry @code{l} (@code{list})
+@cindex debugger @subentry commands @subentry @code{list}
@cindex @code{list} debugger command
@cindex @code{l} debugger command (alias for @code{list})
@item @code{list} [@code{-} | @code{+} | @var{n} |
@var{filename}@code{:}@var{n} | @var{n}--@var{m} | @var{function}]
@@ -31670,8 +31792,8 @@ Print lines centered around the beginning of the
function @var{function}. This command may change the current source file.
@end table
-@cindex debugger commands, @code{q} (@code{quit})
-@cindex debugger commands, @code{quit}
+@cindex debugger @subentry commands @subentry @code{q} (@code{quit})
+@cindex debugger @subentry commands @subentry @code{quit}
@cindex @code{quit} debugger command
@cindex @code{q} debugger command (alias for @code{quit})
@cindex exit the debugger
@@ -31683,7 +31805,7 @@ and are free to go on to the next one! As we saw
earlier, if you are
running a program, the debugger warns you when you type
@samp{q} or @samp{quit}, to make sure you really want to quit.
-@cindex debugger commands, @code{trace}
+@cindex debugger @subentry commands @subentry @code{trace}
@cindex @code{trace} debugger command
@item @code{trace} [@code{on} | @code{off}]
Turn on or off continuous printing of the instructions that are about to
@@ -31699,9 +31821,9 @@ fairly self-explanatory, and using @code{stepi} and
@code{nexti} while
@node Readline Support
@section Readline Support
@cindex command completion, in debugger
-@cindex debugger, command completion
+@cindex debugger @subentry command completion
@cindex history expansion, in debugger
-@cindex debugger, history expansion
+@cindex debugger @subentry history expansion
If @command{gawk} is compiled with
@uref{http://cnswww.cns.cwru.edu/php/chet/readline/readline.html,
@@ -31740,7 +31862,7 @@ and
@node Limitations
@section Limitations
-@cindex debugger, limitations
+@cindex debugger @subentry limitations
We hope you find the @command{gawk} debugger useful and enjoyable to work with,
but as with any program, especially in its early releases, it still has
some limitations. A few that it's worth being aware of are:
@@ -31932,8 +32054,8 @@ please report them (@xref{Bugs}).
@node Global Namespace
@section Standard @command{awk}'s Single Namespace
-@cindex namespace, definition of
-@cindex namespace, standard @command{awk}, global
+@cindex namespace @subentry definition of
+@cindex namespace @subentry standard @command{awk}, global
In standard @command{awk}, there is a single, global, @dfn{namespace}.
This means that @emph{all} function names and global variable names must
be unique. For example, two different @command{awk} source files cannot
@@ -31963,9 +32085,10 @@ simple mechanism to put functions and global variables
into separate namespaces.
@node Qualified Names
@section Qualified Names
-@cindex qualified name, definition of
-@cindex namespaces, qualified names
-@cindex @code{::}, namespace separator
+@cindex qualified name @subentry definition of
+@cindex namespaces @subentry qualified names
+@cindex @code{:} (colon) @subentry @code{::} namespace separator
+@cindex colon (@code{:}) @subentry @code{::} namespace separator
@cindex component name
A @dfn{qualified name} is an identifier that includes a namespace name,
the namespace separator @code{::}, and a @dfn{component} name. For example,
one
@@ -31979,7 +32102,7 @@ Unlike C++, the @code{::} is @emph{not} an operator.
No spaces are
allowed between the namespace name, the @code{::}, and the component name.
@end quotation
-@cindex qualified name, use of
+@cindex qualified name @subentry use of
You must use qualified names from one namespace to access variables
and functions in another. This is especially important when using
variable names to index the special @code{SYMTAB} array (@pxref{Auto-set}),
@@ -31988,9 +32111,9 @@ and when making indirect function calls
(@pxref{Indirect Calls}).
@node Default Namespace
@section The Default Namespace
-@cindex namespace, default
-@cindex namespace, @code{awk}
-@cindex @code{awk} namespace
+@cindex namespace @subentry default
+@cindex namespace @subentry @code{awk}
+@cindex @code{awk} @subentry namespace
The default namespace, not surprisingly, is @code{awk}.
All of the predefined @command{awk} and @command{gawk} variables
are in this namespace, and thus have qualified names like
@@ -32007,8 +32130,10 @@ It also keeps your code looking natural.
@node Changing The Namespace
@section Changing The Namespace
-@cindex namespaces, changing
-@cindex @code{@@namespace} directive
+@cindex namespaces @subentry changing
+@cindex @code{@@} (at-sign) @subentry @code{@@namespace} directive
+@cindex at-sign (@code{@@}) @subentry @code{@@namespace} directive
+@cindex @code{@@namespace} directive @sortas{namespace directive}
In order to set the current namespace, use an @code{@@namespace} directive
at the top level of your program:
@@ -32033,7 +32158,7 @@ no concept of a ``current'' namespace once your program
starts executing.
Be sure you understand this.
@end quotation
-@cindex namespace, implicit
+@cindex namespace @subentry implicit
@cindex implicit namespace
Each source file for @option{-i} and @option{-f} starts out with
an implicit @samp{@@namespace "awk"}. Similarly, each chunk of
@@ -32041,7 +32166,7 @@ command-line code supplied with @option{-e} has such an
implicit
initial statement (@pxref{Options}).
@cindex current namespace, pushing and popping
-@cindex namespace, pushing and popping
+@cindex namespace @subentry pushing and popping
Files included with @code{@@include} (@pxref{Include Files}) ``push''
and ``pop'' the current namespace. That is, each @code{@@include} saves
the current namespace and starts over with an implicit @samp{@@namespace
@@ -32050,20 +32175,23 @@ directive is seen. When @command{gawk} finishes
processing the included
file, the saved namespace is restored and processing continues where it
left off in the original file.
-@cindex @code{@@namespace}, no effect on @code{BEGIN}@comma{}
@code{BEGINFILE}@comma{} @code{END}@comma{} and @code{ENDFILE}
-@cindex @code{BEGIN} pattern, execution order not affected by
@code{@@namespace}
-@cindex @code{BEGINFILE} pattern, execution order not affected by
@code{@@namespace}
-@cindex @code{END} pattern, execution order not affected by @code{@@namespace}
-@cindex @code{ENDFILE} pattern, execution order not affected by
@code{@@namespace}
+@cindex @code{@@} (at-sign) @subentry @code{@@namespace} directive @subentry
@code{BEGIN}, @code{BEGINFILE}, @code{END}, @code{ENDFILE} and
+@cindex at-sign (@code{@@}) @subentry @code{@@namespace} directive @subentry
@code{BEGIN}, @code{BEGINFILE}, @code{END}, @code{ENDFILE} and
+@cindex @code{BEGIN} pattern @subentry @code{@@namespace} directive and
+@cindex @code{BEGINFILE} pattern @subentry @code{@@namespace} directive and
+@cindex @code{END} pattern @subentry @code{@@namespace} directive and
+@cindex @code{ENDFILE} pattern @subentry @code{@@namespace} directive and
+@cindex @code{@@namespace} directive @sortas{namespace directive}
The use of @code{@@namespace} has no influence upon the order of execution
of @code{BEGIN}, @code{BEGINFILE}, @code{END}, and @code{ENDFILE} rules.
@node Naming Rules
@section Namespace and Component Naming Rules
-@cindex naming rules, namespaces and component names
-@cindex namespace names, naming rules
-@cindex component names, naming rules
+@cindex naming rules, namespace and component names
+@cindex namespaces @subentry naming rules
+@c not "component names" to merge with other index entry
+@cindex component name @subentry naming rules
A number of rules apply to the namespace and component names, as follows.
@itemize @bullet
@@ -32130,8 +32258,8 @@ $ @kbd{gawk -f systime.awk}
@section Internal Name Management
@cindex name management
-@cindex @code{awk} namespace, identifier name storage
-@cindex @code{awk} namespace, use for indirect function calls
+@cindex @code{awk} @subentry namespace @subentry identifier name storage
+@cindex @code{awk} @subentry namespace @subentry use for indirect function
calls
For backwards compatibility, all identifiers in the @code{awk} namespace
are stored internally as unadorned identifiers (that is, without a
leading @samp{awk::}). This is mainly relevant
@@ -32162,7 +32290,7 @@ function compute() @ii{This is really}
report::compute()
@node Namespace Example
@section Namespace Example
-@cindex namespace, example code
+@cindex namespace @subentry example code
The following example is a revised version of the suite of routines
developed in @ref{Passwd Functions}. See there for an explanation
of how the code works.
@@ -32288,8 +32416,8 @@ $ @kbd{gawk -f ns_passwd.awk -f testpasswd.awk}
This @value{SECTION} looks briefly at how the namespace facility interacts
with other important @command{gawk} features.
-@cindex namespaces, interaction with profiler
-@cindex namespaces, interaction with pretty printer
+@cindex namespaces @subentry interaction with @subentry profiler
+@cindex namespaces @subentry interaction with @subentry pretty printer
@cindex profiler, interaction with namespaces
@cindex pretty printer, interaction with namespaces
The profiler and pretty-printer (@pxref{Profiling}) have been enhanced
@@ -32299,15 +32427,15 @@ namespace together, and has @code{@@namespace}
directives in front
of rules as necessary. This allows component names to be
simple identifiers, instead of using qualified identifiers everywhere.
-@cindex namespaces, interaction with debugger
-@cindex debugger, interaction with namespaces
+@cindex namespaces @subentry interaction with @subentry debugger
+@cindex debugger @subentry interaction with namespaces
Interaction with the debugger (@pxref{Debugging}) has not had to change
(at least as of this writing). Some of the internal byte codes changed
in order to accommodate namespaces, and the debugger's @code{dump} command
was adjusted to match.
-@cindex namespaces, interaction with extension API
-@cindex extension API interaction with namespaces
+@cindex namespaces @subentry interaction with @subentry extension API
+@cindex extension API @subentry interaction with namespaces
The extension API (@pxref{Dynamic Extensions}) has always allowed for
placing functions into a different namespace, although this was not
previously implemented. However, the symbol lookup and symbol update
@@ -32344,7 +32472,7 @@ namespaces smoothly with their operation. This applies
most notably to
the profiler / pretty-printer (@pxref{Profiling}) and to the extension
facility (@pxref{Dynamic Extensions}).
-@cindex namespaces, backwards compatibility
+@cindex namespaces @subentry backwards compatibility
@item
Overall, the namespace facility was designed and implemented such that
backwards compatibility is paramount. Programs that don't use namespaces
@@ -32357,7 +32485,7 @@ version of @command{gawk}.
@cindex arbitrary precision
@cindex multiple precision
@cindex infinite precision
-@cindex floating-point, numbers@comma{} arbitrary-precision
+@cindex floating-point @subentry numbers @subentry arbitrary-precision
This @value{CHAPTER} introduces some basic concepts relating to
how computers do arithmetic and defines some important terms.
@@ -32426,7 +32554,7 @@ The advantage to integer numbers is that they represent
values exactly.
The disadvantage is that their range is limited.
@cindex unsigned integers
-@cindex integers, unsigned
+@cindex integers @subentry unsigned
In computers, integer values come in two flavors: @dfn{signed} and
@dfn{unsigned}. Signed values may be negative or positive, whereas
unsigned values are always greater than or equal
@@ -32436,7 +32564,7 @@ In computer systems, integer arithmetic is exact, but
the possible
range of values is limited. Integer arithmetic is generally faster than
floating-point arithmetic.
-@cindex floating-point, numbers
+@cindex floating-point @subentry numbers
@item Floating-point arithmetic
Floating-point numbers represent what were called in school ``real''
numbers (i.e., those that have a fractional part, such as 3.1415927).
@@ -32448,9 +32576,9 @@ Modern systems support floating-point arithmetic in
hardware, with a
limited range of values. There are software libraries that allow
the use of arbitrary-precision floating-point calculations.
-@cindex floating-point, numbers@comma{} single-precision
-@cindex floating-point, numbers@comma{} double-precision
-@cindex floating-point, numbers@comma{} arbitrary-precision
+@cindex floating-point @subentry numbers @subentry single-precision
+@cindex floating-point @subentry numbers @subentry double-precision
+@cindex floating-point @subentry numbers @subentry arbitrary-precision
@cindex single-precision
@cindex double-precision
@cindex arbitrary precision
@@ -33074,7 +33202,7 @@ cause any accumulating round-off error to cancel itself
out. This is the
default rounding mode for IEEE 754 computing functions and operators.
@c January 2018. Thanks to address@hidden for the example.
-@cindex sidebar, Rounding Modes and Conversion
+@cindex sidebar @subentry Rounding Modes and Conversion
@ifdocbook
@docbook
<sidebar><title>Rounding Modes and Conversion</title>
@@ -33159,8 +33287,8 @@ output when you change the rounding mode to be sure.
@node Arbitrary Precision Integers
@section Arbitrary-Precision Integer Arithmetic with @command{gawk}
-@cindex integers, arbitrary precision
-@cindex arbitrary precision integers
+@cindex integers @subentry arbitrary precision
+@cindex arbitrary precision @subentry integers
When given the @option{-M} option,
@command{gawk} performs all integer arithmetic using GMP arbitrary-precision
@@ -33392,7 +33520,6 @@ word sizes. See
@node Checking for MPFR
@section How To Check If MPFR Is Available
-@cindex MPFR, checking availability of
@cindex checking for MPFR
@cindex MPFR, checking for
Occasionally, you might like to be able to check if @command{gawk}
@@ -33546,6 +33673,7 @@ $ @kbd{echo 0xDeadBeef | gawk '@{ print $1 + 0 @}'}
Thus, @samp{+nan} and @samp{+NaN} are the same.
@end itemize
+@cindex POSIX mode
Besides handling input, @command{gawk} also needs to print ``correct'' values
on
output when a value is either NaN or infinity. Starting with @value{PVERSION}
4.2.2, for such values @command{gawk} prints one of the four strings
@@ -34041,7 +34169,7 @@ the macros as if they were functions.
@node General Data Types
@subsection General-Purpose Data Types
-@cindex Robbins, Arnold
+@cindex Robbins @subentry Arnold
@cindex Ramey, Chet
@quotation
@i{I have a true love/hate relationship with unions.}
@@ -34251,7 +34379,7 @@ process and reduces the time needed to create the value.
@node Memory Allocation Functions
@subsection Memory Allocation Functions and Convenience Macros
@cindex allocating memory for extensions
-@cindex extensions, allocating memory
+@cindex extensions @subentry loadable @subentry allocating memory
@cindex memory, allocating for extensions
The API provides a number of @dfn{memory allocation} functions for
@@ -34444,8 +34572,8 @@ to be a @samp{char *} value pointing to data previously
obtained from
@node Registration Functions
@subsection Registration Functions
-@cindex register extension
-@cindex extension registration
+@cindex register loadable extension
+@cindex extensions @subentry loadable @subentry registration
This @value{SECTION} describes the API functions for
registering parts of your extension with @command{gawk}.
@@ -35124,7 +35252,7 @@ Register the two-way processor pointed to by
@code{two_way_processor} with
@node Printing Messages
@subsection Printing Messages
-@cindex printing messages from extensions
+@cindex printing @subentry messages from extensions
@cindex messages from extensions
You can print different kinds of warning messages from your
@@ -35673,7 +35801,7 @@ you should release any cached values that you created,
using
@node Array Manipulation
@subsection Array Manipulation
@cindex array manipulation in extensions
-@cindex extensions, array manipulation in
+@cindex extensions @subentry loadable @subentry array manipulation in
The primary data structure@footnote{OK, the only data structure.} in
@command{awk}
is the associative array (@pxref{Arrays}).
@@ -36349,8 +36477,8 @@ information about how @command{gawk} was invoked.
@node Extension Versioning
@subsubsection API Version Constants and Variables
-@cindex API version
-@cindex extension API version
+@cindex API @subentry version
+@cindex extension API @subentry version number
The API provides both a ``major'' and a ``minor'' version number.
The API versions are available at compile time as C preprocessor defines
@@ -36450,8 +36578,8 @@ calls @code{check_mpfr_version()}.
@node Extension API Informational Variables
@subsubsection Informational Variables
-@cindex API informational variables
-@cindex extension API informational variables
+@cindex API @subentry informational variables
+@cindex extension API @subentry informational variables
The API provides access to several variables that describe
whether the corresponding command-line options were enabled when
@@ -36663,7 +36791,7 @@ The @code{get_file()} API is new
@node Finding Extensions
@section How @command{gawk} Finds Extensions
-@cindex extension search path
+@cindex extensions @subentry loadable @subentry search path
@cindex finding extensions
Compiled extensions have to be installed in a directory where
@@ -36675,7 +36803,7 @@ path with a list of directories to search for compiled
extensions.
@node Extension Example
@section Example: Some File Functions
-@cindex extension example
+@cindex extensions @subentry loadable @subentry example
@quotation
@i{No matter where you go, there you are.}
@@ -36889,7 +37017,7 @@ static const char *ext_version = "filefuncs extension:
version 1.0";
int plugin_is_GPL_compatible;
@end example
-@cindex programming conventions, @command{gawk} extensions
+@cindex programming conventions @subentry @command{gawk} extensions
By convention, for an @command{awk} function @code{foo()}, the C function
that implements it is called @code{do_foo()}. The function should have
two arguments. The first is an @code{int}, usually called @code{nargs},
@@ -37231,7 +37359,7 @@ And that's it!
@node Using Internal File Ops
@subsection Integrating the Extensions
-@cindex @command{gawk}, interpreter@comma{} adding code to
+@cindex @command{gawk} @subentry interpreter, adding code to
Now that the code is written, it must be possible to add it at
runtime to the running @command{gawk} interpreter. First, the
code must be compiled. Assuming that the functions are in
@@ -37313,7 +37441,7 @@ $ @kbd{AWKLIBPATH=$PWD gawk -f testff.awk}
@node Extension Samples
@section The Sample Extensions in the @command{gawk} Distribution
-@cindex extensions distributed with @command{gawk}
+@cindex extensions @subentry loadable @subentry distributed with @command{gawk}
This @value{SECTION} provides a brief overview of the sample extensions
that come in the @command{gawk} distribution. Some of them are intended
@@ -38023,8 +38151,7 @@ for more information.
@node gawkextlib
@section The @code{gawkextlib} Project
-@cindex @code{gawkextlib}
-@cindex extensions, where to find
+@cindex extensions @subentry loadable @subentry @code{gawkextlib} project
@cindex @code{gawkextlib} project
The @uref{https://sourceforge.net/projects/gawkextlib/, @code{gawkextlib}}
@@ -38344,8 +38471,8 @@ online documentation}.
@node V7/SVR3.1
@appendixsec Major Changes Between V7 and SVR3.1
-@cindex @command{awk}, versions of
-@cindex @command{awk}, versions of, changes between V7 and SVR3.1
+@cindex @command{awk} @subentry versions of
+@cindex @command{awk} @subentry versions of @subentry changes between V7 and
SVR3.1
The @command{awk} language evolved considerably between the release of
Version 7 Unix (1978) and the new version that was first made generally
available in
@@ -38435,7 +38562,7 @@ Multidimensional arrays
@node SVR4
@appendixsec Changes Between SVR3.1 and SVR4
-@cindex @command{awk}, versions of, changes between SVR3.1 and SVR4
+@cindex @command{awk} @subentry versions of @subentry changes between SVR3.1
and SVR4
The System V Release 4 (1989) version of Unix @command{awk} added these
features
(some of which originated in @command{gawk}):
@@ -38493,8 +38620,8 @@ Processing of escape sequences inside command-line
variable assignments
@node POSIX
@appendixsec Changes Between SVR4 and POSIX @command{awk}
-@cindex @command{awk}, versions of, changes between SVR4 and POSIX
@command{awk}
-@cindex POSIX @command{awk}, changes in @command{awk} versions
+@cindex @command{awk} @subentry versions of @subentry changes between SVR4 and
POSIX @command{awk}
+@cindex POSIX @command{awk} @subentry changes in @command{awk} versions
The POSIX Command Language and Utilities standard for @command{awk} (1992)
introduced the following changes into the language:
@@ -38549,9 +38676,9 @@ The 2008 POSIX standard can be found online at
@node BTL
@appendixsec Extensions in Brian Kernighan's @command{awk}
-@cindex @command{awk}, versions of, See Also Brian Kernighan's @command{awk}
-@cindex extensions, Brian Kernighan's @command{awk}
-@cindex Brian Kernighan's @command{awk}, extensions
+@cindex @command{awk} @subentry versions of @seealso{Brian Kernighan's
@command{awk}}
+@cindex extensions @subentry Brian Kernighan's @command{awk}
+@cindex Brian Kernighan's @command{awk} @subentry extensions
@cindex Kernighan, Brian
Brian Kernighan
has made his version available via his home page
@@ -38590,9 +38717,9 @@ available in his @command{awk}.
@node POSIX/GNU
@appendixsec Extensions in @command{gawk} Not in POSIX @command{awk}
-@cindex compatibility mode (@command{gawk}), extensions
-@cindex extensions, in @command{gawk}, not in POSIX @command{awk}
-@cindex POSIX, @command{gawk} extensions not included in
+@cindex compatibility mode (@command{gawk}) @subentry extensions
+@cindex extensions @subentry in @command{gawk}, not in POSIX @command{awk}
+@cindex POSIX @subentry @command{gawk} extensions not included in
The GNU implementation, @command{gawk}, adds a large number of features.
They can all be disabled with either the @option{--traditional} or
@option{--posix} options
@@ -39430,6 +39557,7 @@ a global symbol indicating that they are GPL-compatible
(@pxref{Plugin License}).
@item
+@cindex POSIX mode
In POSIX mode, string comparisons use @code{strcoll()} / @code{wcscoll()}
(@pxref{POSIX String Comparison}).
@@ -39688,8 +39816,8 @@ unfortunately.
@node Common Extensions
@appendixsec Common Extensions Summary
-@cindex extensions, Brian Kernighan's @command{awk}
-@cindex extensions, @command{mawk}
+@cindex extensions @subentry Brian Kernighan's @command{awk}
+@cindex extensions @subentry @command{mawk}
The following table summarizes the common extensions supported
by @command{gawk}, Brian Kernighan's @command{awk}, and @command{mawk},
the three most widely used freely available versions of @command{awk}
@@ -39720,6 +39848,8 @@ This @value{SECTION} describes the confusing history of
ranges within
regular expressions and their interactions with locales, and how this
affected different versions of @command{gawk}.
+@cindex ASCII
+@cindex EBCDIC
The original Unix tools that worked with regular expressions defined
character ranges (such as @samp{[a-z]}) to match any character between
the first character in the range and the last character in the range,
@@ -39777,6 +39907,7 @@ This result is due to the locale setting (and thus you
may not see
it on your system).
@cindex Unicode
+@cindex ASCII
Similar considerations apply to other ranges. For example, @samp{["-/]}
is perfectly valid in ASCII, but is not valid in many Unicode locales,
such as @code{en_US.UTF-8}.
@@ -39819,7 +39950,7 @@ In all cases @command{gawk} remains POSIX-compliant.
@node Contributors
@appendixsec Major Contributors to @command{gawk}
-@cindex @command{gawk}, list of contributors to
+@cindex @command{gawk} @subentry list of contributors to
@quotation
@i{Always give credit where credit is due.}
@author Anonymous
@@ -40006,7 +40137,7 @@ of IBM in Japan, contributed support for multibyte
characters.
Michael Benzinger contributed the initial code for @code{switch} statements.
@item
-@cindex McPhee, Patrick
+@cindex McPhee, Patrick T.J.@:
Patrick T.J.@: McPhee contributed the code for dynamic loading in Windows32
environments.
(This is no longer supported.)
@@ -40088,7 +40219,7 @@ distribution.
Juan Manuel Guerrero took over maintenance of the DJGPP port.
@item
-@cindex Robbins, Arnold
+@cindex Robbins @subentry Arnold
Arnold Robbins
has been working on @command{gawk} since 1988, at first
helping David Trueman, and as the primary maintainer since around 1994.
@@ -40116,6 +40247,8 @@ They can be disabled with either the
@option{--traditional} or @option{--posix}
options.
@item
+@cindex ASCII
+@cindex EBCDIC
The interaction of POSIX locales and regexp matching in @command{gawk} has
been confusing over
the years. Today, @command{gawk} implements Rational Range Interpretation,
where
ranges of the form @samp{[a-z]} match @emph{only} the characters numerically
between
@@ -40133,8 +40266,11 @@ the appropriate credit where credit is due.
@appendix Installing @command{gawk}
@c last two commas are part of see also
-@cindex operating systems, See Also GNU/Linux@comma{} PC operating
systems@comma{} Unix
-@cindex @command{gawk}, installing
+@cindex operating systems
+@cindex operating systems @seealso{GNU/Linux}
+@cindex operating systems @seealso{PC operating systems}
+@cindex operating systems @seealso{Unix}
+@cindex @command{gawk} @subentry installing
@cindex installing @command{gawk}
This appendix provides instructions for installing @command{gawk} on the
various platforms that are supported by the developers. The primary
@@ -40157,7 +40293,7 @@ the respective ports.
@node Gawk Distribution
@appendixsec The @command{gawk} Distribution
-@cindex source code, @command{gawk}
+@cindex source code @subentry @command{gawk}
This @value{SECTION} describes how to get the @command{gawk}
distribution, how to extract it, and then what is in the various files and
@@ -40171,7 +40307,7 @@ subdirectories.
@node Getting
@appendixsubsec Getting the @command{gawk} Distribution
-@cindex @command{gawk}, source code@comma{} obtaining
+@cindex @command{gawk} @subentry source code, obtaining
There are two ways to get GNU software:
@itemize @value{BULLET}
@@ -40247,7 +40383,7 @@ a local expert.
@node Distribution contents
@appendixsubsec Contents of the @command{gawk} Distribution
-@cindex @command{gawk}, distribution
+@cindex @command{gawk} @subentry distribution
The @command{gawk} distribution has a number of C source files,
documentation files,
@@ -40303,7 +40439,7 @@ A description of behaviors in the POSIX standard for
@command{awk} that
are left undefined, or where @command{gawk} may not comply fully, as well
as a list of things that the POSIX standard should describe but does not.
-@cindex artificial intelligence@comma{} @command{gawk} and
+@cindex artificial intelligence, @command{gawk} and
@item doc/awkforai.txt
Pointers to the original draft of
a short article describing why @command{gawk} is a good language for
@@ -40555,26 +40691,32 @@ on other platforms, the appropriate location may be
different.
@table @command
@cindex @command{gawkpath_default} shell function
+@cindex shell function @subentry @command{gawkpath_default}
@item gawkpath_default
Reset the @env{AWKPATH} environment variable to its default value.
@cindex @command{gawkpath_prepend} shell function
+@cindex shell function @subentry @command{gawkpath_prepend}
@item gawkpath_prepend
Add the argument to the front of the @env{AWKPATH} environment variable.
@cindex @command{gawkpath_append} shell function
+@cindex shell function @subentry @command{gawkpath_append}
@item gawkpath_append
Add the argument to the end of the @env{AWKPATH} environment variable.
@cindex @command{gawklibpath_default} shell function
+@cindex shell function @subentry @command{gawklibpath_default}
@item gawklibpath_default
Reset the @env{AWKLIBPATH} environment variable to its default value.
@cindex @command{gawklibpath_prepend} shell function
+@cindex shell function @subentry @command{gawklibpath_prepend}
@item gawklibpath_prepend
Add the argument to the front of the @env{AWKLIBPATH} environment variable.
@cindex @command{gawklibpath_append} shell function
+@cindex shell function @subentry @command{gawklibpath_append}
@item gawklibpath_append
Add the argument to the end of the @env{AWKLIBPATH} environment variable.
@@ -40583,8 +40725,8 @@ Add the argument to the end of the @env{AWKLIBPATH}
environment variable.
@node Additional Configuration Options
@appendixsubsec Additional Configuration Options
-@cindex @command{gawk}, configuring, options
-@cindex configuration options@comma{} @command{gawk}
+@cindex @command{gawk} @subentry configuring @subentry options
+@cindex configuration options, @command{gawk}
There are several additional options you may use on the @command{configure}
command line when compiling @command{gawk} from scratch, including:
@@ -40592,7 +40734,7 @@ command line when compiling @command{gawk} from
scratch, including:
@table @code
@cindex @option{--disable-extensions} configuration option
-@cindex configuration option, @code{--disable-extensions}
+@cindex configuration option @subentry @code{--disable-extensions}
@item --disable-extensions
Disable the extension mechanism within @command{gawk}. With this
option, it is not possible to use dynamic extensions. This also
@@ -40604,7 +40746,7 @@ The default action is to dynamically check if the
extensions
can be configured and compiled.
@cindex @option{--disable-lint} configuration option
-@cindex configuration option, @code{--disable-lint}
+@cindex configuration option @subentry @code{--disable-lint}
@item --disable-lint
Disable all lint checking within @command{gawk}. The
@option{--lint} and @option{--lint-old} options
@@ -40627,21 +40769,21 @@ to fail. This option may be removed at a later date.
@end quotation
@cindex @option{--disable-mpfr} configuration option
-@cindex configuration option, @code{--disable-mpfr}
+@cindex configuration option @subentry @code{--disable-mpfr}
@item --disable-mpfr
Skip checking for the MPFR and GMP libraries. This is useful
mainly for the developers, to make sure nothing breaks if
MPFR support is not available.
@cindex @option{--disable-nls} configuration option
-@cindex configuration option, @code{--disable-nls}
+@cindex configuration option @subentry @code{--disable-nls}
@item --disable-nls
Disable all message-translation facilities.
This is usually not desirable, but it may bring you some slight performance
improvement.
@cindex @option{--enable-versioned-extension-dir} configuration option
-@cindex configuration option, @code{--enable-versioned-extension-dir}
+@cindex configuration option @subentry @code{--enable-versioned-extension-dir}
@item --enable-versioned-extension-dir
Use a versioned directory for extensions. The directory name will
include the major and minor API versions in it. This makes it possible
@@ -40656,7 +40798,7 @@ options supplied by @command{configure}.
@node Configuration Philosophy
@appendixsubsec The Configuration Process
-@cindex @command{gawk}, configuring
+@cindex @command{gawk} @subentry configuring
This @value{SECTION} is of interest only if you know something about using the
C language and Unix-like operating systems.
@@ -40717,8 +40859,8 @@ various non-Unix systems.
@node PC Installation
@appendixsubsec Installation on MS-Windows
-@cindex PC operating systems@comma{} @command{gawk} on, installing
-@cindex operating systems, PC@comma{} @command{gawk} on, installing
+@cindex PC operating systems, @command{gawk} on @subentry installing
+@cindex operating systems @subentry PC, @command{gawk} on @subentry installing
This @value{SECTION} covers installation and usage of @command{gawk}
on Intel architecture machines running any version of MS-Windows.
In this @value{SECTION}, the term ``Windows32''
@@ -40737,6 +40879,7 @@ See also the @file{README_d/README.pc} file in the
distribution.
@node PC Binary Installation
@appendixsubsubsec Installing a Prepared Distribution for MS-Windows Systems
+@cindex installing @command{gawk} @subentry MS-Windows
The only supported binary distribution for MS-Windows systems
is that provided by Eli Zaretskii's
@uref{https://sourceforge.net/projects/ezwinports/,
@@ -40750,7 +40893,7 @@ The file @file{README_d/README.pc} in the
@command{gawk} distribution
contains additional notes, and @file{pc/Makefile} contains important
information on compilation options.
-@cindex compiling @command{gawk} for MS-Windows
+@cindex compiling @command{gawk} @subentry for MS-Windows
To build @command{gawk} for Windows32, copy the files in
the @file{pc} directory (@emph{except} for @file{ChangeLog}) to the
directory with the rest of the @command{gawk} sources, then invoke
@@ -40767,7 +40910,7 @@ type @samp{make mingw32}.
@node PC Using
@appendixsubsubsec Using @command{gawk} on PC Operating Systems
-@cindex operating systems, PC, @command{gawk} on
+@cindex operating systems @subentry PC, @command{gawk} on
@cindex PC operating systems, @command{gawk} on
Information in this section applies to the MinGW and
@@ -40780,20 +40923,21 @@ both the @samp{|&} operator and TCP/IP networking
The DJGPP environment does not support @samp{|&}.
@cindex search paths
-@cindex search paths, for source files
-@cindex @command{gawk}, MS-Windows version of
-@cindex @code{;} (semicolon), @env{AWKPATH} variable and
-@cindex semicolon (@code{;}), @env{AWKPATH} variable and
+@cindex search paths @subentry for source files
+@cindex @command{gawk} @subentry MS-Windows version of
+@cindex @code{;} (semicolon) @subentry @env{AWKPATH} variable and
+@cindex semicolon (@code{;}) @subentry @env{AWKPATH} variable and
@cindex @env{AWKPATH} environment variable
+@cindex environment variables @subentry @env{AWKPATH}
The MS-Windows version of @command{gawk} searches for
program files as described in @ref{AWKPATH Variable}. However,
semicolons (rather than colons) separate elements in the @env{AWKPATH}
variable. If @env{AWKPATH} is not set or is empty, then the default
search path is @samp{@w{.;c:/lib/awk;c:/gnu/lib/awk}}.
-@cindex common extensions, @code{BINMODE} variable
-@cindex extensions, common@comma{} @code{BINMODE} variable
-@cindex differences in @command{awk} and @command{gawk}, @code{BINMODE}
variable
+@cindex common extensions @subentry @code{BINMODE} variable
+@cindex extensions @subentry common @subentry @code{BINMODE} variable
+@cindex differences in @command{awk} and @command{gawk} @subentry
@code{BINMODE} variable
@cindex @code{BINMODE} variable
Under MS-Windows,
@command{gawk} (and many other text programs) silently
@@ -40889,7 +41033,7 @@ moved into the @code{BEGIN} rule.
@node Cygwin
@appendixsubsubsec Using @command{gawk} In The Cygwin Environment
-@cindex compiling @command{gawk} for Cygwin
+@cindex compiling @command{gawk} @subentry for Cygwin
@command{gawk} can be built and used ``out of the box'' under MS-Windows
if you are using the @uref{http://www.cygwin.com, Cygwin environment}.
@@ -40909,6 +41053,10 @@ When compared to GNU/Linux on the same system, the
@samp{configure}
step on Cygwin takes considerably longer. However, it does finish,
and then the @samp{make} proceeds as usual.
+@cindex installing @command{gawk} @subentry Cygwin
+You may also install @command{gawk} using the regular Cygwin installer.
+In general Cygwin supplies the latest released version.
+
Recent versions of Cygwin open all files in binary mode. This means
that you should use @samp{RS = "\r?\n"} in order to be able to
handle standard MS-Windows text files with carriage-return plus
@@ -40936,8 +41084,8 @@ translation of @code{"\r\n"}, because it won't.
@c now address@hidden
@c now address@hidden
-@cindex @command{gawk}, VMS version of
-@cindex installation, VMS
+@cindex @command{gawk} @subentry VMS version of
+@cindex installing @command{gawk} @subentry VMS
This @value{SUBSECTION} describes how to compile and install @command{gawk}
under VMS.
The older designation ``VMS'' is used throughout to refer to OpenVMS.
@@ -40953,7 +41101,7 @@ The older designation ``VMS'' is used throughout to
refer to OpenVMS.
@node VMS Compilation
@appendixsubsubsec Compiling @command{gawk} on VMS
-@cindex compiling @command{gawk} for VMS
+@cindex compiling @command{gawk} @subentry for VMS
To compile @command{gawk} under VMS, there is a @code{DCL} command procedure
that issues all the necessary @code{CC} and @code{LINK} commands. There is
@@ -41151,7 +41299,7 @@ flag is required to force Unix-style parsing rather
than @code{DCL} parsing.
If any other dash-type options (or multiple parameters such as @value{DF}s to
process) are present, there is no ambiguity and @option{--} can be omitted.
-@cindex exit status, of @command{gawk}, on VMS
+@cindex exit status, of @command{gawk} @subentry on VMS
The @code{exit} value is a Unix-style value and is encoded into a VMS exit
status value when the program exits.
@@ -41177,7 +41325,7 @@ Older versions of @command{gawk} for VMS treated a Unix
exit code 0 as 1,
a failure as 2, a fatal error as 4, and passed all the other numbers through.
This violated the VMS exit status coding requirements.
-@cindex floating-point, VAX/VMS
+@cindex floating-point @subentry numbers @subentry VAX/VMS
VAX/VMS floating point uses unbiased rounding. @xref{Round Function}.
VMS reports time values in GMT unless one of the @code{SYS$TIMEZONE_RULE}
@@ -41187,7 +41335,7 @@ or @code{TZ} logical names is set. Older versions of
VMS, such as VAX/VMS
@c @cindex directory search
@c @cindex path, search
@cindex search paths
-@cindex search paths, for source files
+@cindex search paths @subentry for source files
The default search path, when looking for @command{awk} program files specified
by the @option{-f} option, is @code{"SYS$DISK:[],AWK_LIBRARY:"}. The logical
name @env{AWKPATH} can be used to override this default. The format
@@ -41195,7 +41343,7 @@ of @env{AWKPATH} is a comma-separated list of directory
specifications.
When defining it, the value should be quoted so that it retains a single
translation and not a multitranslation @code{RMS} searchlist.
-@cindex redirection on VMS
+@cindex redirection @subentry on VMS
This restriction also applies to running @command{gawk} under GNV,
as redirection is always to a DCL command.
@@ -41316,7 +41464,7 @@ recommend compiling and using the current version.
@c the radio show, not the book. :-)
@cindex debugging @command{gawk}, bug reports
-@cindex troubleshooting, @command{gawk}, bug reports
+@cindex troubleshooting @subentry @command{gawk} @subentry bug reports
If you have problems with @command{gawk} or think that you have found a bug,
report it to the developers; we cannot promise to do anything,
but we might well want to fix it.
@@ -41450,7 +41598,7 @@ The people maintaining the various @command{gawk} ports
are:
@cindex Malmberg, John
@cindex Pitts, Dave
@cindex G., Daniel Richard
-@cindex Robbins, Arnold
+@cindex Robbins @subentry Arnold
@cindex Zaretskii, Eli
@cindex Guerrero, Juan Manuel
@multitable {MS-Windows with MinGW}
{123456789012345678901234567890123456789001234567890}
@@ -41475,7 +41623,7 @@ report to the @EMAIL{bug-gawk@@gnu.org,bug-gawk at gnu
dot org} email list as we
@node Other Versions
@appendixsec Other Freely Available @command{awk} Implementations
-@cindex @command{awk}, implementations
+@cindex @command{awk} @subentry implementations
@ignore
From: emory!amc.com!brennan (Michael Brennan)
Subject: C++ comments in awk programs
@@ -41504,9 +41652,9 @@ This @value{SECTION} briefly describes where to get
them:
@table @asis
@cindex Kernighan, Brian
-@cindex source code, Brian Kernighan's @command{awk}
-@cindex @command{awk}, versions of, See Also Brian Kernighan's @command{awk}
-@cindex Brian Kernighan's @command{awk}, source code
+@cindex source code @subentry Brian Kernighan's @command{awk}
+@cindex @command{awk} @subentry versions of @seealso{Brian Kernighan's
@command{awk}}
+@cindex Brian Kernighan's @command{awk} @subentry source code
@item Unix @command{awk}
Brian Kernighan, one of the original designers of Unix @command{awk},
has made his implementation of
@@ -41540,7 +41688,7 @@ available at
@uref{git://github.com/danfuzz/one-true-awk}.
@cindex Brennan, Michael
@cindex @command{mawk} utility
-@cindex source code, @command{mawk}
+@cindex source code @subentry @command{mawk}
@item @command{mawk}
Michael Brennan wrote an independent implementation of @command{awk},
called @command{mawk}. It is available under the
@@ -41577,7 +41725,7 @@ His development snapshots are available via Git from
the project's
@cindex Sumner, Andrew
@cindex @command{awka} compiler for @command{awk}
-@cindex source code, @command{awka}
+@cindex source code @subentry @command{awka}
@item @command{awka}
Written by Andrew Sumner,
@command{awka} translates @command{awk} programs into C, compiles them,
@@ -41597,7 +41745,7 @@ since approximately 2001.
@cindex Beebe, Nelson H.F.@:
@cindex @command{pawk} (profiling version of Brian Kernighan's @command{awk})
-@cindex source code, @command{pawk}
+@cindex source code @subentry @command{pawk} (profiling version of Brian
Kernighan's @command{awk})
@item @command{pawk}
Nelson H.F.@: Beebe at the University of Utah has modified
BWK @command{awk} to provide timing and profiling information.
@@ -41611,7 +41759,7 @@ or
@item BusyBox @command{awk}
@cindex BusyBox Awk
-@cindex source code, BusyBox Awk
+@cindex source code @subentry BusyBox Awk
BusyBox is a GPL-licensed program providing small versions of many
applications within a single executable. It is aimed at embedded systems.
It includes a full implementation of POSIX @command{awk}. When building
@@ -41621,7 +41769,7 @@ information, see the @uref{https://busybox.net,
project's home page}.
@cindex OpenSolaris
@cindex Solaris, POSIX-compliant @command{awk}
-@cindex source code, Solaris @command{awk}
+@cindex source code @subentry Solaris @command{awk}
@item The OpenSolaris POSIX @command{awk}
The versions of @command{awk} in @file{/usr/xpg4/bin} and
@file{/usr/xpg6/bin} on Solaris are more or less POSIX-compliant.
@@ -41631,9 +41779,8 @@ with 1--2 hours of work. Making it more generally
portable (using
GNU Autoconf and/or Automake) would take more work, and this
has not been done, at least to our knowledge.
-@cindex Illumos
@cindex Illumos, POSIX-compliant @command{awk}
-@cindex source code, Illumos @command{awk}
+@cindex source code @subentry Illumos @command{awk}
The source code used to be available from the OpenSolaris website.
However, that project was ended and the website shut down. Fortunately, the
@uref{https://wiki.illumos.org/display/illumos/illumos+Home, Illumos project}
@@ -41642,8 +41789,8 @@ makes this implementation available. You can view the
files one at a time from
@cindex @command{goawk}
@cindex Go implementation of @command{awk}
-@cindex source code, @command{goawk}
-@cindex programming languages, Go
+@cindex source code @subentry @command{goawk}
+@cindex programming languages @subentry Go
@item @command{goawk}
This is an @command{awk} interpreter written in the
@uref{https://golang.org/, Go programming language}.
@@ -41655,7 +41802,7 @@ describing the implementation.
@cindex @command{jawk}
@cindex Java implementation of @command{awk}
-@cindex source code, @command{jawk}
+@cindex source code @subentry @command{jawk}
@item @command{jawk}
This is an interpreter for @command{awk} written in Java. It claims
to be a full interpreter, although because it uses Java facilities
@@ -41665,12 +41812,12 @@ from POSIX @command{awk}. More information is
available on the
@item Libmawk
@cindex libmawk
-@cindex source code, libmawk
+@cindex source code @subentry libmawk
This is an embeddable @command{awk} interpreter derived from
@command{mawk}. For more information, see
@uref{http://repo.hu/projects/libmawk/}.
-@cindex source code, embeddable @command{awk} interpreter
+@cindex source code @subentry embeddable @command{awk} interpreter
@cindex Neacsu, Mircea
@item Mircea Neacsu's Embeddable @command{awk}
Mircea Neacsu has created an embeddable @command{awk}
@@ -41678,7 +41825,7 @@ interpreter, based on BWK awk. It's available
at @uref{https://github.com/neacsum/awk}.
@item @code{pawk}
-@cindex source code, @command{pawk} (Python version)
+@cindex source code @subentry @command{pawk} (Python version)
@cindex @code{pawk}, @command{awk}-like facilities for Python
This is a Python module that claims to bring @command{awk}-like
features to Python. See @uref{https://github.com/alecthomas/pawk}
@@ -41687,13 +41834,13 @@ modified version of BWK @command{awk}, described
earlier.)
@item @w{QSE @command{awk}}
@cindex QSE @command{awk}
-@cindex source code, QSE @command{awk}
+@cindex source code @subentry QSE @command{awk}
This is an embeddable @command{awk} interpreter. For more information,
see @uref{https://code.google.com/p/qse/}. @c and
@uref{http://awk.info/?tools/qse}.
@item @command{QTawk}
@cindex QuikTrim Awk
-@cindex source code, QuikTrim Awk
+@cindex source code @subentry QuikTrim Awk
This is an independent implementation of @command{awk} distributed
under the GPL. It has a large number of extensions over standard
@command{awk} and may not be 100% syntactically compatible with it.
@@ -41757,7 +41904,7 @@ implementations. Many are POSIX-compliant; others are
less so.
@ifclear FOR_PRINT
@node Notes
@appendix Implementation Notes
-@cindex @command{gawk}, implementation issues
+@cindex @command{gawk} @subentry implementation issues
@cindex implementation issues, @command{gawk}
This appendix contains information mainly of interest to implementers and
@@ -41776,10 +41923,10 @@ maintainers of @command{gawk}. Everything in it
applies specifically to
@node Compatibility Mode
@appendixsec Downward Compatibility and Debugging
-@cindex @command{gawk}, implementation issues, downward compatibility
-@cindex @command{gawk}, implementation issues, debugging
-@cindex troubleshooting, @command{gawk}
-@cindex implementation issues@comma{} @command{gawk}, debugging
+@cindex @command{gawk} @subentry implementation issues @subentry downward
compatibility
+@cindex @command{gawk} @subentry implementation issues @subentry debugging
+@cindex troubleshooting @subentry @command{gawk}
+@cindex implementation issues, @command{gawk} @subentry debugging
@xref{POSIX/GNU},
for a summary of the GNU extensions to the @command{awk} language and program.
@@ -41861,9 +42008,9 @@ that has a Git plug-in for working with Git
repositories.
@node Adding Code
@appendixsubsec Adding New Features
-@cindex adding, features to @command{gawk}
-@cindex features, adding to @command{gawk}
-@cindex @command{gawk}, features, adding
+@cindex adding @subentry features to @command{gawk}
+@cindex features @subentry adding to @command{gawk}
+@cindex @command{gawk} @subentry features @subentry adding
You are free to add any new features you like to @command{gawk}.
However, if you want your changes to be incorporated into the @command{gawk}
distribution, there are several steps that you need to take in order to
@@ -41909,7 +42056,7 @@ the GNU Project's
@uref{https://www.gnu.org/prep/standards/, website}.
Texinfo, Info, and DVI versions are also available.)
-@cindex @command{gawk}, coding style in
+@cindex @command{gawk} @subentry coding style in
@item
Use the @command{gawk} coding style.
The C code for @command{gawk} follows the instructions in the
@@ -42035,8 +42182,8 @@ probably will not.
@node New Ports
@appendixsubsec Porting @command{gawk} to a New Operating System
-@cindex portability, @command{gawk}
-@cindex operating systems, porting @command{gawk} to
+@cindex portability @subentry @command{gawk}
+@cindex operating systems @subentry porting @command{gawk} to
@cindex porting @command{gawk}
If you want to port @command{gawk} to a new operating system, there are
@@ -42385,7 +42532,7 @@ Larry
@end ignore
@cindex Perl
@cindex Wall, Larry
-@cindex Robbins, Arnold
+@cindex Robbins @subentry Arnold
@quotation
@i{AWK is a language similar to PERL, only considerably more elegant.}
@author Arnold Robbins
@@ -42693,8 +42840,8 @@ removed from the code base with the 4.2 release.
@node Basic Concepts
@appendix Basic Programming Concepts
-@cindex programming, concepts
-@cindex programming, concepts
+@cindex programming @subentry concepts
+@cindex programming @subentry concepts
This @value{APPENDIX} attempts to define some of the basic concepts
and terms that are used throughout the rest of this @value{DOCUMENT}.
@@ -42750,7 +42897,7 @@ or it may be @dfn{interpreted}. In the latter case, a
machine-executable
program such as @command{awk} reads your program, and then uses the
instructions in your program to process the data.
-@cindex programming, basic steps
+@cindex programming @subentry basic steps
When you write a program, it usually consists
of the following, very basic set of steps,
@ifnotdocbook
@@ -42835,7 +42982,7 @@ and even more often, as ``I/O'' for short.
(You will also see ``input'' and ``output'' used as verbs.)
@cindex data-driven languages
-@cindex languages@comma{} data-driven
+@cindex languages, data-driven
@command{awk} manages the reading of data for you, as well as the
breaking it up into records and fields. Your program's job is to
tell @command{awk} what to do with the data. You do this by describing
@@ -42858,8 +43005,8 @@ and the fields of the record.
You may also group multiple
associated values under one name, as an array.
-@cindex values, numeric
-@cindex values, string
+@cindex values @subentry numeric
+@cindex values @subentry string
@cindex scalar values
Data, particularly in @command{awk}, consists of either numeric
values, such as 42 or 3.1415927, or string values.
@@ -42943,7 +43090,7 @@ rule's action. Actions are always enclosed in braces.
(@xref{Action Overview}.)
@cindex Ada programming language
-@cindex programming languages, Ada
+@cindex programming languages @subentry Ada
@item Ada
A programming language originally defined by the U.S.@: Department of
Defense for embedded programming. It was designed to enforce good
@@ -42952,6 +43099,7 @@ Software Engineering practices.
@cindex Spencer, Henry
@cindex @command{sed} utility
@cindex amazing @command{awk} assembler (@command{aaa})
+@cindex @command{aaa} (amazing @command{awk} assembler) program
@item Amazing @command{awk} Assembler
Henry Spencer at the University of Toronto wrote a retargetable assembler
completely as @command{sed} and @command{awk} scripts. It is thousands
@@ -43178,8 +43326,8 @@ See ``Bracket Expression.''
See ``Bracket Expression.''
@cindex ASCII
-@cindex ISO 8859-1
-@cindex ISO Latin-1
+@cindex ISO @subentry ISO 8859-1 character set
+@cindex ISO @subentry ISO Latin-1 character set
@cindex character sets (machine character encodings)
@cindex Unicode
@item Character Set
@@ -43367,6 +43515,7 @@ The epoch on Unix and POSIX systems is 1970-01-01
00:00:00 UTC.
See also ``GMT'' and ``UTC.''
@item Escape Sequences
+@cindex ASCII
A special sequence of characters used for describing nonprinting
characters, such as @samp{\n} for newline or @samp{\033} for the ASCII
ESC (Escape) character. (@xref{Escape Sequences}.)
@@ -43450,8 +43599,6 @@ The @command{gawk} extension API provides constructor
functions
The GNU implementation of @command{awk}.
@cindex GPL (General Public License)
-@cindex General Public License (GPL)
-@cindex GNU General Public License
@item General Public License
This document describes the terms under which @command{gawk} and its source
code may be distributed. (@xref{Copying}.)
@@ -43538,7 +43685,7 @@ information about the name of the organization and its
language-independent
three-letter acronym.
@cindex Java programming language
-@cindex programming languages, Java
+@cindex programming languages @subentry Java
@item Java
A modern programming language originally developed by Sun Microsystems
(now Oracle) supporting Object-Oriented programming. Although usually
@@ -43845,7 +43992,6 @@ and POSIX systems. Used for the @command{gawk}
functions
@code{mktime()}, @code{strftime()}, and @code{systime()}.
See also ``Epoch,'' ``GMT,'' and ``UTC.''
-@cindex Linux
@cindex GNU/Linux
@cindex Unix
@cindex BSD-based operating systems
diff --git a/doc/gawktexi.in b/doc/gawktexi.in
index 03f58c3..d378b02 100644
--- a/doc/gawktexi.in
+++ b/doc/gawktexi.in
@@ -54,7 +54,7 @@
@c applies to and all the info about who's publishing this edition
@c These apply across the board.
-@set UPDATE-MONTH July, 2019
+@set UPDATE-MONTH September, 2019
@set VERSION 5.1
@set PATCHLEVEL 0
@@ -1312,6 +1312,7 @@ October 2014
</prefaceinfo>
@end docbook
+@cindex @command{awk}
Several kinds of tasks occur repeatedly when working with text files.
You might want to extract certain lines and discard the rest. Or you
may need to make changes wherever certain patterns appear, but leave the
@@ -1319,6 +1320,7 @@ rest of the file alone. Such jobs are often easy with
@command{awk}.
The @command{awk} utility interprets a special-purpose programming
language that makes it easy to handle simple data-reformatting jobs.
+@cindex @command{gawk}
The GNU implementation of @command{awk} is called @command{gawk}; if you
invoke it with the proper options or environment variables,
it is fully compatible with
@@ -1332,12 +1334,12 @@ properly written @command{awk} programs should work
with @command{gawk}.
So most of the time, we don't distinguish between @command{gawk} and other
@command{awk} implementations.
-@cindex @command{awk}, POSIX and, See Also POSIX @command{awk}
-@cindex @command{awk}, POSIX and
-@cindex POSIX, @command{awk} and
-@cindex @command{gawk}, @command{awk} and
-@cindex @command{awk}, @command{gawk} and
-@cindex @command{awk}, uses for
+@cindex @command{awk} @subentry POSIX and @seealso{POSIX @command{awk}}
+@cindex @command{awk} @subentry POSIX and
+@cindex POSIX @subentry @command{awk} and
+@cindex @command{gawk} @subentry @command{awk} and
+@cindex @command{awk} @subentry @command{gawk} and
+@cindex @command{awk} @subentry uses for
Using @command{awk} you can:
@itemize @value{BULLET}
@@ -1358,9 +1360,9 @@ Experiment with algorithms that you can adapt later to
other computer
languages
@end itemize
-@cindex @command{awk}, See Also @command{gawk}
-@cindex @command{gawk}, See Also @command{awk}
-@cindex @command{gawk}, uses for
+@cindex @command{awk} @seealso{@command{gawk}}
+@cindex @command{gawk} @seealso{@command{awk}}
+@cindex @command{gawk} @subentry uses for
In addition,
@command{gawk}
provides facilities that make it easy to:
@@ -1390,7 +1392,7 @@ Unix-based systems. If you are using some other operating
system, you still need
be familiar with the ideas of I/O redirection and pipes.} as well as basic
shell
facilities, such as input/output (I/O) redirection and pipes.
-@cindex GNU @command{awk}, See @command{gawk}
+@cindex GNU @command{awk} @seeentry{@command{gawk}}
Implementations of the @command{awk} language are available for many
different computing environments. This @value{DOCUMENT}, while describing
the @command{awk} language in general, also describes the particular
@@ -1439,7 +1441,7 @@ more parts C. Document very well and release.
@cindex Aho, Alfred
@cindex Weinberger, Peter
@cindex Kernighan, Brian
-@cindex @command{awk}, history of
+@cindex @command{awk} @subentry history of
The name @command{awk} comes from the initials of its designers: Alfred V.@:
Aho, Peter J.@: Weinberger, and Brian W.@: Kernighan. The original version of
@command{awk} was written in 1977 at AT&T Bell Laboratories.
@@ -1486,7 +1488,7 @@ for a full list of those who have made important
contributions to @command{gawk}
@node Names
@unnumberedsec A Rose by Any Other Name
-@cindex @command{awk}, new vs.@: old
+@cindex @command{awk} @subentry new vs.@: old
The @command{awk} language has evolved over the years. Full details are
provided in @ref{Language History}.
The language described in this @value{DOCUMENT}
@@ -1521,7 +1523,7 @@ specific to the GNU implementation, we use the term
@command{gawk}.
@node This Manual
@unnumberedsec Using This Book
-@cindex @command{awk}, terms describing
+@cindex @command{awk} @subentry terms describing
The term @command{awk} refers to a particular program as well as to the
language you
use to tell this program what to do. When we need to be careful, we call
@@ -1533,8 +1535,8 @@ run the @command{awk} utility.
The term ``@command{awk} program'' refers to a program written by you in
the @command{awk} programming language.
-@cindex @command{gawk}, @command{awk} and
-@cindex @command{awk}, @command{gawk} and
+@cindex @command{gawk} @subentry @command{awk} and
+@cindex @command{awk} @subentry @command{gawk} and
@cindex POSIX @command{awk}
Primarily, this @value{DOCUMENT} explains the features of @command{awk}
as defined in the POSIX standard. It does so in the context of the
@@ -1893,7 +1895,7 @@ you illuminate, there's always a smaller but darker one.}
@author Brian Kernighan
@end quotation
-@cindex d.c., See dark corner
+@cindex d.c. @seeentry{dark corner}
@cindex dark corner
Until the POSIX standard (and @cite{@value{TITLE}}),
many features of @command{awk} were either poorly documented or not
@@ -1913,7 +1915,7 @@ They also appear in the index under the heading ``dark
corner.''
But, as noted by the opening quote, any coverage of dark
corners is by definition incomplete.
-@cindex c.e., See common extensions
+@cindex c.e. @seeentry{common extensions}
Extensions to the standard @command{awk} language that are supported by
more than one @command{awk} implementation are marked
@ifclear FOR_PRINT
@@ -1937,8 +1939,9 @@ Emacs editor. GNU Emacs is the most widely used version
of Emacs today.
@cindex GNU Project
@cindex GPL (General Public License)
-@cindex General Public License, See GPL
-@cindex documentation, online
+@cindex GNU General Public License @seeentry{GPL}
+@cindex General Public License @seeentry{GPL}
+@cindex documentation @subentry online
The GNU@footnote{GNU stands for ``GNU's Not Unix.''}
Project is an ongoing effort on the part of the Free Software
Foundation to create a complete, freely distributable, POSIX-compliant
@@ -1968,9 +1971,9 @@ freely available. The GNU operating
system kernel (the HURD), has been released but remains in an early
stage of development.
-@cindex Linux
+@cindex Linux @seeentry{GNU/Linux}
@cindex GNU/Linux
-@cindex operating systems, BSD-based
+@cindex operating systems @subentry BSD-based
Until the GNU operating system is more fully developed, you should
consider using GNU/Linux, a freely distributable, Unix-like operating
system for Intel,
@@ -2134,10 +2137,10 @@ convincing me @emph{not} to title this @value{DOCUMENT}
@cite{How to Gawk Politely}.
Karl Berry helped significantly with the @TeX{} part of Texinfo.
-@cindex Hartholz, Marshall
-@cindex Hartholz, Elaine
-@cindex Schreiber, Bert
-@cindex Schreiber, Rita
+@cindex Hartholz @subentry Marshall
+@cindex Hartholz @subentry Elaine
+@cindex Schreiber @subentry Bert
+@cindex Schreiber @subentry Rita
I would like to thank Marshall and Elaine Hartholz of Seattle and
Dr.@: Bert and Rita Schreiber of Detroit for large amounts of quiet vacation
time in their homes, which allowed me to make significant progress on
@@ -2251,9 +2254,9 @@ and for being a role model to me for close to 30 years!
Having him as a reviewer is an exciting privilege. It has also
been extremely humbling@enddots{}
-@cindex Robbins, Miriam
-@cindex Robbins, Jean
-@cindex Robbins, Harry
+@cindex Robbins @subentry Miriam
+@cindex Robbins @subentry Jean
+@cindex Robbins @subentry Harry
@cindex G-d
I must thank my wonderful wife, Miriam, for her patience through
the many versions of this project, for her proofreading,
@@ -2320,7 +2323,7 @@ following chapters:
@c @cindex rule, definition of
@c @cindex program, definition of
@c @cindex basic function of @command{awk}
-@cindex @command{awk}, function of
+@cindex @command{awk} @subentry function of
The basic function of @command{awk} is to search files for lines (or other
units of text) that contain certain patterns. When a line matches one
@@ -2328,8 +2331,8 @@ of the patterns, @command{awk} performs specified actions
on that line.
@command{awk} continues to process input lines in this way until it reaches
the end of the input files.
-@cindex @command{awk}, uses for
-@cindex programming languages@comma{} data-driven vs.@: procedural
+@cindex @command{awk} @subentry uses for
+@cindex programming languages @subentry data-driven vs.@: procedural
@cindex @command{awk} programs
Programs in @command{awk} are different from programs in most other languages,
because @command{awk} programs are @dfn{data driven} (i.e., you describe
@@ -2382,7 +2385,7 @@ program looks like this:
@node Running gawk
@section How to Run @command{awk} Programs
-@cindex @command{awk} programs, running
+@cindex @command{awk} programs @subentry running
There are several ways to run an @command{awk} program. If the program is
short, it is easiest to include it in the command that runs @command{awk},
like this:
@@ -2391,7 +2394,7 @@ like this:
awk '@var{program}' @var{input-file1} @var{input-file2} @dots{}
@end example
-@cindex command line, formats
+@cindex command line @subentry formats
When the program is long, it is usually more convenient to put it in a file
and run it with a command like this:
@@ -2440,8 +2443,8 @@ characters. The quotes also cause the shell to treat all
of @var{program} as
a single argument for @command{awk}, and allow @var{program} to be more
than one line long.
-@cindex shells, scripts
-@cindex @command{awk} programs, running, from shell scripts
+@cindex shells @subentry scripts
+@cindex @command{awk} programs @subentry running @subentry from shell scripts
This format is also useful for running short or medium-sized @command{awk}
programs from shell scripts, because it avoids the need for a separate
file for the @command{awk} program. A self-contained shell script is more
@@ -2459,8 +2462,8 @@ self-contained programs.
@subsection Running @command{awk} Without Input Files
@cindex standard input
-@cindex input, standard
-@cindex input files, running @command{awk} without
+@cindex input @subentry standard
+@cindex input files @subentry running @command{awk} without
You can also run @command{awk} without any input files. If you type the
following command line:
@@ -2474,9 +2477,9 @@ which usually means whatever you type on the keyboard.
This continues
until you indicate end-of-file by typing @kbd{Ctrl-d}.
(On non-POSIX operating systems, the end-of-file character may be different.)
-@cindex files, input, See input files
-@cindex input files, running @command{awk} without
-@cindex @command{awk} programs, running, without input files
+@cindex files @subentry input @seeentry{input files}
+@cindex input files @subentry running @command{awk} without
+@cindex @command{awk} programs @subentry running @subentry without input files
As an example, the following program prints a friendly piece of advice
(from Douglas Adams's @cite{The Hitchhiker's Guide to the Galaxy}),
to keep you from worrying about the complexities of computer
@@ -2522,9 +2525,9 @@ $ @kbd{awk '@{ print @}'}
@node Long
@subsection Running Long Programs
-@cindex @command{awk} programs, running
-@cindex @command{awk} programs, lengthy
-@cindex files, @command{awk} programs in
+@cindex @command{awk} programs @subentry running
+@cindex @command{awk} programs @subentry lengthy
+@cindex files @subentry @command{awk} programs in
Sometimes @command{awk} programs are very long. In these cases, it is
more convenient to put the program into a separate file. In order to tell
@command{awk} to use that file for its program, you type:
@@ -2534,7 +2537,7 @@ awk -f @var{source-file} @var{input-file1}
@var{input-file2} @dots{}
@end example
@cindex @option{-f} option
-@cindex command line, option @option{-f}
+@cindex command line @subentry option @option{-f}
The @option{-f} instructs the @command{awk} utility to get the
@command{awk} program from the file @var{source-file} (@pxref{Options}).
Any @value{FN} can be used for @var{source-file}. For example, you
@@ -2558,7 +2561,7 @@ does the same thing as this one:
awk 'BEGIN @{ print "Don\47t Panic!" @}'
@end example
-@cindex quoting, in @command{gawk} command lines
+@cindex quoting @subentry in @command{gawk} command lines
@noindent
This was explained earlier
(@pxref{Read Terminal}).
@@ -2570,8 +2573,8 @@ for programs that are provided on the @command{awk}
command line.
(Also, placing the program in a file allows us to use a literal single quote
in the program
text, instead of the magic @samp{\47}.)
-@cindex single quote (@code{'}) in @command{gawk} command lines
-@cindex @code{'} (single quote) in @command{gawk} command lines
+@cindex single quote (@code{'}) @subentry in @command{gawk} command lines
+@cindex @code{'} (single quote) @subentry in @command{gawk} command lines
If you want to clearly identify an @command{awk} program file as such,
you can add the extension @file{.awk} to the @value{FN}. This doesn't
affect the execution of the @command{awk} program but it does make
@@ -2580,9 +2583,9 @@ affect the execution of the @command{awk} program but it
does make
@node Executable Scripts
@subsection Executable @command{awk} Programs
@cindex @command{awk} programs
-@cindex @code{#} (number sign), @code{#!} (executable scripts)
-@cindex Unix, @command{awk} scripts and
-@cindex number sign (@code{#}), @code{#!} (executable scripts)
+@cindex @code{#} (number sign) @subentry @code{#!} (executable scripts)
+@cindex Unix @subentry @command{awk} scripts and
+@cindex number sign (@code{#}) @subentry @code{#!} (executable scripts)
Once you have learned @command{awk}, you may want to write self-contained
@command{awk} scripts, using the @samp{#!} script mechanism. You can do
@@ -2618,7 +2621,7 @@ program that users can invoke without their having to
know that the program is
written in @command{awk}.
@sidebar Understanding @samp{#!}
-@cindex portability, @code{#!} (executable scripts)
+@cindex portability @subentry @code{#!} (executable scripts)
@command{awk} is an @dfn{interpreted} language. This means that the
@command{awk} utility reads your program and then processes your data
@@ -2647,9 +2650,9 @@ treats the rest of the line as a single argument and
passes it to @command{awk}.
Doing this leads to confusing behavior---most likely a usage diagnostic
of some sort from @command{awk}.
-@cindex @code{ARGC}/@code{ARGV} variables, portability and
-@cindex portability, @code{ARGV} variable
-@cindex dark corner, @code{ARGV} variable, value of
+@cindex @code{ARGC}/@code{ARGV} variables @subentry portability and
+@cindex portability @subentry @code{ARGV} variable
+@cindex dark corner @subentry @code{ARGV} variable, value of
Finally, the value of @code{ARGV[0]}
(@pxref{Built-in Variables})
varies depending upon your operating system.
@@ -2662,10 +2665,10 @@ to provide your script name.
@node Comments
@subsection Comments in @command{awk} Programs
-@cindex @code{#} (number sign), commenting
-@cindex number sign (@code{#}), commenting
+@cindex @code{#} (number sign) @subentry commenting
+@cindex number sign (@code{#}) @subentry commenting
@cindex commenting
-@cindex @command{awk} programs, documenting
+@cindex @command{awk} programs @subentry documenting
A @dfn{comment} is some text that is included in a program for the sake
of human readers; it is not really an executable part of the program. Comments
@@ -2690,9 +2693,9 @@ programs, but this usually isn't very useful; the purpose
of a
comment is to help you or another person understand the program
when reading it at a later time.
-@cindex quoting, for small awk programs
-@cindex single quote (@code{'}), vs.@: apostrophe
-@cindex @code{'} (single quote), vs.@: apostrophe
+@cindex quoting @subentry for small awk programs
+@cindex single quote (@code{'}) @subentry vs.@: apostrophe
+@cindex @code{'} (single quote) @subentry vs.@: apostrophe
@quotation CAUTION
As mentioned in
@ref{One-shot},
@@ -2748,7 +2751,7 @@ the shell prompt, or writing it as part of a larger shell
script:
awk '@var{program text}' @var{input-file1} @var{input-file2} @dots{}
@end example
-@cindex shells, quoting, rules for
+@cindex shells @subentry quoting @subentry rules for
@cindex Bourne shell, quoting rules for
Once you are working with the shell, it is helpful to have a basic
knowledge of shell quoting rules. The following rules apply only to
@@ -2787,10 +2790,10 @@ that character. The shell removes the backslash and
passes the quoted
character on to the command.
@item
-@cindex @code{\} (backslash), in shell commands
-@cindex backslash (@code{\}), in shell commands
-@cindex single quote (@code{'}), in shell commands
-@cindex @code{'} (single quote), in shell commands
+@cindex @code{\} (backslash) @subentry in shell commands
+@cindex backslash (@code{\}) @subentry in shell commands
+@cindex single quote (@code{'}) @subentry in shell commands
+@cindex @code{'} (single quote) @subentry in shell commands
Single quotes protect everything between the opening and closing quotes.
The shell does no interpretation of the quoted text, passing it on verbatim
to the command.
@@ -2800,8 +2803,8 @@ Refer back to
for an example of what happens if you try.
@item
-@cindex double quote (@code{"}), in shell commands
-@cindex @code{"} (double quote), in shell commands
+@cindex double quote (@code{"}) @subentry in shell commands
+@cindex @code{"} (double quote) @subentry in shell commands
Double quotes protect most things between the opening and closing quotes.
The shell does at least variable and command substitution on the quoted text.
Different shells may do additional kinds of processing on double-quoted text.
@@ -2829,8 +2832,8 @@ $ @kbd{awk "BEGIN @{ print \"Don't Panic!\" @}"}
@print{} Don't Panic!
@end example
-@cindex single quote (@code{'}), with double quotes
-@cindex @code{'} (single quote), with double quotes
+@cindex single quote (@code{'}) @subentry with double quotes
+@cindex @code{'} (single quote) @subentry with double quotes
Note that the single quote is not special within double quotes.
@item
@@ -2844,7 +2847,7 @@ awk -F "" '@var{program}' @var{files} # correct
@end example
@noindent
-@cindex null strings in @command{gawk} arguments, quoting and
+@cindex null strings @subentry in @command{gawk} arguments, quoting and
Don't use this:
@example
@@ -2857,7 +2860,7 @@ as the value of @code{FS}, and the first @value{FN} as
the text of the program!
This results in syntax errors at best, and confusing behavior at worst.
@end itemize
-@cindex quoting, in @command{gawk} command lines, tricks for
+@cindex quoting @subentry in @command{gawk} command lines @subentry tricks for
Mixing single and double quotes is difficult. You have to resort
to shell quoting tricks, like this:
@@ -3019,7 +3022,7 @@ double-quote don't need duplication.
@node Sample Data Files
@section @value{DDF}s for the Examples
-@cindex input files, examples
+@cindex input files @subentry examples
@cindex @code{mail-list} file
Many of the examples in this @value{DOCUMENT} take their input from two sample
@value{DF}s. The first, @file{mail-list}, represents a list of peoples' names
@@ -3132,21 +3135,21 @@ $ @kbd{awk '/li/ @{ print $0 @}' mail-list}
@print{} Samuel 555-3430 samuel.lanceolis@@shu.edu A
@end example
-@cindex actions, default
-@cindex patterns, default
+@cindex actions @subentry default
+@cindex patterns @subentry default
In an @command{awk} rule, either the pattern or the action can be omitted,
but not both. If the pattern is omitted, then the action is performed
for @emph{every} input line. If the action is omitted, the default
action is to print all lines that match the pattern.
-@cindex actions, empty
+@cindex actions @subentry empty
Thus, we could leave out the action (the @code{print} statement and the
braces) in the previous example and the result would be the same:
@command{awk} prints all lines matching the pattern @samp{li}. By comparison,
omitting the @code{print} statement but retaining the braces makes an
empty action that does nothing (i.e., no lines are printed).
-@cindex @command{awk} programs, one-line examples
+@cindex @command{awk} programs @subentry one-line examples
Many practical @command{awk} programs are just a line or two long. Following
is a
collection of useful, short programs to get you started. Some of these
programs contain constructs that haven't been covered yet. (The description
@@ -3351,7 +3354,7 @@ the file was last modified. Its output looks like this:
@end example
@noindent
-@cindex line continuations, with C shell
+@cindex line continuations @subentry with C shell
The first field contains read-write permissions, the second field contains
the number of links to the file, and the third field identifies the file's
owner.
The fourth field identifies the file's group.
@@ -3397,7 +3400,7 @@ awk '/12/ @{ print $0 @}
/21/ @{ print $0 @}' mail-list inventory-shipped
@end example
-@cindex @command{gawk}, newlines in
+@cindex @command{gawk} @subentry newlines in
However, @command{gawk} ignores newlines after any of the following
symbols and keywords:
@@ -3414,8 +3417,8 @@ Splitting lines after @samp{?} and @samp{:} is a minor
@command{gawk}
extension; if @option{--posix} is specified
(@pxref{Options}), then this extension is disabled.}
-@cindex @code{\} (backslash), continuing lines and
-@cindex backslash (@code{\}), continuing lines and
+@cindex @code{\} (backslash) @subentry continuing lines and
+@cindex backslash (@code{\}) @subentry continuing lines and
If you would like to split a single statement into two lines at a point
where a newline would terminate it, you can @dfn{continue} it by ending the
first line with a backslash character (@samp{\}). The backslash must be
@@ -3429,7 +3432,7 @@ awk '/This regular expression is too long, so continue it\
@end example
@noindent
-@cindex portability, backslash continuation and
+@cindex portability @subentry backslash continuation and
We have generally not used backslash continuation in our sample programs.
@command{gawk} places no limit on the
length of a line, so backslash continuation is never strictly necessary;
@@ -3447,8 +3450,8 @@ lines in the middle of a regular expression or a string.
@c solaris 2.7 nawk does not. Solaris /usr/xpg4/bin/awk does though! sigh.
@cindex @command{csh} utility
-@cindex backslash (@code{\}), continuing lines and, in @command{csh}
-@cindex @code{\} (backslash), continuing lines and, in @command{csh}
+@cindex backslash (@code{\}) @subentry continuing lines and @subentry in
@command{csh}
+@cindex @code{\} (backslash) @subentry continuing lines and @subentry in
@command{csh}
@quotation CAUTION
@emph{Backslash continuation does not work as described
with the C shell.} It works for @command{awk} programs in files and
@@ -3486,9 +3489,9 @@ begin on the same line as the pattern. To have the
pattern and action
on separate lines, you @emph{must} use backslash continuation; there
is no other option.
-@cindex backslash (@code{\}), continuing lines and, comments and
-@cindex @code{\} (backslash), continuing lines and, comments and
-@cindex commenting, backslash continuation and
+@cindex backslash (@code{\}) @subentry continuing lines and @subentry comments
and
+@cindex @code{\} (backslash) @subentry continuing lines and @subentry comments
and
+@cindex commenting @subentry backslash continuation and
Another thing to keep in mind is that backslash continuation and
comments do not mix. As soon as @command{awk} sees the @samp{#} that
starts a comment, it ignores @emph{everything} on the rest of the
@@ -3510,11 +3513,11 @@ next line. However, the backslash-newline combination
is never even
noticed because it is ``hidden'' inside the comment. Thus, the
@code{BEGIN} is noted as a syntax error.
-@cindex statements, multiple
-@cindex @code{;} (semicolon), separating statements in actions
-@cindex semicolon (@code{;}), separating statements in actions
-@cindex @code{;} (semicolon), separating rules
-@cindex semicolon (@code{;}), separating rules
+@cindex statements @subentry multiple
+@cindex @code{;} (semicolon) @subentry separating statements in actions
+@cindex semicolon (@code{;}) @subentry separating statements in actions
+@cindex @code{;} (semicolon) @subentry separating rules
+@cindex semicolon (@code{;}) @subentry separating rules
When @command{awk} statements within one rule are short, you might want to put
more than one of them on a line. This is accomplished by separating the
statements
with a semicolon (@samp{;}).
@@ -3557,7 +3560,7 @@ systematically in @ref{Built-in Variables} and in
@node When
@section When to Use @command{awk}
-@cindex @command{awk}, uses for
+@cindex @command{awk} @subentry uses for
Now that you've seen some of what @command{awk} can do,
you might wonder how @command{awk} could be useful for you. By using
utility programs, advanced patterns, field separators, arithmetic
@@ -3588,7 +3591,7 @@ computer.
The original @command{awk}'s capabilities were strained by tasks
of such complexity, but modern versions are more capable.
-@cindex @command{awk} programs, complex
+@cindex @command{awk} programs @subentry complex
If you find yourself writing @command{awk} scripts of more than, say,
a few hundred lines, you might consider using a different programming
language. The shell is good at string and pattern matching; in addition,
@@ -3668,10 +3671,10 @@ things in this @value{CHAPTER} that don't interest you
right now.
@node Command Line
@section Invoking @command{awk}
-@cindex command line, invoking @command{awk} from
-@cindex @command{awk}, invoking
-@cindex arguments, command-line, invoking @command{awk}
-@cindex options, command-line, invoking @command{awk}
+@cindex command line @subentry invoking @command{awk} from
+@cindex @command{awk} @subentry invoking
+@cindex arguments @subentry command-line @subentry invoking @command{awk}
+@cindex options @subentry command-line @subentry invoking @command{awk}
There are two ways to run @command{awk}---with an explicit program or with
one or more program files. Here are templates for both of them; items
@@ -3684,12 +3687,12 @@ enclosed in [@dots{}] in these templates are optional:
@cindex GNU long options
@cindex long options
-@cindex options, long
+@cindex options @subentry long
In addition to traditional one-letter POSIX-style options, @command{gawk} also
supports GNU long options.
-@cindex dark corner, invoking @command{awk}
-@cindex lint checking, empty programs
+@cindex dark corner @subentry invoking @command{awk}
+@cindex lint checking @subentry empty programs
It is possible to invoke @command{awk} with an empty program:
@example
@@ -3697,7 +3700,7 @@ awk '' datafile1 datafile2
@end example
@cindex @option{--lint} option
-@cindex dark corner, empty programs
+@cindex dark corner @subentry empty programs
@noindent
Doing so makes little sense, though; @command{awk} exits
silently when given an empty program.
@@ -3708,10 +3711,10 @@ warning that the program is empty.
@node Options
@section Command-Line Options
-@cindex options, command-line
-@cindex command line, options
+@cindex options @subentry command-line
+@cindex command line @subentry options
@cindex GNU long options
-@cindex options, long
+@cindex options @subentry long
Options begin with a dash and consist of a single character.
GNU-style long options consist of two dashes and a keyword.
@@ -3723,7 +3726,7 @@ by whitespace.
If a particular option with a value is given more than once, it is the
last value that counts.
-@cindex POSIX @command{awk}, GNU long options and
+@cindex POSIX @command{awk} @subentry GNU long options and
Each long option for @command{gawk} has a corresponding
POSIX-style short option.
The long and short options are
@@ -3735,7 +3738,7 @@ The following list describes options mandated by the
POSIX standard:
@itemx --field-separator @var{fs}
@cindex @option{-F} option
@cindex @option{--field-separator} option
-@cindex @code{FS} variable, @code{--field-separator} option and
+@cindex @code{FS} variable @subentry @code{--field-separator} option and
Set the @code{FS} variable to @var{fs}
(@pxref{Field Separators}).
@@ -3743,7 +3746,7 @@ Set the @code{FS} variable to @var{fs}
@itemx --file @var{source-file}
@cindex @option{-f} option
@cindex @option{--file} option
-@cindex @command{awk} programs, location of
+@cindex @command{awk} programs @subentry location of
Read the @command{awk} program source from @var{source-file}
instead of in the first nonoption argument.
This option may be given multiple times; the @command{awk}
@@ -3757,7 +3760,7 @@ at their beginning. @xref{Changing The Namespace}, for
more information.
@itemx --assign @var{var}=@var{val}
@cindex @option{-v} option
@cindex @option{--assign} option
-@cindex variables, setting
+@cindex variables @subentry setting
Set the variable @var{var} to the value @var{val} @emph{before}
execution of the program begins. Such variable values are available
inside the @code{BEGIN} rule
@@ -3767,8 +3770,8 @@ The @option{-v} option can only set one variable, but it
can be used
more than once, setting another variable each time, like this:
@samp{awk @w{-v foo=1} @w{-v bar=2} @dots{}}.
-@cindex predefined variables, @code{-v} option@comma{} setting with
-@cindex variables, predefined, @code{-v} option@comma{} setting with
+@cindex predefined variables @subentry @code{-v} option, setting with
+@cindex variables @subentry predefined @subentry @code{-v} option, setting with
@quotation CAUTION
Using @option{-v} to set the values of the built-in
variables may lead to surprising results. @command{awk} will reset the
@@ -3787,15 +3790,15 @@ the abbreviations remain unique.
The full list of @command{gawk}-specific options is provided next.
@item --
-@cindex command line, options, end of
-@cindex options, command-line, end of
+@cindex command line @subentry options @subentry end of
+@cindex options @subentry command-line @subentry end of
Signal the end of the command-line options. The following arguments
are not treated as options even if they begin with @samp{-}. This
interpretation of @option{--} follows the POSIX argument parsing
conventions.
-@cindex @code{-} (hyphen), file names beginning with
-@cindex hyphen (@code{-}), file names beginning with
+@cindex @code{-} (hyphen) @subentry file names beginning with
+@cindex hyphen (@code{-}) @subentry file names beginning with
This is useful if you have @value{FN}s that start with @samp{-},
or in shell scripts, if you have @value{FN}s that will be specified
by the user that could start with @samp{-}.
@@ -3826,7 +3829,7 @@ multibyte characters. This option is an easy way to tell
@command{gawk},
@itemx @option{--traditional}
@cindex @option{-c} option
@cindex @option{--traditional} option
-@cindex compatibility mode (@command{gawk}), specifying
+@cindex compatibility mode (@command{gawk}) @subentry specifying
Specify @dfn{compatibility mode}, in which the GNU extensions to
the @command{awk} language are disabled, so that @command{gawk} behaves just
like BWK @command{awk}.
@@ -3841,7 +3844,7 @@ Also see
@itemx @option{--copyright}
@cindex @option{-C} option
@cindex @option{--copyright} option
-@cindex GPL (General Public License), printing
+@cindex GPL (General Public License) @subentry printing
Print the short version of the General Public License and then exit.
@item @option{-d}[@var{file}]
@@ -3850,15 +3853,15 @@ Print the short version of the General Public License
and then exit.
@cindex @option{--dump-variables} option
@cindex dump all variables of a program
@cindex @file{awkvars.out} file
-@cindex files, @file{awkvars.out}
-@cindex variables, global, printing list of
+@cindex files @subentry @file{awkvars.out}
+@cindex variables @subentry global @subentry printing list of
Print a sorted list of global variables, their types, and final values
to @var{file}. If no @var{file} is provided, print this
list to a file named @file{awkvars.out} in the current directory.
No space is allowed between the @option{-d} and @var{file}, if
@var{file} is supplied.
-@cindex troubleshooting, typographical errors@comma{} global variables
+@cindex troubleshooting @subentry typographical errors, global variables
Having a list of all global variables is a good way to look for
typographical errors in your programs.
You would also use this option if you have a large program with a lot of
@@ -3871,7 +3874,7 @@ names like @code{i}, @code{j}, etc.)
@itemx @option{--debug}[@code{=}@var{file}]
@cindex @option{-D} option
@cindex @option{--debug} option
-@cindex @command{awk} debugging, enabling
+@cindex @command{awk} programs @subentry debugging, enabling
Enable debugging of @command{awk} programs
(@pxref{Debugging}).
By default, the debugger reads commands interactively from the keyboard
@@ -3885,7 +3888,7 @@ No space is allowed between the @option{-D} and
@var{file}, if
@itemx @option{--source} @var{program-text}
@cindex @option{-e} option
@cindex @option{--source} option
-@cindex source code, mixing
+@cindex source code @subentry mixing
Provide program source code in the @var{program-text}.
This option allows you to mix source code in files with source
code that you enter on the command line.
@@ -3920,7 +3923,7 @@ for more information.
@itemx @option{--exec} @var{file}
@cindex @option{-E} option
@cindex @option{--exec} option
-@cindex @command{awk} programs, location of
+@cindex @command{awk} programs @subentry location of
@cindex CGI, @command{awk} scripts for
Similar to @option{-f}, read @command{awk} program text from @var{file}.
There are two differences from @option{-f}:
@@ -3957,8 +3960,8 @@ with @samp{#!} scripts (@pxref{Executable Scripts}), like
so:
@itemx @option{--gen-pot}
@cindex @option{-g} option
@cindex @option{--gen-pot} option
-@cindex portable object files, generating
-@cindex files, portable object, generating
+@cindex portable object @subentry files @subentry generating
+@cindex files @subentry portable object @subentry generating
Analyze the source program and
generate a GNU @command{gettext} portable object template file on standard
output for all string constants that have been marked for translation.
@@ -3969,9 +3972,9 @@ for information about this option.
@itemx @option{--help}
@cindex @option{-h} option
@cindex @option{--help} option
-@cindex GNU long options, printing list of
-@cindex options, printing list of
-@cindex printing, list of options
+@cindex GNU long options @subentry printing list of
+@cindex options @subentry printing list of
+@cindex printing @subentry list of options
Print a ``usage'' message summarizing the short- and long-style options
that @command{gawk} accepts and then exit.
@@ -3979,7 +3982,7 @@ that @command{gawk} accepts and then exit.
@itemx @option{--include} @var{source-file}
@cindex @option{-i} option
@cindex @option{--include} option
-@cindex @command{awk} programs, location of
+@cindex @command{awk} programs @subentry location of
Read an @command{awk} source library from @var{source-file}. This option
is completely equivalent to using the @code{@@include} directive inside
your program. It is very similar to the @option{-f} option,
@@ -3999,7 +4002,7 @@ at their beginning. @xref{Changing The Namespace}, for
more information.
@itemx @option{--load} @var{ext}
@cindex @option{-l} option
@cindex @option{--load} option
-@cindex loading, extensions
+@cindex loading extensions
Load a dynamic extension named @var{ext}. Extensions
are stored as system shared libraries.
This option searches for the library using the @env{AWKLIBPATH}
@@ -4013,7 +4016,7 @@ a shared library. This advanced feature is described in
detail in @ref{Dynamic
@itemx @option{--lint}[@code{=}@var{value}]
@cindex @option{-l} option
@cindex @option{--lint} option
-@cindex lint checking, issuing warnings
+@cindex lint checking @subentry issuing warnings
@cindex warnings, issuing
Warn about constructs that are dubious or nonportable to
other @command{awk} implementations.
@@ -4048,9 +4051,9 @@ if @command{gawk} is not compiled to use the GNU MPFR and
MP libraries
@itemx @option{--non-decimal-data}
@cindex @option{-n} option
@cindex @option{--non-decimal-data} option
-@cindex hexadecimal values@comma{} enabling interpretation of
-@cindex octal values@comma{} enabling interpretation of
-@cindex troubleshooting, @code{--non-decimal-data} option
+@cindex hexadecimal values, enabling interpretation of
+@cindex octal values, enabling interpretation of
+@cindex troubleshooting @subentry @code{--non-decimal-data} option
Enable automatic interpretation of octal and hexadecimal
values in input data
(@pxref{Nondecimal Data}).
@@ -4103,7 +4106,7 @@ be used to cancel the effect of an earlier @option{-s}
option
@itemx @option{--profile}[@code{=}@var{file}]
@cindex @option{-p} option
@cindex @option{--profile} option
-@cindex @command{awk} profiling, enabling
+@cindex @command{awk} @subentry profiling, enabling
Enable profiling of @command{awk} programs
(@pxref{Profiling}).
Implies @option{--no-optimize}.
@@ -4121,7 +4124,7 @@ in the left margin, and function call counts for each
function.
@cindex @option{-P} option
@cindex @option{--posix} option
@cindex POSIX mode
-@cindex @command{gawk}, extensions@comma{} disabling
+@cindex @command{gawk} @subentry extensions, disabling
Operate in strict POSIX mode. This disables all @command{gawk}
extensions (just like @option{--traditional}) and
disables all extensions not allowed by POSIX.
@@ -4134,13 +4137,13 @@ restrictions apply:
@itemize @value{BULLET}
@cindex newlines
-@cindex whitespace, newlines as
+@cindex whitespace @subentry newlines as
@item
Newlines are not allowed after @samp{?} or @samp{:}
(@pxref{Conditional Exp}).
-@cindex @code{FS} variable, TAB character as
+@cindex @code{FS} variable @subentry TAB character as
@item
Specifying @samp{-Ft} on the command line does not set the value
of @code{FS} to be a single TAB character
@@ -4155,8 +4158,8 @@ data (@pxref{Locales}).
@c @cindex automatic warnings
@c @cindex warnings, automatic
-@cindex @option{--traditional} option, @code{--posix} option and
-@cindex @option{--posix} option, @code{--traditional} option and
+@cindex @option{--traditional} option @subentry @code{--posix} option and
+@cindex @option{--posix} option @subentry @code{--traditional} option and
If you supply both @option{--traditional} and @option{--posix} on the
command line, @option{--posix} takes precedence. @command{gawk}
issues a warning if both options are supplied.
@@ -4165,7 +4168,7 @@ issues a warning if both options are supplied.
@itemx @option{--re-interval}
@cindex @option{-r} option
@cindex @option{--re-interval} option
-@cindex regular expressions, interval expressions and
+@cindex regular expressions @subentry interval expressions and
Allow interval expressions
(@pxref{Regexp Operators})
in regexps.
@@ -4208,27 +4211,34 @@ Warn about constructs that are not available in the
original version of
@itemx @option{--version}
@cindex @option{-V} option
@cindex @option{--version} option
-@cindex @command{gawk}, versions of, information about@comma{} printing
+@cindex @command{gawk} @subentry version of @subentry printing information
about
Print version information for this particular copy of @command{gawk}.
This allows you to determine if your copy of @command{gawk} is up to date
with respect to whatever the Free Software Foundation is currently
distributing.
It is also useful for bug reports
(@pxref{Bugs}).
+
+@cindex @code{-} (hyphen) @subentry @code{--} end of options marker
+@cindex hyphen (@code{-}) @subentry @code{--} end of options marker
+@item @code{--}
+Mark the end of all options.
+Any command-line arguments following @code{--} are placed in @code{ARGV},
+even if they start with a minus sign.
@end table
As long as program text has been supplied,
any other options are flagged as invalid with a warning message but
are otherwise ignored.
-@cindex @option{-F} option, @option{-Ft} sets @code{FS} to TAB
+@cindex @option{-F} option @subentry @option{-Ft} sets @code{FS} to TAB
In compatibility mode, as a special case, if the value of @var{fs} supplied
to the @option{-F} option is @samp{t}, then @code{FS} is set to the TAB
character (@code{"\t"}). This is true only for @option{--traditional} and not
for @option{--posix}
(@pxref{Field Separators}).
-@cindex @option{-f} option, multiple uses
+@cindex @option{-f} option @subentry multiple uses
The @option{-f} option may be used more than once on the command line.
If it is, @command{awk} reads its program source from all of the named files,
as
if they had been concatenated together into one big file. This is
@@ -4265,7 +4275,8 @@ the command line that follow the program text are entered
into the
command line looking for options.
@cindex @env{POSIXLY_CORRECT} environment variable
-@cindex lint checking, @env{POSIXLY_CORRECT} environment variable
+@cindex environment variables @subentry @env{POSIXLY_CORRECT}
+@cindex lint checking @subentry @env{POSIXLY_CORRECT} environment variable
@cindex POSIX mode
If the environment variable @env{POSIXLY_CORRECT} exists,
then @command{gawk} behaves in strict POSIX mode, exactly as if
@@ -4287,7 +4298,7 @@ POSIXLY_CORRECT=true
export POSIXLY_CORRECT
@end example
-@cindex @command{csh} utility, @env{POSIXLY_CORRECT} environment variable
+@cindex @command{csh} utility @subentry @env{POSIXLY_CORRECT} environment
variable
For a C shell-compatible
shell,@footnote{Not recommended.}
you would add this line to the @file{.login} file in your home directory:
@@ -4296,15 +4307,15 @@ you would add this line to the @file{.login} file in
your home directory:
setenv POSIXLY_CORRECT true
@end example
-@cindex portability, @env{POSIXLY_CORRECT} environment variable
+@cindex portability @subentry @env{POSIXLY_CORRECT} environment variable
Having @env{POSIXLY_CORRECT} set is not recommended for daily use,
but it is good for testing the portability of your programs to other
environments.
@node Other Arguments
@section Other Command-Line Arguments
-@cindex command line, arguments
-@cindex arguments, command-line
+@cindex command line @subentry arguments
+@cindex arguments @subentry command-line
Any additional arguments on the command line are normally treated as
input files to be processed in the order specified. However, an
@@ -4326,10 +4337,10 @@ a variable assignment), precede the file name with
@samp{./}, like so:
awk -f program.awk file1 ./count=1 file2
@end example
-@cindex @command{gawk}, @code{ARGIND} variable in
-@cindex @code{ARGIND} variable, command-line arguments
+@cindex @command{gawk} @subentry @code{ARGIND} variable in
+@cindex @code{ARGIND} variable @subentry command-line arguments
@cindex @code{ARGV} array, indexing into
-@cindex @code{ARGC}/@code{ARGV} variables, command-line arguments
+@cindex @code{ARGC}/@code{ARGV} variables @subentry command-line arguments
All the command-line arguments are made available to your @command{awk}
program in the
@code{ARGV} array (@pxref{Built-in Variables}). Command-line options
and the program text (if present) are omitted from @code{ARGV}.
@@ -4343,7 +4354,7 @@ Changing @code{ARGC} and @code{ARGV} in your
@command{awk} program lets
you control how @command{awk} processes the input files; this is described
in more detail in @ref{ARGC and ARGV}.
-@cindex input files, variable assignments and
+@cindex input files @subentry variable assignments and
@cindex variable assignments and input files
The distinction between @value{FN} arguments and variable-assignment
arguments is made when @command{awk} is about to open the next input file.
@@ -4358,7 +4369,7 @@ variables assigned in this fashion are @emph{not}
available inside a
(@pxref{BEGIN/END}),
because such rules are run before @command{awk} begins scanning the argument
list.
-@cindex dark corner, escape sequences
+@cindex dark corner @subentry escape sequences
The variable values given on the command line are processed for escape
sequences (@pxref{Escape Sequences}).
@value{DARKCORNER}
@@ -4379,7 +4390,7 @@ output formats, before scanning the @value{DF}s. It is
also useful for
controlling state if multiple passes are needed over a @value{DF}. For
example:
-@cindex files, multiple passes over
+@cindex files @subentry multiple passes over
@example
awk 'pass == 1 @{ @var{pass 1 stuff} @}
pass == 2 @{ @var{pass 2 stuff} @}' pass=1 mydata pass=2 mydata
@@ -4424,7 +4435,7 @@ this @value{FN} itself.)
@node Environment Variables
@section The Environment Variables @command{gawk} Uses
-@cindex environment variables used by @command{gawk}
+@cindex environment variables @subentry used by @command{gawk}
A number of environment variables influence how @command{gawk}
behaves.
@@ -4440,9 +4451,10 @@ behaves.
@node AWKPATH Variable
@subsection The @env{AWKPATH} Environment Variable
@cindex @env{AWKPATH} environment variable
-@cindex directories, searching for source files
-@cindex search paths, for source files
-@cindex differences in @command{awk} and @command{gawk}, @env{AWKPATH}
environment variable
+@cindex environment variables @subentry @env{AWKPATH}
+@cindex directories @subentry searching @subentry for source files
+@cindex search paths @subentry for source files
+@cindex differences in @command{awk} and @command{gawk} @subentry
@env{AWKPATH} environment variable
@ifinfo
The previous @value{SECTION} described how @command{awk} program files can be
named
on the command line with the @option{-f} option.
@@ -4526,9 +4538,10 @@ found, and @command{gawk} no longer needs to use
@env{AWKPATH}.
@node AWKLIBPATH Variable
@subsection The @env{AWKLIBPATH} Environment Variable
@cindex @env{AWKLIBPATH} environment variable
-@cindex directories, searching for loadable extensions
-@cindex search paths, for loadable extensions
-@cindex differences in @command{awk} and @command{gawk}, @code{AWKLIBPATH}
environment variable
+@cindex environment variables @subentry @env{AWKLIBPATH}
+@cindex directories @subentry searching @subentry for loadable extensions
+@cindex search paths @subentry for loadable extensions
+@cindex differences in @command{awk} and @command{gawk} @subentry
@code{AWKLIBPATH} environment variable
The @env{AWKLIBPATH} environment variable is similar to the @env{AWKPATH}
variable, but it is used to search for loadable extensions (stored as
@@ -4682,9 +4695,11 @@ to @code{EXIT_FAILURE}.
This @value{SECTION} describes a feature that is specific to @command{gawk}.
-@cindex @code{@@include} directive
+@cindex @code{@@} (at-sign) @subentry @code{@@include} directive
+@cindex at-sign (@code{@@}) @subentry @code{@@include} directive
@cindex file inclusion, @code{@@include} directive
@cindex including files, @code{@@include} directive
+@cindex @code{@@include} directive @sortas{include directive}
The @code{@@include} keyword can be used to read external @command{awk} source
files. This gives you the ability to split large @command{awk} source files
into smaller, more manageable pieces, and also lets you reuse common
@command{awk}
@@ -4810,9 +4825,11 @@ at their beginning. @xref{Changing The Namespace}, for
more information.
This @value{SECTION} describes a feature that is specific to @command{gawk}.
-@cindex @code{@@load} directive
-@cindex loading extensions, @code{@@load} directive
-@cindex extensions, loading, @code{@@load} directive
+@cindex @code{@@} (at-sign) @subentry @code{@@load} directive
+@cindex at-sign (@code{@@}) @subentry @code{@@load} directive
+@cindex loading extensions @subentry @code{@@load} directive
+@cindex extensions @subentry loadable @subentry loading, @code{@@load}
directive
+@cindex @code{@@load} directive @sortas{load directive}
The @code{@@load} keyword can be used to read external @command{awk} extensions
(stored as system shared libraries).
This allows you to link in compiled code that may offer superior
@@ -4855,8 +4872,8 @@ It also describes the @code{ordchr} extension.
@c update this section for each release!
-@cindex options, deprecated
-@cindex features, deprecated
+@cindex options @subentry deprecated
+@cindex features @subentry deprecated
@cindex obsolete features
This @value{SECTION} describes features and/or command-line options from
previous releases of @command{gawk} that either are not available in the
@@ -4878,7 +4895,7 @@ in case some option becomes obsolete in a future version
of @command{gawk}.
@node Undocumented
@section Undocumented Options and Features
@cindex undocumented features
-@cindex features, undocumented
+@cindex features @subentry undocumented
@cindex Skywalker, Luke
@cindex Kenobi, Obi-Wan
@cindex jedi knights
@@ -4888,7 +4905,7 @@ in case some option becomes obsolete in a future version
of @command{gawk}.
@author Obi-Wan
@end quotation
-@cindex shells, sea
+@cindex shells @subentry sea
This @value{SECTION} intentionally left
blank.
@@ -5072,8 +5089,8 @@ set of strings.
Because regular expressions are such a fundamental part of @command{awk}
programming, their format and use deserve a separate @value{CHAPTER}.
-@cindex forward slash (@code{/}) to enclose regular expressions
-@cindex @code{/} (forward slash) to enclose regular expressions
+@cindex forward slash (@code{/}) @subentry to enclose regular expressions
+@cindex @code{/} (forward slash) @subentry to enclose regular expressions
A regular expression enclosed in slashes (@samp{/})
is an @command{awk} pattern that matches every input record whose text
belongs to that set.
@@ -5105,8 +5122,8 @@ regular expressions work, we present more complicated
instances.
@node Regexp Usage
@section How to Use Regular Expressions
-@cindex patterns, regular expressions as
-@cindex regular expressions, as patterns
+@cindex patterns @subentry regexp constants as
+@cindex regular expressions @subentry as patterns
A regular expression can be used as a pattern by enclosing it in
slashes. Then the regular expression is tested against the
entire text of each record. (Normally, it only needs
@@ -5122,18 +5139,18 @@ $ @kbd{awk '/li/ @{ print $2 @}' mail-list}
@print{} 555-3430
@end example
-@cindex regular expressions, operators
-@cindex operators, string-matching
+@cindex regular expressions @subentry operators
+@cindex operators @subentry string-matching
@c @cindex operators, @code{~}
@cindex string-matching operators
@cindex @code{~} (tilde), @code{~} operator
@cindex tilde (@code{~}), @code{~} operator
-@cindex @code{!} (exclamation point), @code{!~} operator
-@cindex exclamation point (@code{!}), @code{!~} operator
+@cindex @code{!} (exclamation point) @subentry @code{!~} operator
+@cindex exclamation point (@code{!}) @subentry @code{!~} operator
@c @cindex operators, @code{!~}
-@cindex @code{if} statement, use of regexps in
-@cindex @code{while} statement, use of regexps in
-@cindex @code{do}-@code{while} statement, use of regexps in
+@cindex @code{if} statement @subentry use of regexps in
+@cindex @code{while} statement @subentry use of regexps in
+@cindex @code{do}-@code{while} statement @subentry use of regexps in
@c @cindex statements, @code{if}
@c @cindex statements, @code{while}
@c @cindex statements, @code{do}
@@ -5191,8 +5208,8 @@ $ @kbd{awk '$1 !~ /J/' inventory-shipped}
@end example
@cindex regexp constants
-@cindex constant regexps
-@cindex regular expressions, constants, See regexp constants
+@cindex constants @subentry regexp
+@cindex regular expressions, constants @seeentry{regexp constants}
When a regexp is enclosed in slashes, such as @code{/foo/}, we call it
a @dfn{regexp constant}, much like @code{5.27} is a numeric constant and
@code{"foo"} is a string constant.
@@ -5200,9 +5217,10 @@ a @dfn{regexp constant}, much like @code{5.27} is a
numeric constant and
@node Escape Sequences
@section Escape Sequences
-@cindex escape sequences, in strings
-@cindex backslash (@code{\}), in escape sequences
-@cindex @code{\} (backslash), in escape sequences
+@cindex escape sequences
+@cindex escape sequences @seealso{backslash}
+@cindex backslash (@code{\}) @subentry in escape sequences
+@cindex @code{\} (backslash) @subentry in escape sequences
Some characters cannot be included literally in string constants
(@code{"foo"}) or regexp constants (@code{/foo/}).
Instead, they should be represented with @dfn{escape sequences},
@@ -5232,50 +5250,51 @@ all the escape sequences used in @command{awk} and
what they represent. Unless noted otherwise, all these escape
sequences apply to both string constants and regexp constants:
+@cindex ASCII
@table @code
@item \\
A literal backslash, @samp{\}.
@c @cindex @command{awk} language, V.4 version
-@cindex @code{\} (backslash), @code{\a} escape sequence
-@cindex backslash (@code{\}), @code{\a} escape sequence
+@cindex @code{\} (backslash) @subentry @code{\a} escape sequence
+@cindex backslash (@code{\}) @subentry @code{\a} escape sequence
@item \a
The ``alert'' character, @kbd{Ctrl-g}, ASCII code 7 (BEL).
(This often makes some sort of audible noise.)
-@cindex @code{\} (backslash), @code{\b} escape sequence
-@cindex backslash (@code{\}), @code{\b} escape sequence
+@cindex @code{\} (backslash) @subentry @code{\b} escape sequence
+@cindex backslash (@code{\}) @subentry @code{\b} escape sequence
@item \b
Backspace, @kbd{Ctrl-h}, ASCII code 8 (BS).
-@cindex @code{\} (backslash), @code{\f} escape sequence
-@cindex backslash (@code{\}), @code{\f} escape sequence
+@cindex @code{\} (backslash) @subentry @code{\f} escape sequence
+@cindex backslash (@code{\}) @subentry @code{\f} escape sequence
@item \f
Formfeed, @kbd{Ctrl-l}, ASCII code 12 (FF).
-@cindex @code{\} (backslash), @code{\n} escape sequence
-@cindex backslash (@code{\}), @code{\n} escape sequence
+@cindex @code{\} (backslash) @subentry @code{\n} escape sequence
+@cindex backslash (@code{\}) @subentry @code{\n} escape sequence
@item \n
Newline, @kbd{Ctrl-j}, ASCII code 10 (LF).
-@cindex @code{\} (backslash), @code{\r} escape sequence
-@cindex backslash (@code{\}), @code{\r} escape sequence
+@cindex @code{\} (backslash) @subentry @code{\r} escape sequence
+@cindex backslash (@code{\}) @subentry @code{\r} escape sequence
@item \r
Carriage return, @kbd{Ctrl-m}, ASCII code 13 (CR).
-@cindex @code{\} (backslash), @code{\t} escape sequence
-@cindex backslash (@code{\}), @code{\t} escape sequence
+@cindex @code{\} (backslash) @subentry @code{\t} escape sequence
+@cindex backslash (@code{\}) @subentry @code{\t} escape sequence
@item \t
Horizontal TAB, @kbd{Ctrl-i}, ASCII code 9 (HT).
@c @cindex @command{awk} language, V.4 version
-@cindex @code{\} (backslash), @code{\v} escape sequence
-@cindex backslash (@code{\}), @code{\v} escape sequence
+@cindex @code{\} (backslash) @subentry @code{\v} escape sequence
+@cindex backslash (@code{\}) @subentry @code{\v} escape sequence
@item \v
Vertical TAB, @kbd{Ctrl-k}, ASCII code 11 (VT).
-@cindex @code{\} (backslash), @code{\}@var{nnn} escape sequence
-@cindex backslash (@code{\}), @code{\}@var{nnn} escape sequence
+@cindex @code{\} (backslash) @subentry @code{\}@var{nnn} escape sequence
+@cindex backslash (@code{\}) @subentry @code{\}@var{nnn} escape sequence
@item \@var{nnn}
The octal value @var{nnn}, where @var{nnn} stands for 1 to 3 digits
between @samp{0} and @samp{7}. For example, the code for the ASCII ESC
@@ -5283,10 +5302,10 @@ between @samp{0} and @samp{7}. For example, the code
for the ASCII ESC
@c @cindex @command{awk} language, V.4 version
@c @cindex @command{awk} language, POSIX version
-@cindex @code{\} (backslash), @code{\x} escape sequence
-@cindex backslash (@code{\}), @code{\x} escape sequence
-@cindex common extensions, @code{\x} escape sequence
-@cindex extensions, common@comma{} @code{\x} escape sequence
+@cindex @code{\} (backslash) @subentry @code{\x} escape sequence
+@cindex backslash (@code{\}) @subentry @code{\x} escape sequence
+@cindex common extensions @subentry @code{\x} escape sequence
+@cindex extensions @subentry common @subentry @code{\x} escape sequence
@item \x@var{hh}@dots{}
The hexadecimal value @var{hh}, where @var{hh} stands for a sequence
of hexadecimal digits (@samp{0}--@samp{9}, and either @samp{A}--@samp{F}
@@ -5307,8 +5326,8 @@ As of @value{PVERSION} 4.2, only two digits
are processed.
@end quotation
-@cindex @code{\} (backslash), @code{\/} escape sequence
-@cindex backslash (@code{\}), @code{\/} escape sequence
+@cindex @code{\} (backslash) @subentry @code{\/} escape sequence
+@cindex backslash (@code{\}) @subentry @code{\/} escape sequence
@item \/
A literal slash (necessary for regexp constants only).
This sequence is used when you want to write a regexp
@@ -5319,8 +5338,8 @@ Because the regexp is delimited by
slashes, you need to escape any slash that is part of the pattern,
in order to tell @command{awk} to keep processing the rest of the regexp.
-@cindex @code{\} (backslash), @code{\"} escape sequence
-@cindex backslash (@code{\}), @code{\"} escape sequence
+@cindex @code{\} (backslash) @subentry @code{\"} escape sequence
+@cindex backslash (@code{\}) @subentry @code{\"} escape sequence
@item \"
A literal double quote (necessary for string constants only).
This sequence is used when you want to write a string
@@ -5342,20 +5361,20 @@ means that the next character should be taken
literally, even if it would
normally be a regexp operator. For example, @code{/a\+b/} matches the three
characters @samp{a+b}.
-@cindex backslash (@code{\}), in escape sequences
-@cindex @code{\} (backslash), in escape sequences
+@cindex backslash (@code{\}) @subentry in escape sequences
+@cindex @code{\} (backslash) @subentry in escape sequences
@cindex portability
For complete portability, do not use a backslash before any character not
shown in the previous list or that is not an operator.
@c 11/2014: Moved so as to not stack sidebars
@sidebar Backslash Before Regular Characters
-@cindex portability, backslash in escape sequences
-@cindex POSIX @command{awk}, backslashes in string constants
-@cindex backslash (@code{\}), in escape sequences, POSIX and
-@cindex @code{\} (backslash), in escape sequences, POSIX and
+@cindex portability @subentry backslash in escape sequences
+@cindex POSIX @command{awk} @subentry backslashes in string constants
+@cindex backslash (@code{\}) @subentry in escape sequences @subentry POSIX and
+@cindex @code{\} (backslash) @subentry in escape sequences @subentry POSIX and
-@cindex troubleshooting, backslash before nonspecial character
+@cindex troubleshooting @subentry backslash before nonspecial character
If you place a backslash in a string constant before something that is
not one of the characters previously listed, POSIX @command{awk} purposely
leaves what happens as undefined. There are two choices:
@@ -5374,8 +5393,9 @@ surrounded by whitespace as the field separator. There
should be
two backslashes in the string: @samp{FS = @w{"[ \t]+\\|[ \t]+"}}.)
@c I did this! This is why I added the warning.
-@cindex @command{gawk}, escape sequences
-@cindex Unix @command{awk}, backslashes in escape sequences
+@cindex @command{gawk} @subentry escape sequences
+@cindex @command{gawk} @subentry escape sequences @seealso{backslash}
+@cindex Unix @command{awk} @subentry backslashes in escape sequences
@cindex @command{mawk} utility
@item Leave the backslash alone
Some other @command{awk} implementations do this.
@@ -5404,7 +5424,7 @@ literally.
@end itemize
@sidebar Escape Sequences for Metacharacters
-@cindex metacharacters, escape sequences for
+@cindex metacharacters @subentry escape sequences for
Suppose you use an octal or hexadecimal
escape to represent a regexp metacharacter.
@@ -5412,7 +5432,7 @@ escape to represent a regexp metacharacter.
Does @command{awk} treat the character as a literal character or as a regexp
operator?
-@cindex dark corner, escape sequences, for metacharacters
+@cindex dark corner @subentry escape sequences @subentry for metacharacters
Historically, such characters were taken literally.
@value{DARKCORNER}
However, the POSIX standard indicates that they should be treated
@@ -5425,8 +5445,8 @@ escape sequences literally when used in regexp constants.
Thus,
@node Regexp Operators
@section Regular Expression Operators
-@cindex regular expressions, operators
-@cindex metacharacters in regular expressions
+@cindex regular expressions @subentry operators
+@cindex metacharacters @subentry in regular expressions
You can combine regular expressions with special characters,
called @dfn{regular expression operators} or @dfn{metacharacters}, to
@@ -5454,17 +5474,17 @@ sequences and that are not listed here stand for
themselves:
@c Use @asis so the docbook comes out ok. Sigh.
@table @asis
-@cindex backslash (@code{\}), regexp operator
-@cindex @code{\} (backslash), regexp operator
+@cindex backslash (@code{\}) @subentry regexp operator
+@cindex @code{\} (backslash) @subentry regexp operator
@item @code{\}
This suppresses the special meaning of a character when
matching. For example, @samp{\$}
matches the character @samp{$}.
-@cindex regular expressions, anchors in
-@cindex Texinfo, chapter beginnings in files
-@cindex @code{^} (caret), regexp operator
-@cindex caret (@code{^}), regexp operator
+@cindex regular expressions @subentry anchors in
+@cindex Texinfo @subentry chapter beginnings in files
+@cindex @code{^} (caret) @subentry regexp operator
+@cindex caret (@code{^}) @subentry regexp operator
@item @code{^}
This matches the beginning of a string. @samp{^@@chapter}
matches @samp{@@chapter} at the beginning of a string,
@@ -5481,8 +5501,8 @@ The condition is not true in the following example:
if ("line1\nLINE 2" ~ /^L/) @dots{}
@end example
-@cindex @code{$} (dollar sign), regexp operator
-@cindex dollar sign (@code{$}), regexp operator
+@cindex @code{$} (dollar sign) @subentry regexp operator
+@cindex dollar sign (@code{$}) @subentry regexp operator
@item @code{$}
This is similar to @samp{^}, but it matches only at the end of a string.
For example, @samp{p$}
@@ -5506,7 +5526,8 @@ concatenation, we can make a regular expression such as
@samp{U.A}, which
matches any three-character sequence that begins with @samp{U} and ends
with @samp{A}.
-@cindex POSIX @command{awk}, period (@code{.})@comma{} using
+@cindex POSIX mode
+@cindex POSIX @command{awk} @subentry period (@code{.}), using
In strict POSIX mode (@pxref{Options}),
@samp{.} does not match the @sc{nul}
character, which is a character with all bits equal to zero.
@@ -5516,9 +5537,9 @@ may not be able to match the @sc{nul} character.
@cindex @code{[]} (square brackets), regexp operator
@cindex square brackets (@code{[]}), regexp operator
@cindex bracket expressions
-@cindex character sets, See Also bracket expressions
-@cindex character lists, See bracket expressions
-@cindex character classes, See bracket expressions
+@cindex character sets (in regular expressions) @seeentry{bracket expressions}
+@cindex character lists @seeentry{bracket expressions}
+@cindex character classes @seeentry{bracket expressions}
@item @code{[}@dots{}@code{]}
This is called a @dfn{bracket expression}.@footnote{In other literature,
you may see a bracket expression referred to as either a
@@ -5530,7 +5551,7 @@ discussion of what can be inside the square brackets of a
bracket expression
is given in
@ref{Bracket Expressions}.
-@cindex bracket expressions, complemented
+@cindex bracket expressions @subentry complemented
@item @code{[^}@dots{}@code{]}
This is a @dfn{complemented bracket expression}. The first character after
the @samp{[} @emph{must} be a @samp{^}. It matches any characters
@@ -5550,8 +5571,8 @@ a lowercase English vowel.
The alternation applies to the largest possible regexps on either side.
-@cindex @code{()} (parentheses), regexp operator
-@cindex parentheses @code{()}, regexp operator
+@cindex @code{()} (parentheses) @subentry regexp operator
+@cindex parentheses @code{()} @subentry regexp operator
@item @code{(}@dots{}@code{)}
Parentheses are used for grouping in regular expressions, as in
arithmetic. They can be used to concatenate regular expressions
@@ -5566,8 +5587,8 @@ one literally, precede it with a backslash. However, the
right or
closing parenthesis is only special when paired with a left parenthesis;
an unpaired right parenthesis is (silently) treated as a regular character.
-@cindex @code{*} (asterisk), @code{*} operator, as regexp operator
-@cindex asterisk (@code{*}), @code{*} operator, as regexp operator
+@cindex @code{*} (asterisk) @subentry @code{*} operator @subentry as regexp
operator
+@cindex asterisk (@code{*}) @subentry @code{*} operator @subentry as regexp
operator
@item @code{*}
This symbol means that the preceding regular expression should be
repeated as many times as necessary to find a match. For example, @samp{ph*}
@@ -5585,21 +5606,23 @@ Second, @samp{*} finds as many repetitions as possible.
If the text
to be matched is @samp{phhhhhhhhhhhhhhooey}, @samp{ph*} matches all of
the @samp{h}s.
-@cindex @code{+} (plus sign), regexp operator
-@cindex plus sign (@code{+}), regexp operator
+@cindex @code{+} (plus sign) @subentry regexp operator
+@cindex plus sign (@code{+}) @subentry regexp operator
@item @code{+}
This symbol is similar to @samp{*}, except that the preceding expression must
be
matched at least once. This means that @samp{wh+y}
would match @samp{why} and @samp{whhy}, but not @samp{wy}, whereas
@samp{wh*y} would match all three.
-@cindex @code{?} (question mark), regexp operator
-@cindex question mark (@code{?}), regexp operator
+@cindex @code{?} (question mark) @subentry regexp operator
+@cindex question mark (@code{?}) @subentry regexp operator
@item @code{?}
This symbol is similar to @samp{*}, except that the preceding expression can be
matched either once or not at all. For example, @samp{fe?d}
matches @samp{fed} and @samp{fd}, but nothing else.
+@cindex @code{@{@}} (braces) @subentry regexp operator
+@cindex braces (@code{@{@}}) @subentry regexp operator
@cindex interval expressions, regexp operator
@item @code{@{}@var{n}@code{@}}
@itemx @code{@{}@var{n}@code{,@}}
@@ -5624,16 +5647,16 @@ Matches @samp{whhy}, @samp{whhhy}, and so on.
@end table
@end table
-@cindex precedence, regexp operators
-@cindex regular expressions, operators, precedence of
+@cindex precedence @subentry regexp operators
+@cindex regular expressions @subentry operators @subentry precedence of
In regular expressions, the @samp{*}, @samp{+}, and @samp{?} operators,
as well as the braces @samp{@{} and @samp{@}},
have
the highest precedence, followed by concatenation, and finally by @samp{|}.
As in arithmetic, parentheses can change how operators are grouped.
-@cindex POSIX @command{awk}, regular expressions and
-@cindex @command{gawk}, regular expressions, precedence
+@cindex POSIX @command{awk} @subentry regular expressions and
+@cindex @command{gawk} @subentry regular expressions @subentry precedence
In POSIX @command{awk} and @command{gawk}, the @samp{*}, @samp{+}, and
@samp{?} operators stand for themselves when there is nothing in the
regexp that precedes them. For example, @code{/+/} matches a literal
@@ -5643,12 +5666,12 @@ usage as a syntax error.
@node Interval Expressions
@subsection Some Notes On Interval Expressions
-@cindex POSIX @command{awk}, interval expressions in
+@cindex POSIX @command{awk} @subentry interval expressions in
Interval expressions were not traditionally available in @command{awk}.
They were added as part of the POSIX standard to make @command{awk}
and @command{egrep} consistent with each other.
-@cindex @command{gawk}, interval expressions and
+@cindex @command{gawk} @subentry interval expressions and
Initially, because old programs may use @samp{@{} and @samp{@}} in regexp
constants,
@command{gawk} did @emph{not} match interval expressions
@@ -5681,9 +5704,9 @@ when in compatibility mode (@pxref{Options}).
@node Bracket Expressions
@section Using Bracket Expressions
@cindex bracket expressions
-@cindex bracket expressions, range expressions
+@cindex bracket expressions @subentry range expressions
@cindex range expressions (regexps)
-@cindex character lists in regular expressions
+@cindex bracket expressions @subentry character lists
As mentioned earlier, a bracket expression matches any character among
those listed between the opening and closing square brackets.
@@ -5705,12 +5728,12 @@ the range 0--256). To match a range of characters
where the endpoints
of the range are larger than 256, enter the multibyte encodings of
the characters directly.
-@cindex @code{\} (backslash), in bracket expressions
-@cindex backslash (@code{\}), in bracket expressions
-@cindex @code{^} (caret), in bracket expressions
-@cindex caret (@code{^}), in bracket expressions
-@cindex @code{-} (hyphen), in bracket expressions
-@cindex hyphen (@code{-}), in bracket expressions
+@cindex @code{\} (backslash) @subentry in bracket expressions
+@cindex backslash (@code{\}) @subentry in bracket expressions
+@cindex @code{^} (caret) @subentry in bracket expressions
+@cindex caret (@code{^}) @subentry in bracket expressions
+@cindex @code{-} (hyphen) @subentry in bracket expressions
+@cindex hyphen (@code{-}) @subentry in bracket expressions
To include one of the characters @samp{\}, @samp{]}, @samp{-}, or @samp{^} in a
bracket expression, put a @samp{\} in front of it. For example:
@@ -5724,7 +5747,7 @@ Additionally, if you place @samp{]} right after the
opening
@samp{[}, the closing bracket is treated as one of the
characters to be matched.
-@cindex POSIX @command{awk}, bracket expressions and
+@cindex POSIX @command{awk} @subentry bracket expressions and
@cindex Extended Regular Expressions (EREs)
@cindex EREs (Extended Regular Expressions)
@cindex @command{egrep} utility
@@ -5736,8 +5759,8 @@ of the POSIX specification for Extended Regular
Expressions (EREs).
POSIX EREs are based on the regular expressions accepted by the
traditional @command{egrep} utility.
-@cindex bracket expressions, character classes
-@cindex POSIX @command{awk}, bracket expressions and, character classes
+@cindex bracket expressions @subentry character classes
+@cindex POSIX @command{awk} @subentry bracket expressions and @subentry
character classes
@dfn{Character classes} are a feature introduced in the POSIX standard.
A character class is a special notation for describing
lists of characters that have a specific attribute, but the
@@ -5805,6 +5828,7 @@ depends on various factors out of our control.
@c Thanks to
@c Date: Tue, 01 Jul 2014 07:39:51 +0200
@c From: Hermann Peifer <address@hidden>
+@cindex ASCII
Some utilities that match regular expressions provide a nonstandard
@samp{[:ascii:]} character class; @command{awk} does not. However, you
can simulate such a construct using @samp{[\x00-\x7F]}. This matches
@@ -5819,8 +5843,8 @@ treat @code{[:blank:]} like @code{[:space:]}, incorrectly
matching
more characters than they should. Caveat Emptor.
@end quotation
-@cindex bracket expressions, collating elements
-@cindex bracket expressions, non-ASCII
+@cindex bracket expressions @subentry collating elements
+@cindex bracket expressions @subentry non-ASCII
@cindex collating elements
Two additional special sequences can appear in bracket expressions.
These apply to non-ASCII character sets, which can have single symbols
@@ -5831,7 +5855,7 @@ and a grave-accented ``@`e'' are equivalent.)
These sequences are:
@table @asis
-@cindex bracket expressions, collating symbols
+@cindex bracket expressions @subentry collating symbols
@cindex collating symbols
@item Collating symbols
Multicharacter collating elements enclosed between
@@ -5839,7 +5863,7 @@ Multicharacter collating elements enclosed between
then @samp{[[.ch.]]} is a regexp that matches this collating element, whereas
@samp{[ch]} is a regexp that matches either @samp{c} or @samp{h}.
-@cindex bracket expressions, equivalence classes
+@cindex bracket expressions @subentry equivalence classes
@item Equivalence classes
Locale-specific names for a list of
characters that are equal. The name is enclosed between
@@ -5851,9 +5875,9 @@ that matches any of @samp{e}, @samp{@^e}, @samp{@'e}, or
@samp{@`e}.
These features are very valuable in non-English-speaking locales.
-@cindex internationalization, localization, character classes
-@cindex @command{gawk}, character classes and
-@cindex POSIX @command{awk}, bracket expressions and, character classes
+@cindex internationalization @subentry localization @subentry character classes
+@cindex @command{gawk} @subentry character classes and
+@cindex POSIX @command{awk} @subentry bracket expressions and @subentry
character classes
@quotation CAUTION
The library functions that @command{gawk} uses for regular
expression matching currently recognize only POSIX character classes;
@@ -5868,7 +5892,7 @@ taken literally. This is also true of @samp{.} and
@samp{*}.
@node Leftmost Longest
@section How Much Text Matches?
-@cindex regular expressions, leftmost longest match
+@cindex regular expressions @subentry leftmost longest match
@c @cindex matching, leftmost longest
Consider the following:
@@ -5907,12 +5931,12 @@ and also @pxref{Field Separators}).
@node Computed Regexps
@section Using Dynamic Regexps
-@cindex regular expressions, computed
-@cindex regular expressions, dynamic
+@cindex regular expressions @subentry computed
+@cindex regular expressions @subentry dynamic
@cindex @code{~} (tilde), @code{~} operator
@cindex tilde (@code{~}), @code{~} operator
-@cindex @code{!} (exclamation point), @code{!~} operator
-@cindex exclamation point (@code{!}), @code{!~} operator
+@cindex @code{!} (exclamation point) @subentry @code{!~} operator
+@cindex exclamation point (@code{!}) @subentry @code{!~} operator
@c @cindex operators, @code{~}
@c @cindex operators, @code{!~}
The righthand side of a @samp{~} or @samp{!~} operator need not be a
@@ -5943,11 +5967,11 @@ on the right. This is true of any string-valued
expression (such as
@code{digits_regexp}, shown in the previous example), not just string
constants.
@end quotation
-@cindex regexp constants, slashes vs.@: quotes
-@cindex @code{\} (backslash), in regexp constants
-@cindex backslash (@code{\}), in regexp constants
-@cindex @code{"} (double quote), in regexp constants
-@cindex double quote (@code{"}), in regexp constants
+@cindex regexp constants @subentry slashes vs.@: quotes
+@cindex @code{\} (backslash) @subentry in regexp constants
+@cindex backslash (@code{\}) @subentry in regexp constants
+@cindex @code{"} (double quote) @subentry in regexp constants
+@cindex double quote (@code{"}) @subentry in regexp constants
What difference does it make if the string is
scanned twice? The answer has to do with escape sequences, and particularly
with backslashes. To get a backslash into a regular expression inside a
@@ -5959,9 +5983,9 @@ you have to type @code{"\\*"}. The first backslash
escapes the
second one so that the string actually contains the
two characters @samp{\} and @samp{*}.
-@cindex troubleshooting, regexp constants vs.@: string constants
-@cindex regexp constants, vs.@: string constants
-@cindex string constants, vs.@: regexp constants
+@cindex troubleshooting @subentry regexp constants vs.@: string constants
+@cindex regexp constants @subentry vs.@: string constants
+@cindex string @subentry constants @subentry vs.@: regexp constants
Given that you can use both regexp and string constants to describe
regular expressions, which should you use? The answer is ``regexp
constants,'' for several reasons:
@@ -5986,8 +6010,8 @@ intend a regexp match.
@end itemize
@sidebar Using @code{\n} in Bracket Expressions of Dynamic Regexps
-@cindex regular expressions, dynamic, with embedded newlines
-@cindex newlines, in dynamic regexps
+@cindex regular expressions @subentry dynamic @subentry with embedded newlines
+@cindex newlines @subentry in dynamic regexps
Some older versions of @command{awk} do not allow the newline
character to be used inside a bracket expression for a dynamic regexp:
@@ -6001,7 +6025,7 @@ $ @kbd{awk '$0 ~ "[ \t\n]"'}
@error{} $0 ~ "[ >>> \t\n]" <<<
@end example
-@cindex newlines, in regexp constants
+@cindex newlines @subentry in regexp constants
But a newline in a regexp constant works with no problem:
@example
@@ -6020,10 +6044,10 @@ occur often in practice, but it's worth noting for
future reference.
@c This section adapted (long ago) from the regex-0.12 manual
-@cindex regular expressions, operators, @command{gawk}
-@cindex @command{gawk}, regular expressions, operators
-@cindex operators, GNU-specific
-@cindex regular expressions, operators, for words
+@cindex regular expressions @subentry operators @subentry @command{gawk}
+@cindex @command{gawk} @subentry regular expressions @subentry operators
+@cindex operators @subentry GNU-specific
+@cindex regular expressions @subentry operators @subentry for words
@cindex word, regexp definition of
GNU software that deals with regular expressions provides a number of
additional regexp operators. These operators are described in this
@@ -6035,64 +6059,64 @@ or underscores (@samp{_}):
@table @code
@c @cindex operators, @code{\s} (@command{gawk})
-@cindex backslash (@code{\}), @code{\s} operator (@command{gawk})
-@cindex @code{\} (backslash), @code{\s} operator (@command{gawk})
+@cindex backslash (@code{\}) @subentry @code{\s} operator (@command{gawk})
+@cindex @code{\} (backslash) @subentry @code{\s} operator (@command{gawk})
@item \s
Matches any whitespace character.
Think of it as shorthand for
@w{@samp{[[:space:]]}}.
@c @cindex operators, @code{\S} (@command{gawk})
-@cindex backslash (@code{\}), @code{\S} operator (@command{gawk})
-@cindex @code{\} (backslash), @code{\S} operator (@command{gawk})
+@cindex backslash (@code{\}) @subentry @code{\S} operator (@command{gawk})
+@cindex @code{\} (backslash) @subentry @code{\S} operator (@command{gawk})
@item \S
Matches any character that is not whitespace.
Think of it as shorthand for
@w{@samp{[^[:space:]]}}.
@c @cindex operators, @code{\w} (@command{gawk})
-@cindex backslash (@code{\}), @code{\w} operator (@command{gawk})
-@cindex @code{\} (backslash), @code{\w} operator (@command{gawk})
+@cindex backslash (@code{\}) @subentry @code{\w} operator (@command{gawk})
+@cindex @code{\} (backslash) @subentry @code{\w} operator (@command{gawk})
@item \w
Matches any word-constituent character---that is, it matches any
letter, digit, or underscore. Think of it as shorthand for
@w{@samp{[[:alnum:]_]}}.
@c @cindex operators, @code{\W} (@command{gawk})
-@cindex backslash (@code{\}), @code{\W} operator (@command{gawk})
-@cindex @code{\} (backslash), @code{\W} operator (@command{gawk})
+@cindex backslash (@code{\}) @subentry @code{\W} operator (@command{gawk})
+@cindex @code{\} (backslash) @subentry @code{\W} operator (@command{gawk})
@item \W
Matches any character that is not word-constituent.
Think of it as shorthand for
@w{@samp{[^[:alnum:]_]}}.
@c @cindex operators, @code{\<} (@command{gawk})
-@cindex backslash (@code{\}), @code{\<} operator (@command{gawk})
-@cindex @code{\} (backslash), @code{\<} operator (@command{gawk})
+@cindex backslash (@code{\}) @subentry @code{\<} operator (@command{gawk})
+@cindex @code{\} (backslash) @subentry @code{\<} operator (@command{gawk})
@item \<
Matches the empty string at the beginning of a word.
For example, @code{/\<away/} matches @samp{away} but not
@samp{stowaway}.
@c @cindex operators, @code{\>} (@command{gawk})
-@cindex backslash (@code{\}), @code{\>} operator (@command{gawk})
-@cindex @code{\} (backslash), @code{\>} operator (@command{gawk})
+@cindex backslash (@code{\}) @subentry @code{\>} operator (@command{gawk})
+@cindex @code{\} (backslash) @subentry @code{\>} operator (@command{gawk})
@item \>
Matches the empty string at the end of a word.
For example, @code{/stow\>/} matches @samp{stow} but not @samp{stowaway}.
@c @cindex operators, @code{\y} (@command{gawk})
-@cindex backslash (@code{\}), @code{\y} operator (@command{gawk})
-@cindex @code{\} (backslash), @code{\y} operator (@command{gawk})
-@cindex word boundaries@comma{} matching
+@cindex backslash (@code{\}) @subentry @code{\y} operator (@command{gawk})
+@cindex @code{\} (backslash) @subentry @code{\y} operator (@command{gawk})
+@cindex word boundaries, matching
@item \y
Matches the empty string at either the beginning or the
end of a word (i.e., the word boundar@strong{y}). For example,
@samp{\yballs?\y}
matches either @samp{ball} or @samp{balls}, as a separate word.
@c @cindex operators, @code{\B} (@command{gawk})
-@cindex backslash (@code{\}), @code{\B} operator (@command{gawk})
-@cindex @code{\} (backslash), @code{\B} operator (@command{gawk})
+@cindex backslash (@code{\}) @subentry @code{\B} operator (@command{gawk})
+@cindex @code{\} (backslash) @subentry @code{\B} operator (@command{gawk})
@item \B
Matches the empty string that occurs between two
word-constituent characters. For example,
@@ -6100,9 +6124,9 @@ word-constituent characters. For example,
@samp{\B} is essentially the opposite of @samp{\y}.
@end table
-@cindex buffers, operators for
-@cindex regular expressions, operators, for buffers
-@cindex operators, string-matching, for buffers
+@cindex buffers @subentry operators for
+@cindex regular expressions @subentry operators @subentry for buffers
+@cindex operators @subentry string-matching @subentry for buffers
There are two other operators that work on buffers. In Emacs, a
@dfn{buffer} is, naturally, an Emacs buffer.
Other GNU programs, including @command{gawk},
@@ -6112,31 +6136,31 @@ The operators are:
@table @code
@item \`
@c @cindex operators, @code{\`} (@command{gawk})
-@cindex backslash (@code{\}), @code{\`} operator (@command{gawk})
-@cindex @code{\} (backslash), @code{\`} operator (@command{gawk})
+@cindex backslash (@code{\}) @subentry @code{\`} operator (@command{gawk})
+@cindex @code{\} (backslash) @subentry @code{\`} operator (@command{gawk})
Matches the empty string at the
beginning of a buffer (string)
@c @cindex operators, @code{\'} (@command{gawk})
-@cindex backslash (@code{\}), @code{\'} operator (@command{gawk})
-@cindex @code{\} (backslash), @code{\'} operator (@command{gawk})
+@cindex backslash (@code{\}) @subentry @code{\'} operator (@command{gawk})
+@cindex @code{\} (backslash) @subentry @code{\'} operator (@command{gawk})
@item \'
Matches the empty string at the
end of a buffer (string)
@end table
-@cindex @code{^} (caret), regexp operator
-@cindex caret (@code{^}), regexp operator
-@cindex @code{?} (question mark), regexp operator
-@cindex question mark (@code{?}), regexp operator
+@cindex @code{^} (caret) @subentry regexp operator
+@cindex caret (@code{^}) @subentry regexp operator
+@cindex @code{?} (question mark) @subentry regexp operator
+@cindex question mark (@code{?}) @subentry regexp operator
Because @samp{^} and @samp{$} always work in terms of the beginning
and end of strings, these operators don't add any new capabilities
for @command{awk}. They are provided for compatibility with other
GNU software.
-@cindex @command{gawk}, word-boundary operator
+@cindex @command{gawk} @subentry word-boundary operator
@cindex word-boundary operator (@command{gawk})
-@cindex operators, word-boundary (@command{gawk})
+@cindex operators @subentry word-boundary (@command{gawk})
In other GNU software, the word-boundary operator is @samp{\b}. However,
that conflicts with the @command{awk} language's definition of @samp{\b}
as backspace, so @command{gawk} uses a different letter.
@@ -6145,8 +6169,8 @@ GNU operators, but this was deemed too confusing. The
current
method of using @samp{\y} for the GNU @samp{\b} appears to be the
lesser of two evils.
-@cindex regular expressions, @command{gawk}, command-line options
-@cindex @command{gawk}, command-line options, and regular expressions
+@cindex regular expressions @subentry @command{gawk}, command-line options
+@cindex @command{gawk} @subentry command-line options, regular expressions and
The various command-line options
(@pxref{Options})
control how @command{gawk} interprets characters in regexps:
@@ -6189,8 +6213,8 @@ Otherwise, interval expressions are available by default.
@node Case-sensitivity
@section Case Sensitivity in Matching
-@cindex regular expressions, case sensitivity
-@cindex case sensitivity, regexps and
+@cindex regular expressions @subentry case sensitivity
+@cindex case sensitivity @subentry regexps and
Case is normally significant in regular expressions, both when matching
ordinary characters (i.e., not metacharacters) and inside bracket
expressions. Thus, a @samp{w} in a regular expression matches only a lowercase
@@ -6216,15 +6240,15 @@ tolower($1) ~ /foo/ @{ @dots{} @}
converts the first field to lowercase before matching against it.
This works in any POSIX-compliant @command{awk}.
-@cindex @command{gawk}, regular expressions, case sensitivity
-@cindex case sensitivity, @command{gawk}
-@cindex differences in @command{awk} and @command{gawk}, regular expressions
+@cindex @command{gawk} @subentry regular expressions @subentry case sensitivity
+@cindex case sensitivity @subentry @command{gawk}
+@cindex differences in @command{awk} and @command{gawk} @subentry regular
expressions
@cindex @code{~} (tilde), @code{~} operator
@cindex tilde (@code{~}), @code{~} operator
-@cindex @code{!} (exclamation point), @code{!~} operator
-@cindex exclamation point (@code{!}), @code{!~} operator
-@cindex @code{IGNORECASE} variable, with @code{~} and @code{!~} operators
-@cindex @command{gawk}, @code{IGNORECASE} variable in
+@cindex @code{!} (exclamation point) @subentry @code{!~} operator
+@cindex exclamation point (@code{!}) @subentry @code{!~} operator
+@cindex @code{IGNORECASE} variable @subentry with @code{~} and @code{!~}
operators
+@cindex @command{gawk} @subentry @code{IGNORECASE} variable in
@c @cindex variables, @code{IGNORECASE}
Another method, specific to @command{gawk}, is to set the variable
@code{IGNORECASE} to a nonzero value (@pxref{Built-in Variables}).
@@ -6329,7 +6353,7 @@ versions, use @code{tolower()} or @code{toupper()}.
@chapter Reading Input Files
@cindex reading input files
-@cindex input files, reading
+@cindex input files @subentry reading
@cindex input files
@cindex @code{FILENAME} variable
In the typical @command{awk} program,
@@ -6381,8 +6405,8 @@ used with it do not have to be named on the @command{awk}
command line
@node Records
@section How Input Is Split into Records
-@cindex input, splitting into records
-@cindex records, splitting input into
+@cindex input @subentry splitting into records
+@cindex records @subentry splitting input into
@cindex @code{NR} variable
@cindex @code{FNR} variable
@command{awk} divides the input for your program into records and fields.
@@ -6407,7 +6431,7 @@ This mechanism is explained in greater detail shortly.
@node awk split records
@subsection Record Splitting with Standard @command{awk}
-@cindex separators, for records
+@cindex separators @subentry for records
@cindex record separators
Records are separated by a character called the @dfn{record separator}.
By default, the record separator is the newline character.
@@ -6415,8 +6439,8 @@ This is why records are, by default, single lines.
To use a different character for the record separator,
simply assign that character to the predefined variable @code{RS}.
-@cindex record separators, newlines as
-@cindex newlines, as record separators
+@cindex record separators @subentry newlines as
+@cindex newlines @subentry as record separators
@cindex @code{RS} variable
Like any other variable,
the value of @code{RS} can be changed in the @command{awk} program
@@ -6508,8 +6532,8 @@ the newline separating them in the output
is the original newline in the @value{DF}, not the one added by
@command{awk} when it printed the record!
-@cindex record separators, changing
-@cindex separators, for records
+@cindex record separators @subentry changing
+@cindex separators @subentry for records
Another way to change the record separator is on the command line,
using the variable-assignment feature
(@pxref{Other Arguments}):
@@ -6550,14 +6574,14 @@ variable @code{NF} is the number of fields in the
current record.
printing @samp{0} as the result. Most other versions of @command{awk}
also act this way.)
-@cindex dark corner, input files
+@cindex dark corner @subentry input files
Reaching the end of an input file terminates the current input record,
even if the last character in the file is not the character in @code{RS}.
@value{DARKCORNER}
-@cindex empty strings
+@cindex empty strings @seeentry{null strings}
@cindex null strings
-@cindex strings, empty, See null strings
+@cindex strings @subentry empty @seeentry{null strings}
The empty string @code{""} (a string without any characters)
has a special meaning
as the value of @code{RS}. It means that records are separated
@@ -6569,15 +6593,15 @@ the new value is used to delimit subsequent records,
but the record
currently being processed, as well as records already processed, are not
affected.
-@cindex @command{gawk}, @code{RT} variable in
+@cindex @command{gawk} @subentry @code{RT} variable in
@cindex @code{RT} variable
-@cindex records, terminating
+@cindex records @subentry terminating
@cindex terminating records
-@cindex differences in @command{awk} and @command{gawk}, record separators
-@cindex differences in @command{awk} and @command{gawk}, @code{RS}/@code{RT}
variables
-@cindex regular expressions, as record separators
-@cindex record separators, regular expressions as
-@cindex separators, for records, regular expressions as
+@cindex differences in @command{awk} and @command{gawk} @subentry record
separators
+@cindex differences in @command{awk} and @command{gawk} @subentry
@code{RS}/@code{RT} variables
+@cindex regular expressions @subentry as record separators
+@cindex record separators @subentry regular expressions as
+@cindex separators @subentry for records @subentry regular expressions as
After the end of the record has been determined, @command{gawk}
sets the variable @code{RT} to the text in the input that matched
@code{RS}.
@@ -6585,8 +6609,8 @@ sets the variable @code{RT} to the text in the input that
matched
@node gawk split records
@subsection Record Splitting with @command{gawk}
-@cindex common extensions, @code{RS} as a regexp
-@cindex extensions, common@comma{} @code{RS} as a regexp
+@cindex common extensions @subentry @code{RS} as a regexp
+@cindex extensions @subentry common @subentry @code{RS} as a regexp
When using @command{gawk}, the value of @code{RS} is not limited to a
one-character string. If it contains more than one character, it is
treated as a regular expression
@@ -6650,9 +6674,9 @@ that happens to contain newline characters.
It is thus best to avoid anchor metacharacters in the value of @code{RS}.
@end quotation
-@cindex @command{gawk}, @code{RT} variable in
+@cindex @command{gawk} @subentry @code{RT} variable in
@cindex @code{RT} variable
-@cindex differences in @command{awk} and @command{gawk}, @code{RS}/@code{RT}
variables
+@cindex differences in @command{awk} and @command{gawk} @subentry
@code{RS}/@code{RT} variables
The use of @code{RS} as a regular expression and the @code{RT}
variable are @command{gawk} extensions; they are not available in
compatibility mode
@@ -6661,7 +6685,7 @@ In compatibility mode, only the first character of the
value of
@code{RS} determines the end of the record.
@sidebar @code{RS = "\0"} Is Not Portable
-@cindex portability, data files as single record
+@cindex portability @subentry data files as single record
There are times when you might want to treat an entire @value{DF} as a
single record. The only way to make this happen is to give @code{RS}
a value that you know doesn't occur in the input file. This is hard
@@ -6676,7 +6700,7 @@ value to use for @code{RS} in this case:
BEGIN @{ RS = "\0" @} # whole file becomes one record?
@end example
-@cindex differences in @command{awk} and @command{gawk}, strings, storing
+@cindex differences in @command{awk} and @command{gawk} @subentry strings
@subentry storing
@command{gawk} in fact accepts this, and uses the @sc{nul}
character for the record separator.
This works for certain special files, such as @file{/proc/environ} on
@@ -6684,7 +6708,7 @@ GNU/Linux systems, where the @sc{nul} character is in
fact the record separator.
However, this usage is @emph{not} portable
to most other @command{awk} implementations.
-@cindex dark corner, strings, storing
+@cindex dark corner @subentry strings, storing
Almost all other @command{awk} implementations@footnote{At least that we know
about.} store strings internally as C-style strings. C strings use the
@sc{nul} character as the string terminator. In effect, this means that
@@ -6696,7 +6720,7 @@ character as a record separator. However, this is a
special case:
@command{mawk} does not allow embedded @sc{nul} characters in strings.
(This may change in a future version of @command{mawk}.)
-@cindex records, treating files as
+@cindex records @subentry treating files as
@cindex treating files, as single records
@cindex single records, treating files as
@xref{Readfile Function} for an interesting way to read
@@ -6710,7 +6734,7 @@ Readfile} for another option.
@cindex examining fields
@cindex fields
@cindex accessing fields
-@cindex fields, examining
+@cindex fields @subentry examining
When @command{awk} reads an input record, the record is
automatically @dfn{parsed} or separated by the @command{awk} utility into
chunks
called @dfn{fields}. By default, fields are separated by @dfn{whitespace},
@@ -6727,9 +6751,9 @@ operate on the whole record if you want---but fields are
what make
simple @command{awk} programs so powerful.
@cindex field operator @code{$}
-@cindex @code{$} (dollar sign), @code{$} field operator
-@cindex dollar sign (@code{$}), @code{$} field operator
-@cindex field operators@comma{} dollar sign as
+@cindex @code{$} (dollar sign) @subentry @code{$} field operator
+@cindex dollar sign (@code{$}) @subentry @code{$} field operator
+@cindex field operators, dollar sign as
You use a dollar sign (@samp{$})
to refer to a field in an @command{awk} program,
followed by the number of the field you want. Thus, @code{$1}
@@ -6750,7 +6774,7 @@ Here the first field, or @code{$1}, is @samp{This}, the
second field, or
field.
@cindex @code{NF} variable
-@cindex fields, number of
+@cindex fields @subentry number of
@code{NF} is a predefined variable whose value is the number of fields
in the current record. @command{awk} automatically updates the value
of @code{NF} each time it reads a record. No matter how many fields
@@ -6789,7 +6813,7 @@ $ @kbd{awk '/li/ @{ print $1, $NF @}' mail-list}
@node Nonconstant Fields
@section Nonconstant Field Numbers
-@cindex fields, numbers
+@cindex fields @subentry numbers
@cindex field numbers
A field number need not be a constant. Any expression in
@@ -6846,7 +6870,7 @@ evaluating @code{NF} and using its value as a field
number.
@node Changing Fields
@section Changing the Contents of a Field
-@cindex fields, changing contents of
+@cindex fields @subentry changing contents of
The contents of a field, as seen by @command{awk}, can be changed within an
@command{awk} program; this changes what @command{awk} perceives as the
current input record. (The actual input is untouched; @command{awk}
@emph{never}
@@ -6906,8 +6930,8 @@ $ @kbd{awk '@{ $6 = ($5 + $4 + $3 + $2)}
@dots{}
@end example
-@cindex adding, fields
-@cindex fields, adding
+@cindex adding @subentry fields
+@cindex fields @subentry adding
@noindent
We've just created @code{$6}, whose value is the sum of fields
@code{$2}, @code{$3}, @code{$4}, and @code{$5}. The @samp{+} sign
@@ -6921,8 +6945,8 @@ the appropriate number of field separators between it and
the previously
existing fields.
@cindex @code{OFS} variable
-@cindex output field separator, See @code{OFS} variable
-@cindex field separators, See Also @code{OFS}
+@cindex output field separator @seeentry{@code{OFS} variable}
+@cindex field separator @seealso{@code{OFS}}
This recomputation affects and is affected by
@code{NF} (the number of fields; @pxref{Fields}).
For example, the value of @code{NF} is set to the number of the highest
@@ -6979,8 +7003,8 @@ The intervening field, @code{$5}, is created with an
empty value
(indicated by the second pair of adjacent colons),
and @code{NF} is updated with the value six.
-@cindex dark corner, @code{NF} variable, decrementing
-@cindex @code{NF} variable, decrementing
+@cindex dark corner @subentry @code{NF} variable, decrementing
+@cindex @code{NF} variable @subentry decrementing
Decrementing @code{NF} throws away the values of the fields
after the new value of @code{NF} and recomputes @code{$0}.
@value{DARKCORNER}
@@ -6993,7 +7017,7 @@ $ @kbd{echo a b c d e f | awk '@{ print "NF =", NF;}
@print{} a b c
@end example
-@cindex portability, @code{NF} variable@comma{} decrementing
+@cindex portability @subentry @code{NF} variable, decrementing
@quotation CAUTION
Some versions of @command{awk} don't
rebuild @code{$0} when @code{NF} is decremented.
@@ -7055,9 +7079,9 @@ with a statement such as @samp{$1 = $1}, as described
earlier.
@end menu
@cindex @code{FS} variable
-@cindex fields, separating
-@cindex field separators
-@cindex fields, separating
+@cindex fields @subentry separating
+@cindex field separator
+@cindex fields @subentry separating
The @dfn{field separator}, which is either a single character or a regular
expression, controls the way @command{awk} splits an input record into fields.
@command{awk} scans the input record for character sequences that
@@ -7076,13 +7100,13 @@ is split into three fields: @samp{m},
@samp{@bullet{}g}, and
@samp{@bullet{}gai@bullet{}pan}.
Note the leading spaces in the values of the second and third fields.
-@cindex troubleshooting, @command{awk} uses @code{FS} not @code{IFS}
+@cindex troubleshooting @subentry @command{awk} uses @code{FS} not @code{IFS}
The field separator is represented by the predefined variable @code{FS}.
Shell programmers take note: @command{awk} does @emph{not} use the
name @code{IFS} that is used by the POSIX-compliant shells (such as
the Unix Bourne shell, @command{sh}, or Bash).
-@cindex @code{FS} variable, changing value of
+@cindex @code{FS} variable @subentry changing value of
The value of @code{FS} can be changed in the @command{awk} program with the
assignment operator, @samp{=} (@pxref{Assignment Ops}).
Often, the right time to do this is at the beginning of execution
@@ -7109,9 +7133,9 @@ John Q. Smith, 29 Oak St., Walamazoo, MI 42139
this @command{awk} program extracts and prints the string
@samp{@bullet{}29@bullet{}Oak@bullet{}St.}.
-@cindex field separators, choice of
-@cindex regular expressions, as field separators
-@cindex field separators, regular expressions as
+@cindex field separator @subentry choice of
+@cindex regular expressions @subentry as field separators
+@cindex field separator @subentry regular expression as
Sometimes the input data contains separator characters that don't
separate fields the way you thought they would. For instance, the
person's name in the example we just used might have a title or
@@ -7134,8 +7158,10 @@ can massage it first with a separate @command{awk}
program.)
@node Default Field Splitting
@subsection Whitespace Normally Separates Fields
-@cindex field separators, whitespace as
-@cindex whitespace, as field separators
+@cindex field separator @subentry whitespace as
+@cindex whitespace @subentry as field separators
+@cindex field separator @subentry @code{FS} variable and
+@cindex separators @subentry field @subentry @code{FS} variable and
Fields are normally separated by whitespace sequences
(spaces, TABs, and newlines), not by single spaces. Two spaces in a row do not
delimit an empty field. The default value of the field separator @code{FS}
@@ -7156,8 +7182,8 @@ rules.
@node Regexp Field Splitting
@subsection Using Regular Expressions to Separate Fields
-@cindex regular expressions, as field separators
-@cindex field separators, regular expressions as
+@cindex regular expressions @subentry as field separators
+@cindex field separator @subentry regular expression as
The previous @value{SUBSECTION}
discussed the use of single characters or simple strings as the
value of @code{FS}.
@@ -7212,8 +7238,7 @@ $ @kbd{echo ' a b c d ' | awk 'BEGIN @{ FS = "[
\t\n]+" @}}
@noindent
@cindex null strings
-@cindex strings, null
-@cindex empty strings, See null strings
+@cindex strings @subentry null
In this case, the first field is null, or empty.
The stripping of leading and trailing whitespace also comes into
@@ -7234,9 +7259,9 @@ Because the leading whitespace was ignored when finding
@code{$1},
it is not part of the new @code{$0}. Finally, the last @code{print}
statement prints the new @code{$0}.
-@cindex @code{FS}, containing @code{^}
-@cindex @code{^} (caret), in @code{FS}
-@cindex dark corner, @code{^}, in @code{FS}
+@cindex @code{FS} variable @subentry containing @code{^}
+@cindex @code{^} (caret) @subentry in @code{FS}
+@cindex dark corner @subentry @code{^}, in @code{FS}
There is an additional subtlety to be aware of when using regular expressions
for field splitting.
It is not well specified in the POSIX standard, or anywhere else, what @samp{^}
@@ -7264,11 +7289,11 @@ $ @kbd{echo 'xxAA xxBxx C' |}
@node Single Character Fields
@subsection Making Each Character a Separate Field
-@cindex common extensions, single character fields
-@cindex extensions, common@comma{} single character fields
-@cindex differences in @command{awk} and @command{gawk}, single-character
fields
+@cindex common extensions @subentry single character fields
+@cindex extensions @subentry common @subentry single character fields
+@cindex differences in @command{awk} and @command{gawk} @subentry
single-character fields
@cindex single-character fields
-@cindex fields, single-character
+@cindex fields @subentry single-character
There are times when you may want to examine each character
of a record separately. This can be done in @command{gawk} by
simply assigning the null string (@code{""}) to @code{FS}. @value{COMMONEXT}
@@ -7287,8 +7312,8 @@ $ @kbd{echo a b | gawk 'BEGIN @{ FS = "" @}}
@print{} Field 3 is b
@end example
-@cindex dark corner, @code{FS} as null string
-@cindex @code{FS} variable, as null string
+@cindex dark corner @subentry @code{FS} as null string
+@cindex @code{FS} variable @subentry null string as
Traditionally, the behavior of @code{FS} equal to @code{""} was not defined.
In this case, most versions of Unix @command{awk} simply treat the entire
record
as only having one field.
@@ -7300,10 +7325,10 @@ behaves this way.
@node Command Line Field Separator
@subsection Setting @code{FS} from the Command Line
-@cindex @option{-F} option, command-line
-@cindex field separator, on command line
-@cindex command line, @code{FS} on@comma{} setting
-@cindex @code{FS} variable, setting from command line
+@cindex @option{-F} option @subentry command-line
+@cindex field separator @subentry on command line
+@cindex command line @subentry @code{FS} on, setting
+@cindex @code{FS} variable @subentry setting from command line
@code{FS} can be set on the command line. Use the @option{-F} option to
do so. For example:
@@ -7329,9 +7354,9 @@ awk -F\\\\ '@dots{}' files @dots{}
@end example
@noindent
-@cindex field separator, backslash (@code{\}) as
-@cindex @code{\} (backslash), as field separator
-@cindex backslash (@code{\}), as field separator
+@cindex field separator @subentry backslash (@code{\}) as
+@cindex @code{\} (backslash) @subentry as field separator
+@cindex backslash (@code{\}) @subentry as field separator
Because @samp{\} is used for quoting in the shell, @command{awk} sees
@samp{-F\\}. Then @command{awk} processes the @samp{\\} for escape
characters (@pxref{Escape Sequences}), finally yielding
@@ -7381,7 +7406,7 @@ separator, instead of the @samp{-} in the phone number
that was
originally intended. This demonstrates why you have to be careful in
choosing your field and record separators.
-@cindex Unix @command{awk}, password files@comma{} field separators and
+@cindex Unix @command{awk} @subentry password files, field separators and
Perhaps the most common use of a single character as the field separator
occurs when processing the Unix system password file. On many Unix
systems, each user has a separate entry in the system password file, with one
@@ -7391,7 +7416,7 @@ encrypted or shadow password. (A shadow password is
indicated by the
presence of a single @samp{x} in the second field.) A password file
entry might look like this:
-@cindex Robbins, Arnold
+@cindex Robbins @subentry Arnold
@example
arnold:x:2076:10:Arnold Robbins:/home/arnold:/bin/bash
@end example
@@ -7420,15 +7445,15 @@ When you do this, @code{$1} is the same as @code{$0}.
@sidebar Changing @code{FS} Does Not Affect the Fields
-@cindex POSIX @command{awk}, field separators and
-@cindex field separator, POSIX and
+@cindex POSIX @command{awk} @subentry field separators and
+@cindex field separator @subentry POSIX and
According to the POSIX standard, @command{awk} is supposed to behave
as if each record is split into fields at the time it is read.
In particular, this means that if you change the value of @code{FS}
after a record is read, the values of the fields (i.e., how they were split)
should reflect the old value of @code{FS}, not the new one.
-@cindex dark corner, field separators
+@cindex dark corner @subentry field separators
@cindex @command{sed} utility
@cindex stream editors
However, many older implementations of @command{awk} do not work this way.
Instead,
@@ -7528,7 +7553,7 @@ will take effect.
@cindex data, fixed-width
@cindex fixed-width data
-@cindex advanced features, fixed-width data
+@cindex advanced features @subentry fixed-width data
@c O'Reilly doesn't like it as a note the first thing in the section.
This @value{SECTION} discusses an advanced
@@ -7561,10 +7586,10 @@ on @code{FS} does not work well in this case. Although
a portable
@code{$0} (@pxref{String Functions}), this is awkward and inefficient
for a large number of fields.
-@cindex troubleshooting, fatal errors, field widths@comma{} specifying
+@cindex troubleshooting @subentry fatal errors @subentry field widths,
specifying
@cindex @command{w} utility
@cindex @code{FIELDWIDTHS} variable
-@cindex @command{gawk}, @code{FIELDWIDTHS} variable in
+@cindex @command{gawk} @subentry @code{FIELDWIDTHS} variable in
The splitting of an input record into fixed-width fields is specified by
assigning a string containing space-separated numbers to the built-in
variable @code{FIELDWIDTHS}. Each number specifies the width of the
@@ -7734,7 +7759,7 @@ This @value{SECTION} discusses an advanced
feature of @command{gawk}. If you are a novice @command{awk} user,
you might want to skip it on the first reading.
-@cindex advanced features, specifying field content
+@cindex advanced features @subentry specifying field content
Normally, when using @code{FS}, @command{gawk} defines the fields as the
parts of the record that occur in between each field separator. In other
words, @code{FS} defines what a field @emph{is not}, instead of what a field
@@ -7760,7 +7785,7 @@ Robbins,Arnold,"1234 A Pretty Street,
NE",MyTown,MyState,12345-6789,USA
@c endfile
@end example
-@cindex @command{gawk}, @code{FPAT} variable in
+@cindex @command{gawk} @subentry @code{FPAT} variable in
@cindex @code{FPAT} variable
The @code{FPAT} variable offers a solution for cases like this.
The value of @code{FPAT} should be a string that provides a regular expression.
@@ -7858,7 +7883,7 @@ available for splitting regular strings (@pxref{String
Functions}).
@node Testing field creation
@section Checking How @command{gawk} Is Splitting Records
-@cindex @command{gawk}, splitting fields and
+@cindex @command{gawk} @subentry splitting fields and
As we've seen, @command{gawk} provides three independent methods to split
input records into fields. The mechanism used is based on which of the
three variables---@code{FS}, @code{FIELDWIDTHS}, or @code{FPAT}---was
@@ -7897,15 +7922,15 @@ example of such a function).
@section Multiple-Line Records
@cindex multiple-line records
-@cindex records, multiline
-@cindex input, multiline records
-@cindex files, reading, multiline records
-@cindex input, files, See input files
+@cindex records @subentry multiline
+@cindex input @subentry multiline records
+@cindex files @subentry reading @subentry multiline records
+@cindex input, files @seeentry{input files}
In some databases, a single line cannot conveniently hold all the
information in one entry. In such cases, you can use multiline
records. The first step in doing this is to choose your data format.
-@cindex record separators, with multiline records
+@cindex record separators @subentry with multiline records
One technique is to use an unusual character or string to separate
records. For example, you could use the formfeed character (written
@samp{\f} in @command{awk}, as in C) to separate them, making each record
@@ -7914,7 +7939,7 @@ a page of the file. To do this, just set the variable
@code{RS} to
other character could equally well be used, as long as it won't be part
of the data in a record.
-@cindex @code{RS} variable, multiline records and
+@cindex @code{RS} variable @subentry multiline records and
Another technique is to have blank lines separate records. By a special
dispensation, an empty string as the value of @code{RS} indicates that
records are separated by one or more blank lines. When @code{RS} is set
@@ -7926,7 +7951,7 @@ all act as one record separator.
whitespace do not count.)
@cindex leftmost longest match
-@cindex matching, leftmost longest
+@cindex matching @subentry leftmost longest
You can achieve the same effect as @samp{RS = ""} by assigning the
string @code{"\n\n+"} to @code{RS}. This regexp matches the newline
at the end of the record and one or more blank lines after the record.
@@ -7937,7 +7962,7 @@ So, the next record doesn't start until
the first nonblank line that follows---no matter how many blank lines
appear in a row, they are considered one record separator.
-@cindex dark corner, multiline records
+@cindex dark corner @subentry multiline records
However, there is an important difference between @samp{RS = ""} and
@samp{RS = "\n\n+"}. In the first case, leading newlines in the input
@value{DF} are ignored, and if a file ends without extra blank lines
@@ -7945,8 +7970,8 @@ after the last record, the final newline is removed from
the record.
In the second case, this special processing is not done.
@value{DARKCORNER}
-@cindex field separator, in multiline records
-@cindex @code{FS}, in multiline records
+@cindex field separator @subentry in multiline records
+@cindex @code{FS} variable @subentry in multiline records
Now that the input is separated into records, the second step is to
separate the fields in the records. One way to do this is to divide each
of the lines into fields in the normal manner. This happens by default
@@ -8069,9 +8094,9 @@ Leading and trailing matches of @var{regexp} delimit
empty records.
POSIX standard.)
@end table
-@cindex @command{gawk}, @code{RT} variable in
+@cindex @command{gawk} @subentry @code{RT} variable in
@cindex @code{RT} variable
-@cindex differences in @command{awk} and @command{gawk}, @code{RS}/@code{RT}
variables
+@cindex differences in @command{awk} and @command{gawk} @subentry
@code{RS}/@code{RT} variables
If not in compatibility mode (@pxref{Options}), @command{gawk} sets
@code{RT} to the input text that matched the value specified by @code{RS}.
But if the input file ended without any text that matches @code{RS},
@@ -8080,8 +8105,8 @@ then @command{gawk} sets @code{RT} to the null string.
@node Getline
@section Explicit Input with @code{getline}
-@cindex @code{getline} command, explicit input with
-@cindex input, explicit
+@cindex @code{getline} command @subentry explicit input with
+@cindex input @subentry explicit
So far we have been getting our input data from @command{awk}'s main
input stream---either the standard input (usually your keyboard, sometimes
the output from another program) or the
@@ -8108,11 +8133,11 @@ Parts I and II
@end ifnotinfo
and have a good knowledge of how @command{awk} works.
-@cindex @command{gawk}, @code{ERRNO} variable in
-@cindex @code{ERRNO} variable, with @command{getline} command
-@cindex differences in @command{awk} and @command{gawk}, @code{getline} command
-@cindex @code{getline} command, return values
-@cindex @option{--sandbox} option, input redirection with @code{getline}
+@cindex @command{gawk} @subentry @code{ERRNO} variable in
+@cindex @code{ERRNO} variable @subentry with @command{getline} command
+@cindex differences in @command{awk} and @command{gawk} @subentry
@code{getline} command
+@cindex @code{getline} command @subentry return values
+@cindex @option{--sandbox} option @subentry input redirection with
@code{getline}
The @code{getline} command returns 1 if it finds a record and 0 if
it encounters the end of the file. If there is some error in getting
@@ -8235,8 +8260,8 @@ rule in the program. @xref{Next Statement}.
@node Getline/Variable
@subsection Using @code{getline} into a Variable
-@cindex @code{getline} into a variable
-@cindex variables, @code{getline} command into@comma{} using
+@cindex @code{getline} command @subentry into a variable
+@cindex variables @subentry @code{getline} command into, using
You can use @samp{getline @var{var}} to read the next record from
@command{awk}'s input into the variable @var{var}. No other processing is
@@ -8289,12 +8314,12 @@ the value of @code{NF} do not change.
@node Getline/File
@subsection Using @code{getline} from a File
-@cindex @code{getline} from a file
+@cindex @code{getline} command @subentry from a file
@cindex input redirection
-@cindex redirection of input
-@cindex @code{<} (left angle bracket), @code{<} operator (I/O)
-@cindex left angle bracket (@code{<}), @code{<} operator (I/O)
-@cindex operators, input/output
+@cindex redirection @subentry of input
+@cindex @code{<} (left angle bracket) @subentry @code{<} operator (I/O)
+@cindex left angle bracket (@code{<}) @subentry @code{<} operator (I/O)
+@cindex operators @subentry input/output
Use @samp{getline < @var{file}} to read the next record from @var{file}.
Here, @var{file} is a string-valued expression that
specifies the @value{FN}. @samp{< @var{file}} is called a @dfn{redirection}
@@ -8320,7 +8345,7 @@ the normal manner, so the values of @code{$0} and the
other fields are
changed, resulting in a new value of @code{NF}.
@code{RT} is also set.
-@cindex POSIX @command{awk}, @code{<} operator and
+@cindex POSIX @command{awk} @subentry @code{<} operator and
@c Thanks to Paul Eggert for initial wording here
According to POSIX, @samp{getline < @var{expression}} is ambiguous if
@var{expression} contains unparenthesized operators other than
@@ -8331,7 +8356,7 @@ you want your program to be portable to all @command{awk}
implementations.
@node Getline/Variable/File
@subsection Using @code{getline} into a Variable from a File
-@cindex variables, @code{getline} command into@comma{} using
+@cindex variables @subentry @code{getline} command into, using
Use @samp{getline @var{var} < @var{file}} to read input
from the file
@@ -8385,11 +8410,11 @@ Failing that, attention to details would be useful.}
@author Brian Kernighan
@end quotation
-@cindex @code{|} (vertical bar), @code{|} operator (I/O)
-@cindex vertical bar (@code{|}), @code{|} operator (I/O)
+@cindex @code{|} (vertical bar) @subentry @code{|} operator (I/O)
+@cindex vertical bar (@code{|}) @subentry @code{|} operator (I/O)
@cindex input pipeline
-@cindex pipe, input
-@cindex operators, input/output
+@cindex pipe @subentry input
+@cindex operators @subentry input/output
The output of a command can also be piped into @code{getline}, using
@samp{@var{command} | getline}. In
this case, the string @var{command} is run as a shell command and its output
@@ -8436,9 +8461,9 @@ bletch
@noindent
the program might produce:
-@cindex Robbins, Bill
-@cindex Robbins, Miriam
-@cindex Robbins, Arnold
+@cindex Robbins @subentry Bill
+@cindex Robbins @subentry Miriam
+@cindex Robbins @subentry Arnold
@example
foo
bar
@@ -8459,7 +8484,7 @@ value of @code{NF}, and recomputes the value of
@code{$0}. The values of
@code{NR} and @code{FNR} are not changed.
@code{RT} is set.
-@cindex POSIX @command{awk}, @code{|} I/O operator and
+@cindex POSIX @command{awk} @subentry @code{|} I/O operator and
@c Thanks to Paul Eggert for initial wording here
According to POSIX, @samp{@var{expression} | getline} is ambiguous if
@var{expression} contains unparenthesized operators other than
@@ -8485,7 +8510,7 @@ have to worry.
@node Getline/Variable/Pipe
@subsection Using @code{getline} into a Variable from a Pipe
-@cindex variables, @code{getline} command into@comma{} using
+@cindex variables @subentry @code{getline} command into, using
When you use @samp{@var{command} | getline @var{var}}, the
output of @var{command} is sent through a pipe to
@@ -8517,12 +8542,12 @@ program to be portable to other @command{awk}
implementations.
@node Getline/Coprocess
@subsection Using @code{getline} from a Coprocess
-@cindex coprocesses, @code{getline} from
-@cindex @code{getline} command, coprocesses@comma{} using from
-@cindex @code{|} (vertical bar), @code{|&} operator (I/O)
-@cindex vertical bar (@code{|}), @code{|&} operator (I/O)
-@cindex operators, input/output
-@cindex differences in @command{awk} and @command{gawk}, input/output operators
+@cindex coprocesses @subentry @code{getline} from
+@cindex @code{getline} command @subentry coprocesses, using from
+@cindex @code{|} (vertical bar) @subentry @code{|&} operator (I/O)
+@cindex vertical bar (@code{|}) @subentry @code{|&} operator (I/O)
+@cindex operators @subentry input/output
+@cindex differences in @command{awk} and @command{gawk} @subentry input/output
operators
Reading input into @code{getline} from a pipe is a one-way operation.
The command that is started with @samp{@var{command} | getline} only
@@ -8558,7 +8583,7 @@ where coprocesses are discussed in more detail.
@node Getline/Variable/Coprocess
@subsection Using @code{getline} into a Variable from a Coprocess
-@cindex variables, @code{getline} command into@comma{} using
+@cindex variables @subentry @code{getline} command into, using
When you use @samp{@var{command} |& getline @var{var}}, the output from
the coprocess @var{command} is sent through a two-way pipe to @code{getline}
@@ -8588,21 +8613,21 @@ When @code{getline} changes the value of @code{$0} and
@code{NF},
program and start testing the new record against every pattern.
However, the new record is tested against any subsequent rules.
-@cindex differences in @command{awk} and @command{gawk}, implementation
limitations
-@cindex implementation issues, @command{gawk}, limits
-@cindex @command{awk}, implementations, limits
-@cindex @command{gawk}, implementation issues, limits
+@cindex differences in @command{awk} and @command{gawk} @subentry
implementation limitations
+@cindex implementation issues, @command{gawk} @subentry limits
+@cindex @command{awk} @subentry implementations @subentry limits
+@cindex @command{gawk} @subentry implementation issues @subentry limits
@item
Some very old @command{awk} implementations limit the number of pipelines that
an @command{awk}
program may have open to just one. In @command{gawk}, there is no such limit.
You can open as many pipelines (and coprocesses) as the underlying operating
system permits.
-@cindex side effects, @code{FILENAME} variable
-@cindex @code{FILENAME} variable, @code{getline}@comma{} setting with
-@cindex dark corner, @code{FILENAME} variable
-@cindex @code{getline} command, @code{FILENAME} variable and
-@cindex @code{BEGIN} pattern, @code{getline} and
+@cindex side effects @subentry @code{FILENAME} variable
+@cindex @code{FILENAME} variable @subentry @code{getline}, setting with
+@cindex dark corner @subentry @code{FILENAME} variable
+@cindex @code{getline} command @subentry @code{FILENAME} variable and
+@cindex @code{BEGIN} pattern @subentry @code{getline} and
@item
An interesting side effect occurs if you use @code{getline} without a
redirection inside a @code{BEGIN} rule. Because an unredirected @code{getline}
@@ -8669,7 +8694,7 @@ know that there is a string value to be assigned.
@node Getline Summary
@subsection Summary of @code{getline} Variants
-@cindex @code{getline} command, variants
+@cindex @code{getline} command @subentry variants
@ref{table-getline-variants}
summarizes the eight variants of @code{getline},
@@ -8696,7 +8721,7 @@ Note: for each variant, @command{gawk} sets the @code{RT}
predefined variable.
@section Reading Input with a Timeout
@cindex timeout, reading input
-@cindex differences in @command{awk} and @command{gawk}, read timeouts
+@cindex differences in @command{awk} and @command{gawk} @subentry read timeouts
This @value{SECTION} describes a feature that is specific to @command{gawk}.
You may specify a timeout in milliseconds for reading input from the keyboard,
@@ -8780,6 +8805,8 @@ worth of data the first time. Because of this, changing
the value
of timeout like in the preceding example is not very useful.
@end quotation
+@cindex @env{GAWK_READ_TIMEOUT} environment variable
+@cindex environment variables @subentry @env{GAWK_READ_TIMEOUT}
If the @code{PROCINFO} element is not present and the
@env{GAWK_READ_TIMEOUT} environment variable exists,
@command{gawk} uses its value to initialize the timeout value.
@@ -8806,7 +8833,7 @@ indefinitely until some other process opens it for
writing.
@section Retrying Reads After Certain Input Errors
@cindex retrying input
-@cindex differences in @command{awk} and @command{gawk}, retrying input
+@cindex differences in @command{awk} and @command{gawk} @subentry retrying
input
This @value{SECTION} describes a feature that is specific to @command{gawk}.
When @command{gawk} encounters an error while reading input, by
@@ -8834,9 +8861,9 @@ descriptor has been configured to behave in a
non-blocking fashion.
@node Command-line directories
@section Directories on the Command Line
-@cindex differences in @command{awk} and @command{gawk}, command-line
directories
-@cindex directories, command-line
-@cindex command line, directories on
+@cindex differences in @command{awk} and @command{gawk} @subentry command-line
directories
+@cindex directories @subentry command-line
+@cindex command line @subentry directories on
According to the POSIX standard, files named on the @command{awk}
command line must be text files; it is a fatal error if they are not.
@@ -8927,6 +8954,7 @@ from the default input stream, from a file, or from a
pipe or coprocess.
Use @code{PROCINFO[@var{file}, "READ_TIMEOUT"]} to cause reads to time out
for @var{file}.
+@cindex POSIX mode
@item
Directories on the command line are fatal for standard @command{awk};
@command{gawk} ignores them if not in POSIX mode.
@@ -8952,7 +8980,7 @@ including abstentions, for each item.
@chapter Printing Output
@cindex printing
-@cindex output, printing, See printing
+@cindex output, printing @seeentry{printing}
One of the most common programming actions is to @dfn{print}, or output,
some or all of the input. Use the @code{print} statement
for simple output, and the @code{printf} statement
@@ -9013,8 +9041,8 @@ The items to print can be constant strings or numbers,
fields of the
current record (such as @code{$1}), variables, or any @command{awk}
expression. Numeric values are converted to strings and then printed.
-@cindex records, printing
-@cindex lines, blank, printing
+@cindex records @subentry printing
+@cindex lines @subentry blank, printing
@cindex text, printing
The simple statement @samp{print} with no items is equivalent to
@samp{print $0}: it prints the entire current record. To print a blank
@@ -9037,7 +9065,7 @@ isn't limited to only one line. If an item value is a
string containing a
newline, the newline is output along with the rest of the string. A
single @code{print} statement can make any number of lines this way.
-@cindex newlines, printing
+@cindex newlines @subentry printing
The following is an example of printing a string that contains embedded
@ifinfo
newlines
@@ -9064,7 +9092,7 @@ $ @kbd{awk 'BEGIN @{ print "line one\nline two\nline
three" @}'}
@end group
@end example
-@cindex fields, printing
+@cindex fields @subentry printing
The next example, which is run on the @file{inventory-shipped} file,
prints the first two fields of each input record, with a space between
them:
@@ -9077,8 +9105,8 @@ $ @kbd{awk '@{ print $1, $2 @}' inventory-shipped}
@dots{}
@end example
-@cindex @code{print} statement, commas, omitting
-@cindex troubleshooting, @code{print} statement@comma{} omitting commas
+@cindex @code{print} statement @subentry commas, omitting
+@cindex troubleshooting @subentry @code{print} statement, omitting commas
A common mistake in using the @code{print} statement is to omit the comma
between two items. This often has the effect of making the items run
together in the output, with no space. The reason for this is that
@@ -9093,7 +9121,7 @@ $ @kbd{awk '@{ print $1 $2 @}' inventory-shipped}
@dots{}
@end example
-@cindex @code{BEGIN} pattern, headings@comma{} adding
+@cindex @code{BEGIN} pattern @subentry headings, adding
To someone unfamiliar with the @file{inventory-shipped} file, neither
example's output makes much sense. A heading line at the beginning
would make it clearer. Let's add some headings to our table of months
@@ -9132,8 +9160,8 @@ awk 'BEGIN @{ print "Month Crates"
@end group
@end example
-@cindex @code{printf} statement, columns@comma{} aligning
-@cindex columns, aligning
+@cindex @code{printf} statement @subentry columns, aligning
+@cindex columns @subentry aligning
Lining up columns this way can get pretty
complicated when there are many columns to fix. Counting spaces for two
or three columns is simple, but any more than this can take up
@@ -9141,8 +9169,8 @@ a lot of time. This is why the @code{printf} statement was
created (@pxref{Printf});
one of its specialties is lining up columns of data.
-@cindex line continuations, in @code{print} statement
-@cindex @code{print} statement, line continuations and
+@cindex line continuations @subentry in @code{print} statement
+@cindex @code{print} statement @subentry line continuations and
@quotation NOTE
You can continue either a @code{print} or
@code{printf} statement simply by putting a newline after any comma
@@ -9168,10 +9196,10 @@ then outputs a string called the @dfn{output record
separator} (or
(i.e., a newline character). Thus, each @code{print} statement normally
makes a separate line.
-@cindex output, records
-@cindex output record separator, See @code{ORS} variable
+@cindex output @subentry records
+@cindex output record separator @seeentry{@code{ORS} variable}
@cindex @code{ORS} variable
-@cindex @code{BEGIN} pattern, @code{OFS}/@code{ORS} variables, assigning
values to
+@cindex @code{BEGIN} pattern @subentry @code{OFS}/@code{ORS} variables,
assigning values to
In order to change how output fields and records are separated, assign
new values to the variables @code{OFS} and @code{ORS}. The usual
place to do this is in the @code{BEGIN} rule
@@ -9217,8 +9245,8 @@ runs together on a single line.
@node OFMT
@section Controlling Numeric Output with @code{print}
-@cindex numeric, output format
-@cindex formats@comma{} numeric output
+@cindex numeric @subentry output format
+@cindex formats, numeric output
When printing numeric values with the @code{print} statement,
@command{awk} internally converts each number to a string of characters
and prints that string. @command{awk} uses the @code{sprintf()} function
@@ -9233,7 +9261,7 @@ more fully in
@cindexawkfunc{sprintf}
@cindex @code{OFMT} variable
-@cindex output, format specifier@comma{} @code{OFMT}
+@cindex output @subentry format specifier, @code{OFMT}
The predefined variable @code{OFMT} contains the format specification
that @code{print} uses with @code{sprintf()} when it wants to convert a
number to a string for printing.
@@ -9250,9 +9278,9 @@ $ @kbd{awk 'BEGIN @{}
@end example
@noindent
-@cindex dark corner, @code{OFMT} variable
-@cindex POSIX @command{awk}, @code{OFMT} variable and
-@cindex @code{OFMT} variable, POSIX @command{awk} and
+@cindex dark corner @subentry @code{OFMT} variable
+@cindex POSIX @command{awk} @subentry @code{OFMT} variable and
+@cindex @code{OFMT} variable @subentry POSIX @command{awk} and
According to the POSIX standard, @command{awk}'s behavior is undefined
if @code{OFMT} contains anything but a floating-point conversion specification.
@value{DARKCORNER}
@@ -9261,8 +9289,8 @@ if @code{OFMT} contains anything but a floating-point
conversion specification.
@section Using @code{printf} Statements for Fancier Printing
@cindex @code{printf} statement
-@cindex output, formatted
-@cindex formatting output
+@cindex output @subentry formatted
+@cindex formatting @subentry output
For more precise control over the output format than what is
provided by @code{print}, use @code{printf}.
With @code{printf} you can
@@ -9281,7 +9309,7 @@ after the decimal point).
@node Basic Printf
@subsection Introduction to the @code{printf} Statement
-@cindex @code{printf} statement, syntax of
+@cindex @code{printf} statement @subentry syntax of
A simple @code{printf} statement looks like this:
@example
@@ -9329,8 +9357,8 @@ the output message.
@node Control Letters
@subsection Format-Control Letters
-@cindex @code{printf} statement, format-control characters
-@cindex format specifiers, @code{printf} statement
+@cindex @code{printf} statement @subentry format-control characters
+@cindex format specifiers @subentry @code{printf} statement
A format specifier starts with the character @samp{%} and ends with
a @dfn{format-control letter}---it tells the @code{printf} statement
@@ -9365,8 +9393,8 @@ Print a number as a character; thus, @samp{printf "%c",
65} outputs the letter @samp{A}. The output for a string value is
the first character of the string.
-@cindex dark corner, format-control characters
-@cindex @command{gawk}, format-control characters
+@cindex dark corner @subentry format-control characters
+@cindex @command{gawk} @subentry format-control characters
@quotation NOTE
The POSIX standard says the first character of a string is printed.
In locales with multibyte characters, @command{gawk} attempts to
@@ -9464,8 +9492,8 @@ This does not consume an
argument and it ignores any modifiers.
@end table
-@cindex dark corner, format-control characters
-@cindex @command{gawk}, format-control characters
+@cindex dark corner @subentry format-control characters
+@cindex @command{gawk} @subentry format-control characters
@quotation NOTE
When using the integer format-control letters for values that are
outside the range of the widest C integer type, @command{gawk} switches to
@@ -9490,8 +9518,8 @@ the IEEE standard. Further details are provided in
@node Format Modifiers
@subsection Modifiers for @code{printf} Formats
-@cindex @code{printf} statement, modifiers
-@cindex modifiers@comma{} in format specifiers
+@cindex @code{printf} statement @subentry modifiers
+@cindex modifiers, in format specifiers
A format specification can also include @dfn{modifiers} that can control
how much of the item's value is printed, as well as how much space it gets.
The modifiers come between the @samp{%} and the format-control letter.
@@ -9501,8 +9529,8 @@ spaces in the output. Here are the possible modifiers, in
the order in
which they may appear:
@table @asis
-@cindex differences in @command{awk} and @command{gawk},
@code{print}/@code{printf} statements
-@cindex @code{printf} statement, positional specifiers
+@cindex differences in @command{awk} and @command{gawk} @subentry
@code{print}/@code{printf} statements
+@cindex @code{printf} statement @subentry positional specifiers
@c the code{} does NOT start a secondary
@cindex positional specifiers, @code{printf} statement
@item @code{@var{N}$}
@@ -9687,8 +9715,8 @@ printf "%" w "." p "s\n", s
This is not particularly easy to read, but it does work.
@c @cindex lint checks
-@cindex troubleshooting, fatal errors, @code{printf} format strings
-@cindex POSIX @command{awk}, @code{printf} format strings and
+@cindex troubleshooting @subentry fatal errors @subentry @code{printf} format
strings
+@cindex POSIX @command{awk} @subentry @code{printf} format strings and
C programmers may be used to supplying additional modifiers (@samp{h},
@samp{j}, @samp{l}, @samp{L}, @samp{t}, and @samp{z}) in @code{printf}
format strings. These are not valid in @command{awk}. Most @command{awk}
@@ -9780,8 +9808,8 @@ awk 'BEGIN @{ format = "%-10s %s\n"
@section Redirecting Output of @code{print} and @code{printf}
@cindex output redirection
-@cindex redirection of output
-@cindex @option{--sandbox} option, output redirection with @code{print},
@code{printf}
+@cindex redirection @subentry of output
+@cindex @option{--sandbox} option @subentry output redirection with
@code{print} @subentry @code{printf}
So far, the output from @code{print} and @code{printf} has gone
to the standard
output, usually the screen. Both @code{print} and @code{printf} can
@@ -9798,17 +9826,17 @@ Redirections in @command{awk} are written just like
redirections in shell
commands, except that they are written inside the @command{awk} program.
@c the commas here are part of the see also
-@cindex @code{print} statement, See Also redirection@comma{} of output
-@cindex @code{printf} statement, See Also redirection@comma{} of output
+@cindex @code{print} statement @seealso{redirection of output}
+@cindex @code{printf} statement @seealso{redirection of output}
There are four forms of output redirection: output to a file, output
appended to a file, output through a pipe to another command, and output
to a coprocess. We show them all for the @code{print} statement,
but they work identically for @code{printf}:
@table @code
-@cindex @code{>} (right angle bracket), @code{>} operator (I/O)
-@cindex right angle bracket (@code{>}), @code{>} operator (I/O)
-@cindex operators, input/output
+@cindex @code{>} (right angle bracket) @subentry @code{>} operator (I/O)
+@cindex right angle bracket (@code{>}) @subentry @code{>} operator (I/O)
+@cindex operators @subentry input/output
@item print @var{items} > @var{output-file}
This redirection prints the items into the output file named
@var{output-file}. The @value{FN} @var{output-file} can be any
@@ -9840,8 +9868,8 @@ $ @kbd{cat name-list}
@noindent
Each output file contains one name or number per line.
-@cindex @code{>} (right angle bracket), @code{>>} operator (I/O)
-@cindex right angle bracket (@code{>}), @code{>>} operator (I/O)
+@cindex @code{>} (right angle bracket) @subentry @code{>>} operator (I/O)
+@cindex right angle bracket (@code{>}) @subentry @code{>>} operator (I/O)
@item print @var{items} >> @var{output-file}
This redirection prints the items into the preexisting output file
named @var{output-file}. The difference between this and the
@@ -9850,9 +9878,9 @@ single-@samp{>} redirection is that the old contents (if
any) of
appended to the file.
If @var{output-file} does not exist, then it is created.
-@cindex @code{|} (vertical bar), @code{|} operator (I/O)
-@cindex pipe, output
-@cindex output, pipes
+@cindex @code{|} (vertical bar) @subentry @code{|} operator (I/O)
+@cindex pipe @subentry output
+@cindex output @subentry pipes
@item print @var{items} | @var{command}
It is possible to send output to another program through a pipe
instead of into a file. This redirection opens a pipe to
@@ -9907,9 +9935,9 @@ because (if you mean to refer to that same file or
command)
every time.
@cindex coprocesses
-@cindex @code{|} (vertical bar), @code{|&} operator (I/O)
-@cindex operators, input/output
-@cindex differences in @command{awk} and @command{gawk}, input/output operators
+@cindex @code{|} (vertical bar) @subentry @code{|&} operator (I/O)
+@cindex operators @subentry input/output
+@cindex differences in @command{awk} and @command{gawk} @subentry input/output
operators
@item print @var{items} |& @var{command}
This redirection prints the items to the input of @var{command}.
The difference between this and the
@@ -9939,7 +9967,7 @@ asks the system to open a file, pipe, or coprocess only
if the particular
@var{file} or @var{command} you specify has not already been written
to by your program or if it has been closed since it was last written to.
-@cindex troubleshooting, printing
+@cindex troubleshooting @subentry printing
It is a common error to use @samp{>} redirection for the first @code{print}
to a file, and then to use @samp{>>} for subsequent output:
@@ -9960,10 +9988,10 @@ output is produced in the expected order. However,
mixing the operators
for the same file is definitely poor style, and is confusing to readers
of your program.)
-@cindex differences in @command{awk} and @command{gawk}, implementation
limitations
-@cindex implementation issues, @command{gawk}, limits
-@cindex @command{awk}, implementation issues, pipes
-@cindex @command{gawk}, implementation issues, pipes
+@cindex differences in @command{awk} and @command{gawk} @subentry
implementation limitations
+@cindex implementation issues, @command{gawk} @subentry limits
+@cindex @command{awk} @subentry implementation issues @subentry pipes
+@cindex @command{gawk} @subentry implementation issues @subentry pipes
@ifnotinfo
As mentioned earlier
(@pxref{Getline Notes}),
@@ -9981,7 +10009,7 @@ program may have open to just one! In @command{gawk},
there is no such limit.
open as many pipelines as the underlying operating system permits.
@sidebar Piping into @command{sh}
-@cindex shells, piping commands into
+@cindex shells @subentry piping commands into
A particularly powerful way to use redirection is to build command lines
and pipe them into the shell, @command{sh}. For example, suppose you
@@ -10010,13 +10038,13 @@ command lines to be fed to the shell.
@node Special FD
@section Special Files for Standard Preopened Data Streams
@cindex standard input
-@cindex input, standard
+@cindex input @subentry standard
@cindex standard output
-@cindex output, standard
+@cindex output @subentry standard
@cindex error output
@cindex standard error
@cindex file descriptors
-@cindex files, descriptors, See file descriptors
+@cindex files @subentry descriptors @seeentry{file descriptors}
Running programs conventionally have three input and output streams
already available to them for reading and writing. These are known
@@ -10031,7 +10059,7 @@ is typically used for writing error messages; the
reason there are two separate
streams, standard output and standard error, is so that they can be
redirected separately.
-@cindex differences in @command{awk} and @command{gawk}, error messages
+@cindex differences in @command{awk} and @command{gawk} @subentry error
messages
@cindex error handling
In traditional implementations of @command{awk}, the only way to write an error
message to standard error in an @command{awk} program is as follows:
@@ -10074,15 +10102,15 @@ the descriptor that the @value{FN} stands for. These
special
@value{FN}s work for all operating systems that @command{gawk}
has been ported to, not just those that are POSIX-compliant:
-@cindex common extensions, @code{/dev/stdin} special file
-@cindex common extensions, @code{/dev/stdout} special file
-@cindex common extensions, @code{/dev/stderr} special file
-@cindex extensions, common@comma{} @code{/dev/stdin} special file
-@cindex extensions, common@comma{} @code{/dev/stdout} special file
-@cindex extensions, common@comma{} @code{/dev/stderr} special file
-@cindex file names, standard streams in @command{gawk}
+@cindex common extensions @subentry @code{/dev/stdin} special file
+@cindex common extensions @subentry @code{/dev/stdout} special file
+@cindex common extensions @subentry @code{/dev/stderr} special file
+@cindex extensions @subentry common @subentry @code{/dev/stdin} special file
+@cindex extensions @subentry common @subentry @code{/dev/stdout} special file
+@cindex extensions @subentry common @subentry @code{/dev/stderr} special file
+@cindex file names @subentry standard streams in @command{gawk}
@cindex @code{/dev/@dots{}} special files
-@cindex files, @code{/dev/@dots{}} special files
+@cindex files @subentry @code{/dev/@dots{}} special files
@cindex @code{/dev/fd/@var{N}} special files (@command{gawk})
@table @file
@item /dev/stdin
@@ -10102,7 +10130,7 @@ the proper way to write an error message then becomes:
print "Serious error detected!" > "/dev/stderr"
@end example
-@cindex troubleshooting, quotes with file names
+@cindex troubleshooting @subentry quotes with file names
Note the use of quotes around the @value{FN}.
Like with any other redirection, the value must be a string.
It is a common error to omit the quotes, which leads
@@ -10115,7 +10143,7 @@ invoked with the @option{--traditional} option
(@pxref{Options}).
@node Special Files
@section Special @value{FFN}s in @command{gawk}
-@cindex @command{gawk}, file names in
+@cindex @command{gawk} @subentry file names in
Besides access to standard input, standard output, and standard error,
@command{gawk} provides access to any open file descriptor.
@@ -10154,8 +10182,8 @@ above two, does actually close the given file
descriptor.
@node Special Network
@subsection Special Files for Network Communications
-@cindex networks, support for
-@cindex TCP/IP, support for
+@cindex networks @subentry support for
+@cindex TCP/IP @subentry support for
@command{gawk} programs
can open a two-way
@@ -10184,8 +10212,9 @@ Here are some things to bear in mind when using the
special @value{FN}s that @command{gawk} provides:
@itemize @value{BULLET}
-@cindex compatibility mode (@command{gawk}), file names
-@cindex file names, in compatibility mode
+@cindex compatibility mode (@command{gawk}) @subentry file names
+@cindex file names @subentry in compatibility mode
+@cindex POSIX mode
@item
Recognition of the @value{FN}s for the three standard preopened
files is disabled only in POSIX mode.
@@ -10208,12 +10237,12 @@ Doing so results in unpredictable behavior.
@node Close Files And Pipes
@section Closing Input and Output Redirections
-@cindex files, output, See output files
-@cindex input files, closing
-@cindex output, files@comma{} closing
-@cindex pipe, closing
-@cindex coprocesses, closing
-@cindex @code{getline} command, coprocesses@comma{} using from
+@cindex files @subentry output @seeentry{output files}
+@cindex input files @subentry closing
+@cindex output @subentry files, closing
+@cindex pipe @subentry closing
+@cindex coprocesses @subentry closing
+@cindex @code{getline} command @subentry coprocesses, using from
If the same @value{FN} or the same shell command is used with @code{getline}
more than once during the execution of an @command{awk} program
@@ -10315,9 +10344,9 @@ program closes the pipe after each line of output, then
each line makes
a separate message.
@end itemize
-@cindex differences in @command{awk} and @command{gawk}, @code{close()}
function
-@cindex portability, @code{close()} function and
-@cindex @code{close()} function, portability
+@cindex differences in @command{awk} and @command{gawk} @subentry
@code{close()} function
+@cindex portability @subentry @code{close()} function and
+@cindex @code{close()} function @subentry portability
If you use more files than the system allows you to have open,
@command{gawk} attempts to multiplex the available open files among
your @value{DF}s. @command{gawk}'s ability to do this depends upon the
@@ -10365,7 +10394,7 @@ It is, more likely, a close of a file that was never
opened with a
redirection, so @command{awk} silently does nothing, except return
a negative value.
-@cindex @code{|} (vertical bar), @code{|&} operator (I/O), pipes@comma{}
closing
+@cindex @code{|} (vertical bar) @subentry @code{|&} operator (I/O) @subentry
pipes, closing
When using the @samp{|&} operator to communicate with a coprocess,
it is occasionally useful to be able to close one end of the two-way
pipe without closing the other.
@@ -10381,11 +10410,11 @@ delayed until
which describes it in more detail and gives an example.
@sidebar Using @code{close()}'s Return Value
-@cindex dark corner, @code{close()} function
-@cindex @code{close()} function, return value
-@cindex return value@comma{} @code{close()} function
-@cindex differences in @command{awk} and @command{gawk}, @code{close()}
function
-@cindex Unix @command{awk}, @code{close()} function and
+@cindex dark corner @subentry @code{close()} function
+@cindex @code{close()} function @subentry return value
+@cindex return value, @code{close()} function
+@cindex differences in @command{awk} and @command{gawk} @subentry
@code{close()} function
+@cindex Unix @command{awk} @subentry @code{close()} function and
In many older versions of Unix @command{awk}, the @code{close()} function
is actually a statement.
@@ -10399,8 +10428,8 @@ command | getline info
retval = close(command) # syntax error in many Unix awks
@end example
-@cindex @command{gawk}, @code{ERRNO} variable in
-@cindex @code{ERRNO} variable, with @command{close()} function
+@cindex @command{gawk} @subentry @code{ERRNO} variable in
+@cindex @code{ERRNO} variable @subentry with @command{close()} function
@command{gawk} treats @code{close()} as a function.
The return value is @minus{}1 if the argument names something
that was never opened with a redirection, or if there is
@@ -10429,6 +10458,7 @@ if it fails.
@end multitable
@end float
+@cindex POSIX mode
The POSIX standard is very vague; it says that @code{close()}
returns zero on success and a nonzero value otherwise. In general,
different implementations vary in what they report when closing
@@ -10496,6 +10526,8 @@ For standard output, you may use @code{PROCINFO["-",
"NONFATAL"]}
or @code{PROCINFO["/dev/stdout", "NONFATAL"]}. For standard error, use
@code{PROCINFO["/dev/stderr", "NONFATAL"]}.
+@cindex @env{GAWK_SOCK_RETRIES} environment variable
+@cindex environment variables @subentry @env{GAWK_SOCK_RETRIES}
When attempting to open a TCP/IP socket (@pxref{TCP/IP Networking}),
@command{gawk} tries multiple times. The @env{GAWK_SOCK_RETRIES}
environment variable (@pxref{Other Environment Variables}) allows you to
@@ -10617,7 +10649,7 @@ that provide the values used in expressions.
@node Constants
@subsection Constant Expressions
-@cindex constants, types of
+@cindex constants @subentry types of
The simplest type of expression is the @dfn{constant}, which always has
the same value. There are three types of constants: numeric,
@@ -10636,8 +10668,8 @@ have different forms, but are internally stored in an
identical manner.
@node Scalar Constants
@subsubsection Numeric and String Constants
-@cindex constants, numeric
-@cindex numeric constants
+@cindex constants @subentry numeric
+@cindex numeric @subentry constants
A @dfn{numeric constant} stands for a number. This number can be an
integer, a decimal fraction, or a number in scientific (exponential)
notation.@footnote{The internal representation of all numbers,
@@ -10653,7 +10685,8 @@ have the same value:
1050e-1
@end example
-@cindex string constants
+@cindex string @subentry constants
+@cindex constants @subentry string
A @dfn{string constant} consists of a sequence of characters enclosed in
double quotation marks. For example:
@@ -10662,8 +10695,9 @@ double quotation marks. For example:
@end example
@noindent
-@cindex differences in @command{awk} and @command{gawk}, strings
-@cindex strings, length limitations
+@cindex differences in @command{awk} and @command{gawk} @subentry strings
+@cindex strings @subentry length limitations
+@cindex ASCII
represents the string whose contents are @samp{parrot}. Strings in
@command{gawk} can be of any length, and they can contain any of the possible
eight-bit ASCII characters, including ASCII @sc{nul} (character code zero).
@@ -10702,9 +10736,9 @@ $ @kbd{gawk 'BEGIN @{ print "hello, }
@print{} gawk: cmd. line:1: ^ syntax error
@end example
-@cindex dark corner, string continuation
-@cindex strings, continuation across lines
-@cindex differences in @command{awk} and @command{gawk}, strings
+@cindex dark corner @subentry string continuation
+@cindex strings @subentry continuation across lines
+@cindex differences in @command{awk} and @command{gawk} @subentry strings
Although POSIX doesn't define what happens if you use an escaped
newline, as in the previous C example, all known versions of
@command{awk} allow you to do so. Unfortunately, what each one
@@ -10718,6 +10752,7 @@ $ @kbd{gawk 'BEGIN @{ print "hello, \}
@print{} hello, world
@end example
+@cindex POSIX mode
In POSIX mode (@pxref{Options}), @command{gawk} does not
allow escaped newlines. Otherwise, it behaves as just described.
@@ -10736,8 +10771,8 @@ $ @kbd{nawk 'BEGIN @{ print "hello, \}
@subsubsection Octal and Hexadecimal Numbers
@cindex octal numbers
@cindex hexadecimal numbers
-@cindex numbers, octal
-@cindex numbers, hexadecimal
+@cindex numbers @subentry octal
+@cindex numbers @subentry hexadecimal
In @command{awk}, all numbers are in decimal (i.e., base 10). Many other
programming languages allow you to specify numbers in other bases, often
@@ -10782,8 +10817,8 @@ Being able to use octal and hexadecimal constants in
your programs is most
useful when working with data that cannot be represented conveniently as
characters or as regular numbers, such as binary data of various sorts.
-@cindex @command{gawk}, octal numbers and
-@cindex @command{gawk}, hexadecimal numbers and
+@cindex @command{gawk} @subentry octal numbers and
+@cindex @command{gawk} @subentry hexadecimal numbers and
@command{gawk} allows the use of octal and hexadecimal
constants in your program text. However, such numbers in the input data
are not treated differently; doing so by default would break old
@@ -10810,8 +10845,8 @@ $ @kbd{gawk 'BEGIN @{ print "021 is", 021 ; print 018
@}'}
@print{} 18
@end example
-@cindex compatibility mode (@command{gawk}), octal numbers
-@cindex compatibility mode (@command{gawk}), hexadecimal numbers
+@cindex compatibility mode (@command{gawk}) @subentry octal numbers
+@cindex compatibility mode (@command{gawk}) @subentry hexadecimal numbers
Octal and hexadecimal source code constants are a @command{gawk} extension.
If @command{gawk} is in compatibility mode
(@pxref{Options}),
@@ -10838,8 +10873,8 @@ $ @kbd{gawk 'BEGIN @{ printf "0x11 is <%s>\n", 0x11 @}'}
@cindex regexp constants
@cindex @code{~} (tilde), @code{~} operator
@cindex tilde (@code{~}), @code{~} operator
-@cindex @code{!} (exclamation point), @code{!~} operator
-@cindex exclamation point (@code{!}), @code{!~} operator
+@cindex @code{!} (exclamation point) @subentry @code{!~} operator
+@cindex exclamation point (@code{!}) @subentry @code{!~} operator
A @dfn{regexp constant} is a regular expression description enclosed in
slashes, such as @code{@w{/^beginning and end$/}}. Most regexps used in
@command{awk} programs are constant, but the @samp{~} and @samp{!~}
@@ -10864,7 +10899,7 @@ POSIX @command{awk} and @command{gawk}, and then goes
on to describe
@node Standard Regexp Constants
@subsubsection Standard Regular Expression Constants
-@cindex dark corner, regexp constants
+@cindex dark corner @subentry regexp constants
When used on the righthand side of the @samp{~} or @samp{!~}
operators, a regexp constant merely stands for the regexp that is to be
matched.
@@ -10902,8 +10937,8 @@ if (/foo/ ~ $1) print "found foo"
@c @cindex automatic warnings
@c @cindex warnings, automatic
-@cindex @command{gawk}, regexp constants and
-@cindex regexp constants, in @command{gawk}
+@cindex @command{gawk} @subentry regexp constants and
+@cindex regexp constants @subentry in @command{gawk}
@noindent
This code is ``obviously'' testing @code{$1} for a match against the regexp
@code{/foo/}. But in fact, the expression @samp{/foo/ ~ $1} really means
@@ -10924,8 +10959,8 @@ matches = /foo/
assigns either zero or one to the variable @code{matches}, depending
upon the contents of the current input record.
-@cindex differences in @command{awk} and @command{gawk}, regexp constants
-@cindex dark corner, regexp constants, as arguments to user-defined functions
+@cindex differences in @command{awk} and @command{gawk} @subentry regexp
constants
+@cindex dark corner @subentry regexp constants @subentry as arguments to
user-defined functions
@cindexgawkfunc{gensub}
@cindexawkfunc{sub}
@cindexawkfunc{gsub}
@@ -11000,7 +11035,7 @@ it would be nice to have regexp constants that
are @dfn{strongly typed}; in other words, that denote a regexp useful
for matching, and not an expression.
-@cindex values, regexp
+@cindex values @subentry regexp
@command{gawk} provides this feature. A strongly typed regexp constant
looks almost like a regular regexp constant, except that it is preceded
by an @samp{@@} sign:
@@ -11063,8 +11098,8 @@ value of the original regexp text.
@node Variables
@subsection Variables
-@cindex variables, user-defined
-@cindex user-defined, variables
+@cindex variables @subentry user-defined
+@cindex user-defined @subentry variables
@dfn{Variables} are ways of storing values at one point in your program for
use later in another part of your program. They can be manipulated
entirely within the program text, and they can also be assigned values
@@ -11100,8 +11135,8 @@ change a variable's value, and the @code{match()},
@code{split()},
and @code{patsplit()} functions can change the contents of their
array parameters (@pxref{String Functions}).
-@cindex variables, built-in
-@cindex variables, initializing
+@cindex variables @subentry built-in
+@cindex variables @subentry initializing
A few variables have special built-in meanings, such as @code{FS} (the
field separator) and @code{NF} (the number of fields in the current input
record). @xref{Built-in Variables} for a list of the predefined variables.
@@ -11118,8 +11153,8 @@ which is what you would do in C and in most other
traditional languages.
@node Assignment Options
@subsubsection Assigning Variables on the Command Line
-@cindex variables, assigning on command line
-@cindex command line, variables@comma{} assigning on
+@cindex variables @subentry assigning on command line
+@cindex command line @subentry variables, assigning on
Any @command{awk} variable can be set by including a @dfn{variable assignment}
among the arguments on the command line when @command{awk} is invoked
@@ -11173,7 +11208,7 @@ $ @kbd{awk '@{ print $n @}' n=4 inventory-shipped n=2
mail-list}
@dots{}
@end example
-@cindex dark corner, command-line arguments
+@cindex dark corner @subentry command-line arguments
Command-line arguments are made available for explicit examination by
the @command{awk} program in the @code{ARGV} array
(@pxref{ARGC and ARGV}).
@@ -11214,10 +11249,10 @@ this @value{SECTION} discusses this important facet
of @command{awk}.
@node Strings And Numbers
@subsubsection How @command{awk} Converts Between Strings and Numbers
-@cindex converting, strings to numbers
-@cindex strings, converting
-@cindex numbers, converting
-@cindex converting, numbers to strings
+@cindex converting @subentry string to numbers
+@cindex strings @subentry converting
+@cindex numbers @subentry converting
+@cindex converting @subentry numbers to strings
Strings are converted to numbers and numbers are converted to strings, if the
context
of the @command{awk} program demands it. For example, if the value of
either @code{foo} or @code{bar} in the expression @samp{foo + bar}
@@ -11238,8 +11273,8 @@ the variables @code{two} and @code{three} are converted
to strings and
concatenated together. The resulting string is converted back to the
number 23, to which 4 is then added.
-@cindex null strings, converting numbers to strings
-@cindex type conversion
+@cindex null strings @subentry converting numbers to strings
+@cindex type @subentry conversion
If, for some reason, you need to force a number to be converted to a
string, concatenate that number with the empty string, @code{""}.
To force a string to be converted to a number, add zero to that string.
@@ -11265,7 +11300,7 @@ On most modern machines,
value exactly.@footnote{Pathological cases can require up to
752 digits (!), but we doubt that you need to worry about this.}
-@cindex dark corner, @code{CONVFMT} variable
+@cindex dark corner @subentry @code{CONVFMT} variable
Strange results can occur if you set @code{CONVFMT} to a string that doesn't
tell @code{sprintf()} how to format floating-point numbers in a useful way.
For example, if you forget the @samp{%} in the format, @command{awk} converts
@@ -11286,10 +11321,10 @@ b = a ""
@value{DARKCORNER}
@sidebar Pre-POSIX @command{awk} Used @code{OFMT} for String Conversion
-@cindex POSIX @command{awk}, @code{OFMT} variable and
+@cindex POSIX @command{awk} @subentry @code{OFMT} variable and
@cindex @code{OFMT} variable
-@cindex portability, new @command{awk} vs.@: old @command{awk}
-@cindex @command{awk}, new vs.@: old, @code{OFMT} variable
+@cindex portability @subentry new @command{awk} vs.@: old @command{awk}
+@cindex @command{awk} @subentry new vs.@: old @subentry @code{OFMT} variable
Prior to the POSIX standard, @command{awk} used the value
of @code{OFMT} for converting numbers to strings. @code{OFMT}
specifies the output format to use when printing numbers with @code{print}.
@@ -11314,7 +11349,7 @@ non-English locales use the comma (@samp{,}) as the
decimal point
character. European locales often use either a space or a period as
the thousands separator, if they have one.
-@cindex dark corner, locale's decimal point character
+@cindex dark corner @subentry locale's decimal point character
The POSIX standard says that @command{awk} always uses the period as the
decimal
point when reading the @command{awk} program source code, and for
command-line variable assignments (@pxref{Other Arguments}). However,
@@ -11342,6 +11377,7 @@ the decimal point separator. In the normal @code{"C"}
locale, @command{gawk}
treats @samp{4,321} as 4, while in the Danish locale, it's treated
as the full number including the fractional part, 4.321.
+@cindex POSIX mode
Some earlier versions of @command{gawk} fully complied with this aspect
of the standard. However, many users in non-English locales complained
about this behavior, because their data used a period as the decimal
@@ -11389,7 +11425,7 @@ of the values provided by constants and variables.
@node Arithmetic Ops
@subsection Arithmetic Operators
@cindex arithmetic operators
-@cindex operators, arithmetic
+@cindex operators @subentry arithmetic
@c @cindex addition
@c @cindex subtraction
@c @cindex multiplication
@@ -11428,9 +11464,9 @@ The following list provides the arithmetic operators in
@command{awk},
in order from the highest precedence to the lowest:
@table @code
-@cindex common extensions, @code{**} operator
-@cindex extensions, common@comma{} @code{**} operator
-@cindex POSIX @command{awk}, arithmetic operators and
+@cindex common extensions @subentry @code{**} operator
+@cindex extensions @subentry common @subentry @code{**} operator
+@cindex POSIX @command{awk} @subentry arithmetic operators and
@item @var{x} ^ @var{y}
@itemx @var{x} ** @var{y}
Exponentiation; @var{x} raised to the @var{y} power. @samp{2 ^ 3} has
@@ -11446,7 +11482,7 @@ Unary plus; the expression is converted to a number.
@item @var{x} * @var{y}
Multiplication.
-@cindex troubleshooting, division
+@cindex troubleshooting @subentry division
@cindex division
@item @var{x} / @var{y}
Division; because all numbers in @command{awk} are floating-point
@@ -11471,7 +11507,7 @@ Unary plus and minus have the same precedence,
the multiplication operators all have the same precedence, and
addition and subtraction have the same precedence.
-@cindex differences in @command{awk} and @command{gawk}, trunc-mod operation
+@cindex differences in @command{awk} and @command{gawk} @subentry trunc-mod
operation
@cindex trunc-mod operation
When computing the remainder of @samp{@var{x} % @var{y}},
the quotient is rounded toward zero to an integer and
@@ -11494,9 +11530,9 @@ In other @command{awk} implementations, the signedness
of the remainder
may be machine-dependent.
@c FIXME !!! what does posix say?
-@cindex portability, @code{**} operator and
-@cindex @code{*} (asterisk), @code{**} operator
-@cindex asterisk (@code{*}), @code{**} operator
+@cindex portability @subentry @code{**} operator and
+@cindex @code{*} (asterisk) @subentry @code{**} operator
+@cindex asterisk (@code{*}) @subentry @code{**} operator
@quotation NOTE
The POSIX standard only specifies the use of @samp{^}
for exponentiation.
@@ -11511,8 +11547,8 @@ For maximum portability, do not use the @samp{**}
operator.
@author Brian Kernighan
@end quotation
-@cindex string operators
-@cindex operators, string
+@cindex string @subentry operators
+@cindex operators @subentry string
@cindex concatenating
There is only one string operation: concatenation. It does not have a
specific operator to represent it. Instead, concatenation is performed by
@@ -11535,7 +11571,7 @@ $ @kbd{awk '@{ print "Field number one:" $1 @}'
mail-list}
@dots{}
@end example
-@cindex troubleshooting, string concatenation
+@cindex troubleshooting @subentry string concatenation
Because string concatenation does not have an explicit operator, it is
often necessary to ensure that it happens at the right time by using
parentheses to enclose the items to concatenate. For example,
@@ -11562,7 +11598,7 @@ print "something meaningful" > (file name)
@end example
@cindex order of evaluation, concatenation
-@cindex evaluation order, concatenation
+@cindex evaluation order @subentry concatenation
@cindex side effects
Parentheses should be used around concatenation in all but the
most common contexts, such as on the righthand side of @samp{=}.
@@ -11643,10 +11679,10 @@ you're never quite sure what you'll get.
@node Assignment Ops
@subsection Assignment Expressions
@cindex assignment operators
-@cindex operators, assignment
-@cindex expressions, assignment
-@cindex @code{=} (equals sign), @code{=} operator
-@cindex equals sign (@code{=}), @code{=} operator
+@cindex operators @subentry assignment
+@cindex expressions @subentry assignment
+@cindex @code{=} (equals sign) @subentry @code{=} operator
+@cindex equals sign (@code{=}) @subentry @code{=} operator
An @dfn{assignment} is an expression that stores a (usually different)
value into a variable. For example, let's assign the value one to the variable
@code{z}:
@@ -11669,7 +11705,7 @@ message = "this " thing " is " predicate
@end example
@noindent
-@cindex side effects, assignment expressions
+@cindex side effects @subentry assignment expressions
This also illustrates string concatenation.
The @samp{=} sign is called an @dfn{assignment operator}. It is the
simplest assignment operator because the value of the righthand
@@ -11683,8 +11719,8 @@ a @dfn{side effect}.
@cindex lvalues/rvalues
@cindex rvalues/lvalues
-@cindex assignment operators, lvalues/rvalues
-@cindex operators, assignment
+@cindex assignment operators @subentry lvalues/rvalues
+@cindex operators @subentry assignment
The lefthand operand of an assignment need not be a variable
(@pxref{Variables}); it can also be a field
(@pxref{Changing Fields}) or
@@ -11695,7 +11731,7 @@ The righthand operand may be any expression; it
produces the new value
that the assignment stores in the specified variable, field, or array
element. (Such values are called @dfn{rvalues}.)
-@cindex variables, types of
+@cindex variables @subentry types of
It is important to note that variables do @emph{not} have permanent types.
A variable's type is simply the type of whatever value was last assigned
to it. In the following program fragment, the variable
@@ -11753,8 +11789,8 @@ and then test whether @code{x} equals one. But this
style tends to make
programs hard to read; such nesting of assignments should be avoided,
except perhaps in a one-shot program.
-@cindex @code{+} (plus sign), @code{+=} operator
-@cindex plus sign (@code{+}), @code{+=} operator
+@cindex @code{+} (plus sign) @subentry @code{+=} operator
+@cindex plus sign (@code{+}) @subentry @code{+=} operator
Aside from @samp{=}, there are several other assignment operators that
do arithmetic with the old value of the variable. For example, the
operator @samp{+=} computes a new value by adding the righthand value
@@ -11797,8 +11833,8 @@ BEGIN @{
@end group
@end example
-@cindex operators, assignment, evaluation order
-@cindex assignment operators, evaluation order
+@cindex operators @subentry assignment @subentry evaluation order
+@cindex assignment operators @subentry evaluation order
@noindent
The indices of @code{bar} are practically guaranteed to be different, because
@code{rand()} returns different values each time it is called.
@@ -11831,18 +11867,18 @@ The value of @code{a[3]} could be either two or four.
case, the righthand operand is an expression whose value is converted
to a number.
-@cindex @code{-} (hyphen), @code{-=} operator
-@cindex hyphen (@code{-}), @code{-=} operator
-@cindex @code{*} (asterisk), @code{*=} operator
-@cindex asterisk (@code{*}), @code{*=} operator
-@cindex @code{/} (forward slash), @code{/=} operator
-@cindex forward slash (@code{/}), @code{/=} operator
-@cindex @code{%} (percent sign), @code{%=} operator
-@cindex percent sign (@code{%}), @code{%=} operator
-@cindex @code{^} (caret), @code{^=} operator
-@cindex caret (@code{^}), @code{^=} operator
-@cindex @code{*} (asterisk), @code{**=} operator
-@cindex asterisk (@code{*}), @code{**=} operator
+@cindex @code{-} (hyphen) @subentry @code{-=} operator
+@cindex hyphen (@code{-}) @subentry @code{-=} operator
+@cindex @code{*} (asterisk) @subentry @code{*=} operator
+@cindex asterisk (@code{*}) @subentry @code{*=} operator
+@cindex @code{/} (forward slash) @subentry @code{/=} operator
+@cindex forward slash (@code{/}) @subentry @code{/=} operator
+@cindex @code{%} (percent sign) @subentry @code{%=} operator
+@cindex percent sign (@code{%}) @subentry @code{%=} operator
+@cindex @code{^} (caret) @subentry @code{^=} operator
+@cindex caret (@code{^}) @subentry @code{^=} operator
+@cindex @code{*} (asterisk) @subentry @code{**=} operator
+@cindex asterisk (@code{*}) @subentry @code{**=} operator
@float Table,table-assign-ops
@caption{Arithmetic assignment operators}
@multitable @columnfractions .30 .70
@@ -11852,32 +11888,32 @@ to a number.
@item @var{lvalue} @code{*=} @var{coefficient} @tab Multiply the value of
@var{lvalue} by @var{coefficient}.
@item @var{lvalue} @code{/=} @var{divisor} @tab Divide the value of
@var{lvalue} by @var{divisor}.
@item @var{lvalue} @code{%=} @var{modulus} @tab Set @var{lvalue} to its
remainder by @var{modulus}.
-@cindex common extensions, @code{**=} operator
-@cindex extensions, common@comma{} @code{**=} operator
-@cindex @command{awk} language, POSIX version
+@cindex common extensions @subentry @code{**=} operator
+@cindex extensions @subentry common @subentry @code{**=} operator
+@cindex @command{awk} @subentry language, POSIX version
@cindex POSIX @command{awk}
@item @var{lvalue} @code{^=} @var{power} @tab Raise @var{lvalue} to the power
@var{power}.
@item @var{lvalue} @code{**=} @var{power} @tab Raise @var{lvalue} to the power
@var{power}. @value{COMMONEXT}
@end multitable
@end float
-@cindex POSIX @command{awk}, @code{**=} operator and
-@cindex portability, @code{**=} operator and
+@cindex POSIX @command{awk} @subentry @code{**=} operator and
+@cindex portability @subentry @code{**=} operator and
@quotation NOTE
Only the @samp{^=} operator is specified by POSIX.
For maximum portability, do not use the @samp{**=} operator.
@end quotation
@sidebar Syntactic Ambiguities Between @samp{/=} and Regular Expressions
-@cindex dark corner, regexp constants, @code{/=} operator and
-@cindex @code{/} (forward slash), @code{/=} operator, vs. @code{/=@dots{}/}
regexp constant
-@cindex forward slash (@code{/}), @code{/=} operator, vs. @code{/=@dots{}/}
regexp constant
-@cindex regexp constants, @code{/=@dots{}/}, @code{/=} operator and
+@cindex dark corner @subentry regexp constants @subentry @code{/=} operator and
+@cindex @code{/} (forward slash) @subentry @code{/=} operator @subentry vs.
@code{/=@dots{}/} regexp constant
+@cindex forward slash (@code{/}) @subentry @code{/=} operator @subentry vs.
@code{/=@dots{}/} regexp constant
+@cindex regexp constants @subentry @code{/=@dots{}/} @subentry @code{/=}
operator and
@c derived from email from "Nelson H. F. Beebe" <address@hidden>
@c Date: Mon, 1 Sep 1997 13:38:35 -0600 (MDT)
-@cindex dark corner, @code{/=} operator vs. @code{/=@dots{}/} regexp constant
+@cindex dark corner @subentry @code{/=} operator vs. @code{/=@dots{}/} regexp
constant
@cindex ambiguity, syntactic: @code{/=} operator vs. @code{/=@dots{}/} regexp
constant
@cindex syntactic ambiguity: @code{/=} operator vs. @code{/=@dots{}/} regexp
constant
@cindex @code{/=} operator vs. @code{/=@dots{}/} regexp constant
@@ -11910,16 +11946,16 @@ and @command{mawk} also do not.
@subsection Increment and Decrement Operators
@cindex increment operators
-@cindex operators, decrement/increment
+@cindex operators @subentry decrement/increment
@dfn{Increment} and @dfn{decrement operators} increase or decrease the value of
a variable by one. An assignment operator can do the same thing, so
the increment operators add no power to the @command{awk} language; however,
they
are convenient abbreviations for very common operations.
@cindex side effects
-@cindex @code{+} (plus sign), @code{++} operator
-@cindex plus sign (@code{+}), @code{++} operator
-@cindex side effects, decrement/increment operators
+@cindex @code{+} (plus sign) @subentry @code{++} operator
+@cindex plus sign (@code{+}) @subentry @code{++} operator
+@cindex side effects @subentry decrement/increment operators
The operator used for adding one is written @samp{++}. It can be used to
increment
a variable either before or after taking its value.
To @dfn{pre-increment} a variable @code{v}, write @samp{++v}. This adds
@@ -11950,8 +11986,8 @@ long as you stick to numbers that are fairly small
(less than
@end ifnotinfo
@end ifnottex
-@cindex @code{$} (dollar sign), incrementing fields and arrays
-@cindex dollar sign (@code{$}), incrementing fields and arrays
+@cindex @code{$} (dollar sign) @subentry incrementing fields and arrays
+@cindex dollar sign (@code{$}) @subentry incrementing fields and arrays
Fields and array elements are incremented
just like variables. (Use @samp{$(i++)} when you want to do a field reference
and a variable increment at the same time. The parentheses are necessary
@@ -11964,8 +12000,8 @@ the lvalue to pre-decrement or after it to
post-decrement.
Following is a summary of increment and decrement expressions:
@table @code
-@cindex @code{+} (plus sign), @code{++} operator
-@cindex plus sign (@code{+}), @code{++} operator
+@cindex @code{+} (plus sign) @subentry @code{++} operator
+@cindex plus sign (@code{+}) @subentry @code{++} operator
@item ++@var{lvalue}
Increment @var{lvalue}, returning the new value as the
value of the expression.
@@ -11974,8 +12010,8 @@ value of the expression.
Increment @var{lvalue}, returning the @emph{old} value of @var{lvalue}
as the value of the expression.
-@cindex @code{-} (hyphen), @code{--} operator
-@cindex hyphen (@code{-}), @code{--} operator
+@cindex @code{-} (hyphen) @subentry @code{--} operator
+@cindex hyphen (@code{-}) @subentry @code{--} operator
@item --@var{lvalue}
Decrement @var{lvalue}, returning the new value as the
value of the expression.
@@ -11991,8 +12027,8 @@ like @samp{@var{lvalue}++}, but instead of adding, it
subtracts.)
@sidebar Operator Evaluation Order
@cindex precedence
-@cindex operators, precedence of
-@cindex portability, operators
+@cindex operators @subentry precedence of
+@cindex portability @subentry operators
@cindex evaluation order
@cindex Marx, Groucho
@quotation
@@ -12084,7 +12120,7 @@ BEGIN @{
@}
@end example
-@cindex dark corner, @code{"0"} is actually true
+@cindex dark corner @subentry @code{"0"} is actually true
There is a surprising consequence of the ``nonzero or non-null'' rule:
the string constant @code{"0"} is actually true, because it is non-null.
@value{DARKCORNER}
@@ -12100,13 +12136,12 @@ the string constant @code{"0"} is actually true,
because it is non-null.
@c leave it alone.
@cindex comparison expressions
-@cindex expressions, comparison
-@cindex expressions, matching, See comparison expressions
-@cindex matching, expressions, See comparison expressions
-@cindex relational operators, See comparison operators
-@cindex operators, relational, See operators@comma{} comparison
-@cindex variable typing
-@cindex variables, types of, comparison expressions and
+@cindex expressions @subentry comparison
+@cindex expressions, matching @seeentry{comparison expressions}
+@cindex matching @subentry expressions @seeentry{comparison expressions}
+@cindex relational operators @seeentry{comparison operators}
+@cindex operators, relational @seeentry{operators, comparison}
+@cindex variables @subentry types of @subentry comparison expressions and
Unlike in other programming languages, in @command{awk} variables do not have a
fixed type. Instead, they can be either a number or a string, depending
upon the value that is assigned to them.
@@ -12200,9 +12235,9 @@ $ @kbd{echo 37 | awk '@{ printf("%s %s < 42\n", $1,}
Here are the rules for when @command{awk}
treats data as a number, and for when it treats data as a string.
-@cindex numeric, strings
-@cindex strings, numeric
-@cindex POSIX @command{awk}, numeric strings and
+@cindex numeric @subentry strings
+@cindex strings @subentry numeric
+@cindex POSIX @command{awk} @subentry numeric strings and
The POSIX standard uses the term @dfn{numeric string} for input data that
looks numeric. The @samp{37} in the previous example is a numeric string.
So what is the type of a numeric string? Answer: numeric.
@@ -12414,28 +12449,29 @@ $ @kbd{echo hello 37 | gawk '@{ print typeof($1),
typeof($2) @}'}
@node Comparison Operators
@subsubsection Comparison Operators
+@cindex operators @subentry comparison
@dfn{Comparison expressions} compare strings or numbers for
relationships such as equality. They are written using @dfn{relational
operators}, which are a superset of those in C.
@ref{table-relational-ops} describes them.
-@cindex @code{<} (left angle bracket), @code{<} operator
-@cindex left angle bracket (@code{<}), @code{<} operator
-@cindex @code{<} (left angle bracket), @code{<=} operator
-@cindex left angle bracket (@code{<}), @code{<=} operator
-@cindex @code{>} (right angle bracket), @code{>=} operator
-@cindex right angle bracket (@code{>}), @code{>=} operator
-@cindex @code{>} (right angle bracket), @code{>} operator
-@cindex right angle bracket (@code{>}), @code{>} operator
-@cindex @code{=} (equals sign), @code{==} operator
-@cindex equals sign (@code{=}), @code{==} operator
-@cindex @code{!} (exclamation point), @code{!=} operator
-@cindex exclamation point (@code{!}), @code{!=} operator
+@cindex @code{<} (left angle bracket) @subentry @code{<} operator
+@cindex left angle bracket (@code{<}) @subentry @code{<} operator
+@cindex @code{<} (left angle bracket) @subentry @code{<=} operator
+@cindex left angle bracket (@code{<}) @subentry @code{<=} operator
+@cindex @code{>} (right angle bracket) @subentry @code{>=} operator
+@cindex right angle bracket (@code{>}) @subentry @code{>=} operator
+@cindex @code{>} (right angle bracket) @subentry @code{>} operator
+@cindex right angle bracket (@code{>}) @subentry @code{>} operator
+@cindex @code{=} (equals sign) @subentry @code{==} operator
+@cindex equals sign (@code{=}) @subentry @code{==} operator
+@cindex @code{!} (exclamation point) @subentry @code{!=} operator
+@cindex exclamation point (@code{!}) @subentry @code{!=} operator
@cindex @code{~} (tilde), @code{~} operator
@cindex tilde (@code{~}), @code{~} operator
-@cindex @code{!} (exclamation point), @code{!~} operator
-@cindex exclamation point (@code{!}), @code{!~} operator
+@cindex @code{!} (exclamation point) @subentry @code{!~} operator
+@cindex exclamation point (@code{!}) @subentry @code{!~} operator
@cindex @code{in} operator
@float Table,table-relational-ops
@caption{Relational operators}
@@ -12464,7 +12500,7 @@ and so on. Thus, @code{"10"} is less than @code{"9"}.
If there are two
strings where one is a prefix of the other, the shorter string is less than
the longer one. Thus, @code{"abc"} is less than @code{"abcd"}.
-@cindex troubleshooting, @code{==} operator
+@cindex troubleshooting @subentry @code{==} operator
It is very easy to accidentally mistype the @samp{==} operator and
leave off one of the @samp{=} characters. The result is still valid
@command{awk} code, but the program does not do what is intended:
@@ -12516,7 +12552,7 @@ $ @kbd{echo 1e2 3 | awk '@{ print ($1 < $2) ? "true" :
"false" @}'}
@print{} false
@end example
-@cindex comparison expressions, string vs.@: regexp
+@cindex comparison expressions @subentry string vs.@: regexp
@c @cindex string comparison vs.@: regexp comparison
@c @cindex regexp comparison vs.@: string comparison
@noindent
@@ -12548,15 +12584,15 @@ has the value one if @code{x} contains @samp{foo},
such as
@cindex @code{~} (tilde), @code{~} operator
@cindex tilde (@code{~}), @code{~} operator
-@cindex @code{!} (exclamation point), @code{!~} operator
-@cindex exclamation point (@code{!}), @code{!~} operator
+@cindex @code{!} (exclamation point) @subentry @code{!~} operator
+@cindex exclamation point (@code{!}) @subentry @code{!~} operator
The righthand operand of the @samp{~} and @samp{!~} operators may be
either a regexp constant (@code{/}@dots{}@code{/}) or an ordinary
expression. In the latter case, the value of the expression as a string is
used as a
dynamic regexp (@pxref{Regexp Usage}; also
@pxref{Computed Regexps}).
-@cindex @command{awk}, regexp constants and
+@cindex @command{awk} @subentry regexp constants and
@cindex regexp constants
A constant regular
expression in slashes by itself is also an expression.
@@ -12584,6 +12620,7 @@ comparison.@footnote{Technically, string comparison is
supposed to behave
the same way as if the strings were compared with the C @code{strcoll()}
function.}
+@cindex POSIX mode
Because this behavior differs considerably from existing practice,
@command{gawk} only implemented it when in POSIX mode (@pxref{Options}).
Here is an example to illustrate the difference, in an @code{en_US.UTF-8}
@@ -12615,6 +12652,7 @@ a <= b && a >= b
@end example
@end quotation
+@cindex POSIX mode
As of @value{PVERSION} 4.2, @command{gawk} continues to use locale
collating order for @code{<}, @code{<=}, @code{>}, and @code{>=} only
in POSIX mode.
@@ -12629,12 +12667,12 @@ and http://austingroupbugs.net/view.php?id=1070.
@cindex and Boolean-logic operator
@cindex or Boolean-logic operator
@cindex not Boolean-logic operator
-@cindex expressions, Boolean
+@cindex expressions @subentry Boolean
@cindex Boolean expressions
-@cindex operators, Boolean, See Boolean expressions
-@cindex Boolean operators, See Boolean expressions
-@cindex logical operators, See Boolean expressions
-@cindex operators, logical, See Boolean expressions
+@cindex operators, Boolean @seeentry{Boolean expressions}
+@cindex Boolean operators @seeentry{Boolean expressions}
+@cindex logical operators @seeentry{Boolean expressions}
+@cindex operators, logical @seeentry{Boolean expressions}
A @dfn{Boolean expression} is a combination of comparison expressions or
matching expressions, using the Boolean operators ``or''
@@ -12666,7 +12704,7 @@ both @samp{edu} and @samp{li}:
if ($0 ~ /edu/ && $0 ~ /li/) print
@end example
-@cindex side effects, Boolean operators
+@cindex side effects @subentry Boolean operators
The subexpression @var{boolean2} is evaluated only if @var{boolean1}
is true. This can make a difference when @var{boolean2} contains
expressions that have side effects. In the case of @samp{$0 ~ /foo/ &&
@@ -12706,11 +12744,11 @@ BEGIN @{ if (! ("HOME" in ENVIRON))
@end table
@cindex short-circuit operators
-@cindex operators, short-circuit
-@cindex @code{&} (ampersand), @code{&&} operator
-@cindex ampersand (@code{&}), @code{&&} operator
-@cindex @code{|} (vertical bar), @code{||} operator
-@cindex vertical bar (@code{|}), @code{||} operator
+@cindex operators @subentry short-circuit
+@cindex @code{&} (ampersand) @subentry @code{&&} operator
+@cindex ampersand (@code{&}) @subentry @code{&&} operator
+@cindex @code{|} (vertical bar) @subentry @code{||} operator
+@cindex vertical bar (@code{|}) @subentry @code{||} operator
The @samp{&&} and @samp{||} operators are called @dfn{short-circuit}
operators because of the way they work. Evaluation of the full expression
is ``short-circuited'' if the result can be determined partway through
@@ -12722,10 +12760,10 @@ by putting a newline after them. But you cannot put
a newline in front
of either of these operators without using backslash continuation
(@pxref{Statements/Lines}).
-@cindex @code{!} (exclamation point), @code{!} operator
-@cindex exclamation point (@code{!}), @code{!} operator
+@cindex @code{!} (exclamation point) @subentry @code{!} operator
+@cindex exclamation point (@code{!}) @subentry @code{!} operator
@cindex newlines
-@cindex variables, flag
+@cindex variables @subentry flag
@cindex flag variables
The actual value of an expression using the @samp{!} operator is
either one or zero, depending upon the truth value of the expression it
@@ -12779,8 +12817,8 @@ The reason it's there is to avoid printing the
bracketing
@node Conditional Exp
@subsection Conditional Expressions
@cindex conditional expressions
-@cindex expressions, conditional
-@cindex expressions, selecting
+@cindex expressions @subentry conditional
+@cindex expressions @subentry selecting
A @dfn{conditional expression} is a special kind of expression that has
three operands. It allows you to use one expression's value to select
@@ -12804,7 +12842,7 @@ For example, the following expression produces the
absolute value of @code{x}:
x >= 0 ? x : -x
@end example
-@cindex side effects, conditional expressions
+@cindex side effects @subentry conditional expressions
Each time the conditional expression is computed, only one of
@var{if-true-exp} and @var{if-false-exp} is used; the other is ignored.
This is important when the expressions have side effects. For example,
@@ -12822,9 +12860,9 @@ and the other is not.
@xref{Arrays},
for more information about arrays.
-@cindex differences in @command{awk} and @command{gawk}, line continuations
-@cindex line continuations, @command{gawk}
-@cindex @command{gawk}, line continuation in
+@cindex differences in @command{awk} and @command{gawk} @subentry line
continuations
+@cindex line continuations @subentry @command{gawk}
+@cindex @command{gawk} @subentry line continuation in
As a minor @command{gawk} extension,
a statement that uses @samp{?:} can be continued simply
by putting a newline after either character.
@@ -12843,7 +12881,7 @@ This enables you to
ask for it by name at any point in the program. For
example, the function @code{sqrt()} computes the square root of a number.
-@cindex functions, built-in
+@cindex functions @subentry built-in
A fixed set of functions are @dfn{built in}, which means they are
available in every @command{awk} program. The @code{sqrt()} function is one
of these. @xref{Built-in} for a list of built-in
@@ -12854,7 +12892,7 @@ for instructions on how to do this.
Finally, @command{gawk} lets you write functions in C or C++
that may be called from your program (@pxref{Dynamic Extensions}).
-@cindex arguments, in function calls
+@cindex arguments @subentry in function calls
The way to use a function is with a @dfn{function call} expression,
which consists of the function name followed immediately by a list of
@dfn{arguments} in parentheses. The arguments are expressions that
@@ -12869,7 +12907,7 @@ atan2(y, x) @ii{two arguments}
rand() @ii{no arguments}
@end example
-@cindex troubleshooting, function call syntax
+@cindex troubleshooting @subentry function call syntax
@quotation CAUTION
Do not put any space between the function name and the opening parenthesis!
A user-defined function name looks just like the name of a
@@ -12904,7 +12942,7 @@ which is a way to choose the function to call at
runtime, instead of
when you write the source code to your program. We defer discussion of
this feature until later; see @ref{Indirect Calls}.
-@cindex side effects, function calls
+@cindex side effects @subentry function calls
Like every other expression, the function call has a value, often
called the @dfn{return value}, which is computed by the function
based on the arguments you give it. In this example, the return value
@@ -12954,7 +12992,7 @@ $ @kbd{awk -f matchit.awk}
@node Precedence
@section Operator Precedence (How Operators Nest)
@cindex precedence
-@cindex operators, precedence
+@cindex operators @subentry precedence of
@dfn{Operator precedence} determines how operators are grouped when
different operators appear close by in one expression. For example,
@@ -13001,47 +13039,47 @@ to lowest precedence:
@item @code{(}@dots{}@code{)}
Grouping.
-@cindex @code{$} (dollar sign), @code{$} field operator
-@cindex dollar sign (@code{$}), @code{$} field operator
+@cindex @code{$} (dollar sign) @subentry @code{$} field operator
+@cindex dollar sign (@code{$}) @subentry @code{$} field operator
@item @code{$}
Field reference.
-@cindex @code{+} (plus sign), @code{++} operator
-@cindex plus sign (@code{+}), @code{++} operator
-@cindex @code{-} (hyphen), @code{--} operator
-@cindex hyphen (@code{-}), @code{--} operator
+@cindex @code{+} (plus sign) @subentry @code{++} operator
+@cindex plus sign (@code{+}) @subentry @code{++} operator
+@cindex @code{-} (hyphen) @subentry @code{--} operator
+@cindex hyphen (@code{-}) @subentry @code{--} operator
@item @code{++ --}
Increment, decrement.
-@cindex @code{^} (caret), @code{^} operator
-@cindex caret (@code{^}), @code{^} operator
-@cindex @code{*} (asterisk), @code{**} operator
-@cindex asterisk (@code{*}), @code{**} operator
+@cindex @code{^} (caret) @subentry @code{^} operator
+@cindex caret (@code{^}) @subentry @code{^} operator
+@cindex @code{*} (asterisk) @subentry @code{**} operator
+@cindex asterisk (@code{*}) @subentry @code{**} operator
@item @code{^ **}
Exponentiation. These operators group right to left.
-@cindex @code{+} (plus sign), @code{+} operator
-@cindex plus sign (@code{+}), @code{+} operator
-@cindex @code{-} (hyphen), @code{-} operator
-@cindex hyphen (@code{-}), @code{-} operator
-@cindex @code{!} (exclamation point), @code{!} operator
-@cindex exclamation point (@code{!}), @code{!} operator
+@cindex @code{+} (plus sign) @subentry @code{+} operator
+@cindex plus sign (@code{+}) @subentry @code{+} operator
+@cindex @code{-} (hyphen) @subentry @code{-} operator
+@cindex hyphen (@code{-}) @subentry @code{-} operator
+@cindex @code{!} (exclamation point) @subentry @code{!} operator
+@cindex exclamation point (@code{!}) @subentry @code{!} operator
@item @code{+ - !}
Unary plus, minus, logical ``not.''
-@cindex @code{*} (asterisk), @code{*} operator, as multiplication operator
-@cindex asterisk (@code{*}), @code{*} operator, as multiplication operator
-@cindex @code{/} (forward slash), @code{/} operator
-@cindex forward slash (@code{/}), @code{/} operator
-@cindex @code{%} (percent sign), @code{%} operator
-@cindex percent sign (@code{%}), @code{%} operator
+@cindex @code{*} (asterisk) @subentry @code{*} operator @subentry as
multiplication operator
+@cindex asterisk (@code{*}) @subentry @code{*} operator @subentry as
multiplication operator
+@cindex @code{/} (forward slash) @subentry @code{/} operator
+@cindex forward slash (@code{/}) @subentry @code{/} operator
+@cindex @code{%} (percent sign) @subentry @code{%} operator
+@cindex percent sign (@code{%}) @subentry @code{%} operator
@item @code{* / %}
Multiplication, division, remainder.
-@cindex @code{+} (plus sign), @code{+} operator
-@cindex plus sign (@code{+}), @code{+} operator
-@cindex @code{-} (hyphen), @code{-} operator
-@cindex hyphen (@code{-}), @code{-} operator
+@cindex @code{+} (plus sign) @subentry @code{+} operator
+@cindex plus sign (@code{+}) @subentry @code{+} operator
+@cindex @code{-} (hyphen) @subentry @code{-} operator
+@cindex hyphen (@code{-}) @subentry @code{-} operator
@item @code{+ -}
Addition, subtraction.
@@ -13050,35 +13088,35 @@ There is no special symbol for concatenation.
The operands are simply written side by side
(@pxref{Concatenation}).
-@cindex @code{<} (left angle bracket), @code{<} operator
-@cindex left angle bracket (@code{<}), @code{<} operator
-@cindex @code{<} (left angle bracket), @code{<=} operator
-@cindex left angle bracket (@code{<}), @code{<=} operator
-@cindex @code{>} (right angle bracket), @code{>=} operator
-@cindex right angle bracket (@code{>}), @code{>=} operator
-@cindex @code{>} (right angle bracket), @code{>} operator
-@cindex right angle bracket (@code{>}), @code{>} operator
-@cindex @code{=} (equals sign), @code{==} operator
-@cindex equals sign (@code{=}), @code{==} operator
-@cindex @code{!} (exclamation point), @code{!=} operator
-@cindex exclamation point (@code{!}), @code{!=} operator
-@cindex @code{>} (right angle bracket), @code{>>} operator (I/O)
-@cindex right angle bracket (@code{>}), @code{>>} operator (I/O)
-@cindex operators, input/output
-@cindex @code{|} (vertical bar), @code{|} operator (I/O)
-@cindex vertical bar (@code{|}), @code{|} operator (I/O)
-@cindex operators, input/output
-@cindex @code{|} (vertical bar), @code{|&} operator (I/O)
-@cindex vertical bar (@code{|}), @code{|&} operator (I/O)
-@cindex operators, input/output
+@cindex @code{<} (left angle bracket) @subentry @code{<} operator
+@cindex left angle bracket (@code{<}) @subentry @code{<} operator
+@cindex @code{<} (left angle bracket) @subentry @code{<=} operator
+@cindex left angle bracket (@code{<}) @subentry @code{<=} operator
+@cindex @code{>} (right angle bracket) @subentry @code{>=} operator
+@cindex right angle bracket (@code{>}) @subentry @code{>=} operator
+@cindex @code{>} (right angle bracket) @subentry @code{>} operator
+@cindex right angle bracket (@code{>}) @subentry @code{>} operator
+@cindex @code{=} (equals sign) @subentry @code{==} operator
+@cindex equals sign (@code{=}) @subentry @code{==} operator
+@cindex @code{!} (exclamation point) @subentry @code{!=} operator
+@cindex exclamation point (@code{!}) @subentry @code{!=} operator
+@cindex @code{>} (right angle bracket) @subentry @code{>>} operator (I/O)
+@cindex right angle bracket (@code{>}) @subentry @code{>>} operator (I/O)
+@cindex operators @subentry input/output
+@cindex @code{|} (vertical bar) @subentry @code{|} operator (I/O)
+@cindex vertical bar (@code{|}) @subentry @code{|} operator (I/O)
+@cindex operators @subentry input/output
+@cindex @code{|} (vertical bar) @subentry @code{|&} operator (I/O)
+@cindex vertical bar (@code{|}) @subentry @code{|&} operator (I/O)
+@cindex operators @subentry input/output
@item @code{< <= == != > >= >> | |&}
Relational and redirection.
The relational operators and the redirections have the same precedence
level. Characters such as @samp{>} serve both as relationals and as
redirections; the context distinguishes between the two meanings.
-@cindex @code{print} statement, I/O operators in
-@cindex @code{printf} statement, I/O operators in
+@cindex @code{print} statement @subentry I/O operators in
+@cindex @code{printf} statement @subentry I/O operators in
Note that the I/O redirection operators in @code{print} and @code{printf}
statements belong to the statement level, not to expressions. The
redirection does not produce an expression that could be the operand of
@@ -13090,8 +13128,8 @@ The correct way to write this statement is @samp{print
foo > (a ? b : c)}.
@cindex @code{~} (tilde), @code{~} operator
@cindex tilde (@code{~}), @code{~} operator
-@cindex @code{!} (exclamation point), @code{!~} operator
-@cindex exclamation point (@code{!}), @code{!~} operator
+@cindex @code{!} (exclamation point) @subentry @code{!~} operator
+@cindex exclamation point (@code{!}) @subentry @code{!~} operator
@item @code{~ !~}
Matching, nonmatching.
@@ -13099,43 +13137,43 @@ Matching, nonmatching.
@item @code{in}
Array membership.
-@cindex @code{&} (ampersand), @code{&&} operator
-@cindex ampersand (@code{&}), @code{&&} operator
+@cindex @code{&} (ampersand) @subentry @code{&&} operator
+@cindex ampersand (@code{&}) @subentry @code{&&} operator
@item @code{&&}
Logical ``and.''
-@cindex @code{|} (vertical bar), @code{||} operator
-@cindex vertical bar (@code{|}), @code{||} operator
+@cindex @code{|} (vertical bar) @subentry @code{||} operator
+@cindex vertical bar (@code{|}) @subentry @code{||} operator
@item @code{||}
Logical ``or.''
-@cindex @code{?} (question mark), @code{?:} operator
-@cindex question mark (@code{?}), @code{?:} operator
-@cindex @code{:} (colon), @code{?:} operator
-@cindex colon (@code{:}), @code{?:} operator
+@cindex @code{?} (question mark) @subentry @code{?:} operator
+@cindex question mark (@code{?}) @subentry @code{?:} operator
+@cindex @code{:} (colon) @subentry @code{?:} operator
+@cindex colon (@code{:}) @subentry @code{?:} operator
@item @code{?:}
Conditional. This operator groups right to left.
-@cindex @code{+} (plus sign), @code{+=} operator
-@cindex plus sign (@code{+}), @code{+=} operator
-@cindex @code{-} (hyphen), @code{-=} operator
-@cindex hyphen (@code{-}), @code{-=} operator
-@cindex @code{*} (asterisk), @code{*=} operator
-@cindex asterisk (@code{*}), @code{*=} operator
-@cindex @code{*} (asterisk), @code{**=} operator
-@cindex asterisk (@code{*}), @code{**=} operator
-@cindex @code{/} (forward slash), @code{/=} operator
-@cindex forward slash (@code{/}), @code{/=} operator
-@cindex @code{%} (percent sign), @code{%=} operator
-@cindex percent sign (@code{%}), @code{%=} operator
-@cindex @code{^} (caret), @code{^=} operator
-@cindex caret (@code{^}), @code{^=} operator
+@cindex @code{+} (plus sign) @subentry @code{+=} operator
+@cindex plus sign (@code{+}) @subentry @code{+=} operator
+@cindex @code{-} (hyphen) @subentry @code{-=} operator
+@cindex hyphen (@code{-}) @subentry @code{-=} operator
+@cindex @code{*} (asterisk) @subentry @code{*=} operator
+@cindex asterisk (@code{*}) @subentry @code{*=} operator
+@cindex @code{*} (asterisk) @subentry @code{**=} operator
+@cindex asterisk (@code{*}) @subentry @code{**=} operator
+@cindex @code{/} (forward slash) @subentry @code{/=} operator
+@cindex forward slash (@code{/}) @subentry @code{/=} operator
+@cindex @code{%} (percent sign) @subentry @code{%=} operator
+@cindex percent sign (@code{%}) @subentry @code{%=} operator
+@cindex @code{^} (caret) @subentry @code{^=} operator
+@cindex caret (@code{^}) @subentry @code{^=} operator
@item @code{= += -= *= /= %= ^= **=}
Assignment. These operators group right to left.
@end table
-@cindex POSIX @command{awk}, @code{**} operator and
-@cindex portability, operators, not in POSIX @command{awk}
+@cindex POSIX @command{awk} @subentry @code{**} operator and
+@cindex portability @subentry operators @subentry not in POSIX @command{awk}
@quotation NOTE
The @samp{|&}, @samp{**}, and @samp{**=} operators are not specified by POSIX.
For maximum portability, do not use them.
@@ -13282,7 +13320,7 @@ building something useful.
* Empty:: The empty pattern, which matches every record.
@end menu
-@cindex patterns, types of
+@cindex patterns @subentry types of
Patterns in @command{awk} control the execution of rules---a rule is
executed when its pattern matches the current input record.
The following is a summary of the types of @command{awk} patterns:
@@ -13323,8 +13361,8 @@ The empty pattern matches every input record.
@node Regexp Patterns
@subsection Regular Expressions as Patterns
-@cindex patterns, regular expressions as
-@cindex regular expressions, as patterns
+@cindex patterns @subentry regexp constants as
+@cindex regular expressions @subentry as patterns
Regular expressions are one of the first kinds of patterns presented
in this book.
@@ -13340,8 +13378,8 @@ END @{ print buzzwords, "buzzwords seen" @}
@node Expression Patterns
@subsection Expressions as Patterns
-@cindex expressions, as patterns
-@cindex patterns, expressions as
+@cindex expressions @subentry as patterns
+@cindex patterns @subentry expressions as
Any @command{awk} expression is valid as an @command{awk} pattern.
The pattern matches if the expression's value is nonzero (if a
@@ -13352,8 +13390,8 @@ value depends directly on the new input record's text;
otherwise, it
depends on only what has happened so far in the execution of the
@command{awk} program.
-@cindex comparison expressions, as patterns
-@cindex patterns, comparison expressions as
+@cindex comparison expressions @subentry as patterns
+@cindex patterns @subentry comparison expressions as
Comparison expressions, using the comparison operators described in
@ref{Typing and Comparison},
are a very common kind of pattern.
@@ -13366,12 +13404,12 @@ is used as a dynamic regular expression
The following example prints the second field of each input record
whose first field is precisely @samp{li}:
-@cindex @code{/} (forward slash), patterns and
-@cindex forward slash (@code{/}), patterns and
+@cindex @code{/} (forward slash) @subentry patterns and
+@cindex forward slash (@code{/}) @subentry patterns and
@cindex @code{~} (tilde), @code{~} operator
@cindex tilde (@code{~}), @code{~} operator
-@cindex @code{!} (exclamation point), @code{!~} operator
-@cindex exclamation point (@code{!}), @code{!~} operator
+@cindex @code{!} (exclamation point) @subentry @code{!~} operator
+@cindex exclamation point (@code{!}) @subentry @code{!~} operator
@example
$ @kbd{awk '$1 == "li" @{ print $2 @}' mail-list}
@end example
@@ -13387,15 +13425,15 @@ $ @kbd{awk '$1 ~ /li/ @{ print $2 @}' mail-list}
@print{} 555-6699
@end example
-@cindex regexp constants, as patterns
-@cindex patterns, regexp constants as
+@cindex regexp constants @subentry as patterns
+@cindex patterns @subentry regexp constants as
A regexp constant as a pattern is also a special case of an expression
pattern. The expression @code{/li/} has the value one if @samp{li}
appears in the current input record. Thus, as a pattern, @code{/li/}
matches any record containing @samp{li}.
-@cindex Boolean expressions, as patterns
-@cindex patterns, Boolean expressions as
+@cindex Boolean expressions @subentry as patterns
+@cindex patterns @subentry Boolean expressions as
Boolean expressions are also commonly used as patterns.
Whether the pattern
matches an input record depends on whether its subexpressions match.
@@ -13437,10 +13475,10 @@ $ @kbd{awk '! /li/' mail-list}
@end group
@end example
-@cindex @code{BEGIN} pattern, Boolean patterns and
-@cindex @code{END} pattern, Boolean patterns and
-@cindex @code{BEGINFILE} pattern, Boolean patterns and
-@cindex @code{ENDFILE} pattern, Boolean patterns and
+@cindex @code{BEGIN} pattern @subentry Boolean patterns and
+@cindex @code{END} pattern @subentry Boolean patterns and
+@cindex @code{BEGINFILE} pattern @subentry Boolean patterns and
+@cindex @code{ENDFILE} pattern @subentry Boolean patterns and
The subexpressions of a Boolean operator in a pattern can be constant regular
expressions, comparisons, or any other @command{awk} expressions. Range
patterns are not expressions, so they cannot appear inside Boolean
@@ -13456,8 +13494,8 @@ patterns is described in @ref{Precedence}.
@subsection Specifying Record Ranges with Patterns
@cindex range patterns
-@cindex patterns, ranges in
-@cindex lines, matching ranges of
+@cindex patterns @subentry ranges in
+@cindex lines @subentry matching ranges of
@cindex @code{,} (comma), in range patterns
@cindex comma (@code{,}), in range patterns
A @dfn{range pattern} is made of two patterns separated by a comma, in
@@ -13482,7 +13520,7 @@ input record; when this succeeds, the range pattern is
@dfn{turned off} again
for the following record. Then the range pattern goes back to checking
@var{begpat} against each record.
-@cindex @code{if} statement, actions@comma{} changing
+@cindex @code{if} statement @subentry actions, changing
The record that turns on the range pattern and the one that turns it
off both match the range pattern. If you don't want to operate on
these records, you can write @code{if} statements in the rule's action
@@ -13507,13 +13545,13 @@ looks like this:
@end example
@noindent
-@cindex lines, skipping between markers
+@cindex lines @subentry skipping between markers
@c @cindex flag variables
This program fails because the range pattern is both turned on and turned off
by the first line, which just has a @samp{%} on it. To accomplish this task,
write the program in the following manner, using a flag:
-@cindex @code{!} (exclamation point), @code{!} operator
+@cindex @code{!} (exclamation point) @subentry @code{!} operator
@example
/^%$/ @{ skip = ! skip; next @}
skip == 1 @{ next @} # skip lines with `skip' set
@@ -13538,8 +13576,8 @@ $ @kbd{echo Yes | gawk '(/1/,/2/) || /Yes/'}
@error{} gawk: cmd. line:1: ^ syntax error
@end example
-@cindex range patterns, line continuation and
-@cindex dark corner, range patterns, line continuation and
+@cindex range patterns @subentry line continuation and
+@cindex dark corner @subentry range patterns, line continuation and
As a minor point of interest, although it is poor style,
POSIX allows you to put a newline after the comma in
a range pattern. @value{DARKCORNER}
@@ -13581,8 +13619,8 @@ $ @kbd{awk '}
@print{} "li" appears in 4 records.
@end example
-@cindex @code{BEGIN} pattern, operators and
-@cindex @code{END} pattern, operators and
+@cindex @code{BEGIN} pattern @subentry operators and
+@cindex @code{END} pattern @subentry operators and
This program finds the number of records in the input file @file{mail-list}
that contain the string @samp{li}. The @code{BEGIN} rule prints a title
for the report. There is no need to use the @code{BEGIN} rule to
@@ -13630,7 +13668,7 @@ rule checks the @code{FNR} and @code{NR} variables.
@node I/O And BEGIN/END
@subsubsection Input/Output from @code{BEGIN} and @code{END} Rules
-@cindex input/output, from @code{BEGIN} and @code{END}
+@cindex input/output @subentry from @code{BEGIN} and @code{END}
There are several (sometimes subtle) points to be aware of when doing I/O
from a @code{BEGIN} or @code{END} rule.
The first has to do with the value of @code{$0} in a @code{BEGIN}
@@ -13643,11 +13681,11 @@ without a variable (@pxref{Getline}).
Another way is simply to assign a value to @code{$0}.
@cindex Brian Kernighan's @command{awk}
-@cindex differences in @command{awk} and @command{gawk},
@code{BEGIN}/@code{END} patterns
-@cindex POSIX @command{awk}, @code{BEGIN}/@code{END} patterns
-@cindex @code{print} statement, @code{BEGIN}/@code{END} patterns and
-@cindex @code{BEGIN} pattern, @code{print} statement and
-@cindex @code{END} pattern, @code{print} statement and
+@cindex differences in @command{awk} and @command{gawk} @subentry
@code{BEGIN}/@code{END} patterns
+@cindex POSIX @command{awk} @subentry @code{BEGIN}/@code{END} patterns
+@cindex @code{print} statement @subentry @code{BEGIN}/@code{END} patterns and
+@cindex @code{BEGIN} pattern @subentry @code{print} statement and
+@cindex @code{END} pattern @subentry @code{print} statement and
The second point is similar to the first, but from the other direction.
Traditionally, due largely to implementation issues, @code{$0} and
@code{NF} were @emph{undefined} inside an @code{END} rule.
@@ -13670,10 +13708,10 @@ this in @code{BEGIN} rules, it is a very bad idea in
@code{END} rules,
at least in @command{gawk}. It is also poor style, because if an empty
line is needed in the output, the program should print one explicitly.
-@cindex @code{next} statement, @code{BEGIN}/@code{END} patterns and
-@cindex @code{nextfile} statement, @code{BEGIN}/@code{END} patterns and
-@cindex @code{BEGIN} pattern, @code{next}/@code{nextfile} statements and
-@cindex @code{END} pattern, @code{next}/@code{nextfile} statements and
+@cindex @code{next} statement @subentry @code{BEGIN}/@code{END} patterns and
+@cindex @code{nextfile} statement @subentry @code{BEGIN}/@code{END} patterns
and
+@cindex @code{BEGIN} pattern @subentry @code{next}/@code{nextfile} statements
and
+@cindex @code{END} pattern @subentry @code{next}/@code{nextfile} statements and
Finally, the @code{next} and @code{nextfile} statements are not allowed
in a @code{BEGIN} rule, because the implicit
read-a-record-and-match-against-the-rules loop has not started yet.
Similarly, those statements
@@ -13690,7 +13728,7 @@ are not valid in an @code{END} rule, because all the
input has been read.
@subsection The @code{BEGINFILE} and @code{ENDFILE} Special Patterns
@cindex @code{BEGINFILE} pattern
@cindex @code{ENDFILE} pattern
-@cindex differences in @command{awk} and @command{gawk},
@code{BEGINFILE}/@code{ENDFILE} patterns
+@cindex differences in @command{awk} and @command{gawk} @subentry
@code{BEGINFILE}/@code{ENDFILE} patterns
This @value{SECTION} describes a @command{gawk}-specific feature.
@@ -13725,9 +13763,9 @@ file named on the command line cannot be opened for
reading. However,
you can bypass the fatal error and move on to the next file on the
command line.
-@cindex @command{gawk}, @code{ERRNO} variable in
-@cindex @code{ERRNO} variable, with @code{BEGINFILE} pattern
-@cindex @code{nextfile} statement, @code{BEGINFILE}/@code{ENDFILE} patterns and
+@cindex @command{gawk} @subentry @code{ERRNO} variable in
+@cindex @code{ERRNO} variable @subentry with @code{BEGINFILE} pattern
+@cindex @code{nextfile} statement @subentry @code{BEGINFILE}/@code{ENDFILE}
patterns and
You do this by checking if the @code{ERRNO} variable is not the empty
string; if so, then @command{gawk} was not able to open the file. In
this case, your program can execute the @code{nextfile} statement
@@ -13754,13 +13792,13 @@ rule is present, the error becomes non-fatal, and
instead @code{ERRNO}
is set. This makes it possible to catch and process I/O errors at the
level of the @command{awk} program.
-@cindex @code{next} statement, @code{BEGINFILE}/@code{ENDFILE} patterns and
+@cindex @code{next} statement @subentry @code{BEGINFILE}/@code{ENDFILE}
patterns and
The @code{next} statement (@pxref{Next Statement}) is not allowed inside
either a @code{BEGINFILE} or an @code{ENDFILE} rule. The @code{nextfile}
statement is allowed only inside a
@code{BEGINFILE} rule, not inside an @code{ENDFILE} rule.
-@cindex @code{getline} statement, @code{BEGINFILE}/@code{ENDFILE} patterns and
+@cindex @code{getline} command @subentry @code{BEGINFILE}/@code{ENDFILE}
patterns and
The @code{getline} statement (@pxref{Getline}) is restricted inside
both @code{BEGINFILE} and @code{ENDFILE}: only redirected
forms of @code{getline} are allowed.
@@ -13795,7 +13833,7 @@ rule to grab it before moving on to the next file.]
@subsection The Empty Pattern
@cindex empty pattern
-@cindex patterns, empty
+@cindex patterns @subentry empty
An empty (i.e., nonexistent) pattern is considered to match @emph{every}
input record. For example, the program:
@@ -13808,8 +13846,8 @@ prints the first field of every record.
@node Using Shell Variables
@section Using Shell Variables in Programs
-@cindex shells, variables
-@cindex @command{awk} programs, shell variables in
+@cindex shells @subentry variables
+@cindex @command{awk} programs @subentry shell variables in
@c @cindex shell and @command{awk} interaction
@command{awk} programs are often used as components in larger
@@ -13819,7 +13857,7 @@ hold a pattern that the @command{awk} program searches
for.
There are two ways to get the value of the shell variable
into the body of the @command{awk} program.
-@cindex shells, quoting
+@cindex shells @subentry quoting
A common method is to use shell quoting to substitute
the variable's value into the program inside the script.
For example, consider the following program:
@@ -13895,12 +13933,12 @@ in outline, an @command{awk} program generally looks
like this:
@dots{}
@end display
-@cindex @code{@{@}} (braces), actions and
-@cindex braces (@code{@{@}}), actions and
-@cindex separators, for statements in actions
-@cindex newlines, separating statements in actions
-@cindex @code{;} (semicolon), separating statements in actions
-@cindex semicolon (@code{;}), separating statements in actions
+@cindex @code{@{@}} (braces) @subentry actions and
+@cindex braces (@code{@{@}}) @subentry actions and
+@cindex separators @subentry for statements in actions
+@cindex newlines @subentry separating statements in actions
+@cindex @code{;} (semicolon) @subentry separating statements in actions
+@cindex semicolon (@code{;}) @subentry separating statements in actions
An action consists of one or more @command{awk} @dfn{statements}, enclosed
in braces (@samp{@{@r{@dots{}}@}}). Each statement specifies one
thing to do. The statements are separated by newlines or semicolons.
@@ -13917,7 +13955,7 @@ well. An omitted action is equivalent to @samp{@{
print $0 @}}:
The following types of statements are supported in @command{awk}:
@table @asis
-@cindex side effects, statements
+@cindex side effects @subentry statements
@item Expressions
Call functions or assign values to variables
(@pxref{Expressions}). Executing
@@ -13956,21 +13994,21 @@ For deleting array elements.
@node Statements
@section Control Statements in Actions
@cindex control statements
-@cindex statements, control, in actions
-@cindex actions, control statements in
+@cindex statements @subentry control, in actions
+@cindex actions @subentry control statements in
@dfn{Control statements}, such as @code{if}, @code{while}, and so on,
control the flow of execution in @command{awk} programs. Most of
@command{awk}'s
control statements are patterned after similar statements in C.
-@cindex compound statements@comma{} control statements and
-@cindex statements, compound@comma{} control statements and
-@cindex body, in actions
-@cindex @code{@{@}} (braces), statements, grouping
-@cindex braces (@code{@{@}}), statements, grouping
-@cindex newlines, separating statements in actions
-@cindex @code{;} (semicolon), separating statements in actions
-@cindex semicolon (@code{;}), separating statements in actions
+@cindex compound statements, control statements and
+@cindex statements @subentry compound, control statements and
+@cindex body @subentry in actions
+@cindex @code{@{@}} (braces) @subentry statements, grouping
+@cindex braces (@code{@{@}}) @subentry statements, grouping
+@cindex newlines @subentry separating statements in actions
+@cindex @code{;} (semicolon) @subentry separating statements in actions
+@cindex semicolon (@code{;}) @subentry separating statements in actions
All the control statements start with special keywords, such as @code{if}
and @code{while}, to distinguish them from simple expressions.
Many control statements contain other statements. For example, the
@@ -14052,8 +14090,8 @@ the first thing on its line.
@subsection The @code{while} Statement
@cindex @code{while} statement
@cindex loops
-@cindex loops, @code{while}
-@cindex loops, See Also @code{while} statement
+@cindex loops @subentry @code{while}
+@cindex loops @seealso{@code{while} statement}
In programming, a @dfn{loop} is a part of a program that can
be executed two or more times in succession.
@@ -14066,7 +14104,7 @@ while (@var{condition})
@var{body}
@end example
-@cindex body, in loops
+@cindex body @subentry in loops
@noindent
@var{body} is a statement called the @dfn{body} of the loop,
and @var{condition} is an expression that controls how long the loop
@@ -14114,7 +14152,7 @@ program is harder to read without it.
@node Do Statement
@subsection The @code{do}-@code{while} Statement
@cindex @code{do}-@code{while} statement
-@cindex loops, @code{do}-@code{while}
+@cindex loops @subentry @code{do}-@code{while}
The @code{do} loop is a variation of the @code{while} looping statement.
The @code{do} loop executes the @var{body} once and then repeats the
@@ -14160,7 +14198,7 @@ occasionally is there a real use for a @code{do}
statement.
@node For Statement
@subsection The @code{for} Statement
@cindex @code{for} statement
-@cindex loops, @code{for}, iterative
+@cindex loops @subentry @code{for} @subentry iterative
The @code{for} statement makes it more convenient to count iterations of a
loop. The general form of the @code{for} statement looks like this:
@@ -14235,7 +14273,7 @@ while (@var{condition}) @{
@}
@end example
-@cindex loops, @code{continue} statements and
+@cindex loops @subentry @code{continue} statement and
@noindent
The only exception is when the @code{continue} statement
(@pxref{Continue Statement}) is used
@@ -14337,8 +14375,8 @@ described in @ref{Getopt Function}.)
@node Break Statement
@subsection The @code{break} Statement
@cindex @code{break} statement
-@cindex loops, exiting
-@cindex loops, @code{break} statement and
+@cindex loops @subentry exiting
+@cindex loops @subentry @code{break} statement and
The @code{break} statement jumps out of the innermost @code{for},
@code{while}, or @code{do} loop that encloses it. The following example
@@ -14399,9 +14437,9 @@ This is discussed in @ref{Switch Statement}.
@c @cindex @code{break}, outside of loops
@c @cindex historical features
@c @cindex @command{awk} language, POSIX version
-@cindex POSIX @command{awk}, @code{break} statement and
-@cindex dark corner, @code{break} statement
-@cindex @command{gawk}, @code{break} statement in
+@cindex POSIX @command{awk} @subentry @code{break} statement and
+@cindex dark corner @subentry @code{break} statement
+@cindex @command{gawk} @subentry @code{break} statement in
@cindex Brian Kernighan's @command{awk}
The @code{break} statement has no meaning when
used outside the body of a loop or @code{switch}.
@@ -14465,9 +14503,9 @@ the increment (@samp{x++}) is never reached.
@c @cindex @code{continue}, outside of loops
@c @cindex historical features
@c @cindex @command{awk} language, POSIX version
-@cindex POSIX @command{awk}, @code{continue} statement and
-@cindex dark corner, @code{continue} statement
-@cindex @command{gawk}, @code{continue} statement in
+@cindex POSIX @command{awk} @subentry @code{continue} statement and
+@cindex dark corner @subentry @code{continue} statement
+@cindex @command{gawk} @subentry @code{continue} statement in
@cindex Brian Kernighan's @command{awk}
The @code{continue} statement has no special meaning with respect to the
@code{switch} statement, nor does it have any meaning when used outside the
@@ -14500,7 +14538,7 @@ Contrast this with the effect of the @code{getline}
function
flow of control in any way (i.e., the rest of the current action executes
with a new input record).
-@cindex @command{awk} programs, execution of
+@cindex @command{awk} programs @subentry execution of
At the highest level, @command{awk} program execution is a loop that reads
an input record and then tests each rule's pattern against it. If you
think of this loop as a @code{for} statement whose body contains the
@@ -14535,13 +14573,13 @@ then the code in any @code{END} rules is executed.
The @code{next} statement is not allowed inside @code{BEGINFILE} and
@code{ENDFILE} rules. @xref{BEGINFILE/ENDFILE}.
-@c @cindex @command{awk} language, POSIX version
@c @cindex @code{next}, inside a user-defined function
-@cindex @code{BEGIN} pattern, @code{next}/@code{nextfile} statements and
-@cindex @code{END} pattern, @code{next}/@code{nextfile} statements and
-@cindex POSIX @command{awk}, @code{next}/@code{nextfile} statements and
-@cindex @code{next} statement, user-defined functions and
-@cindex functions, user-defined, @code{next}/@code{nextfile} statements and
+@cindex @command{awk} @subentry language, POSIX version
+@cindex @code{BEGIN} pattern @subentry @code{next}/@code{nextfile} statements
and
+@cindex @code{END} pattern @subentry @code{next}/@code{nextfile} statements and
+@cindex POSIX @command{awk} @subentry @code{next}/@code{nextfile} statements
and
+@cindex @code{next} statement @subentry user-defined functions and
+@cindex functions @subentry user-defined @subentry @code{next}/@code{nextfile}
statements and
According to the POSIX standard, the behavior is undefined if the
@code{next} statement is used in a @code{BEGIN} or @code{END} rule.
@command{gawk} treats it as a syntax error. Although POSIX does not disallow
it,
@@ -14604,8 +14642,8 @@ inclusion into the POSIX standard.
See @uref{http://austingroupbugs.net/view.php?id=607, the Austin Group
website}.
@end quotation
-@cindex functions, user-defined, @code{next}/@code{nextfile} statements and
-@cindex @code{nextfile} statement, user-defined functions and
+@cindex functions @subentry user-defined @subentry @code{next}/@code{nextfile}
statements and
+@cindex @code{nextfile} statement @subentry user-defined functions and
@cindex Brian Kernighan's @command{awk}
@cindex @command{mawk} utility
The current version of BWK @command{awk} and @command{mawk}
@@ -14627,8 +14665,8 @@ is ignored. The @code{exit} statement is written as
follows:
@code{exit} [@var{return code}]
@end display
-@cindex @code{BEGIN} pattern, @code{exit} statement and
-@cindex @code{END} pattern, @code{exit} statement and
+@cindex @code{BEGIN} pattern @subentry @code{exit} statement and
+@cindex @code{END} pattern @subentry @code{exit} statement and
When an @code{exit} statement is executed from a @code{BEGIN} rule, the
program stops processing everything immediately. No input records are
read. However, if an @code{END} rule is present,
@@ -14651,7 +14689,7 @@ the @code{END} rule.
@xref{Assert Function}
for an example that does this.
-@cindex dark corner, @code{exit} statement
+@cindex dark corner @subentry @code{exit} statement
If an argument is supplied to @code{exit}, its value is used as the exit
status code for the @command{awk} process. If no argument is supplied,
@code{exit} causes @command{awk} to return a ``success'' status.
@@ -14661,7 +14699,7 @@ called a second time from an @code{END} rule with no
argument,
@command{awk} uses the previously supplied exit value. @value{DARKCORNER}
@xref{Exit Status} for more information.
-@cindex programming conventions, @code{exit} statement
+@cindex programming conventions @subentry @code{exit} statement
For example, suppose an error condition occurs that is difficult or
impossible to handle. Conventionally, programs report this by
exiting with a nonzero status. An @command{awk} program can do this
@@ -14693,7 +14731,7 @@ results across different operating systems.
@node Built-in Variables
@section Predefined Variables
@cindex predefined variables
-@cindex variables, predefined
+@cindex variables @subentry predefined
Most @command{awk} variables are available to use for your own
purposes; they never change unless your program assigns values to
@@ -14704,7 +14742,7 @@ to tell @command{awk} how to do certain things. Others
are set
automatically by @command{awk}, so that they carry information from the
internal workings of @command{awk} to your program.
-@cindex @command{gawk}, predefined variables and
+@cindex @command{gawk} @subentry predefined variables and
This @value{SECTION} documents all of @command{gawk}'s predefined variables,
most of which are also documented in the @value{CHAPTER}s describing
their areas of activity.
@@ -14719,7 +14757,7 @@ their areas of activity.
@node User-modified
@subsection Built-in Variables That Control @command{awk}
-@cindex predefined variables, user-modifiable
+@cindex predefined variables @subentry user-modifiable
@cindex user-modifiable variables
The following is an alphabetical list of variables that you can change to
@@ -14734,8 +14772,8 @@ in the description of each variable.)
@table @code
@cindex @code{BINMODE} variable
@cindex binary input/output
-@cindex input/output, binary
-@cindex differences in @command{awk} and @command{gawk}, @code{BINMODE}
variable
+@cindex input/output @subentry binary
+@cindex differences in @command{awk} and @command{gawk} @subentry
@code{BINMODE} variable
@item BINMODE #
On non-POSIX systems, this variable specifies use of binary mode
for all I/O. Numeric values of one, two, or three specify that input
@@ -14751,9 +14789,9 @@ detail in @ref{PC Using}. @command{mawk} (@pxref{Other
Versions})
also supports this variable, but only using numeric values.
@cindex @code{CONVFMT} variable
-@cindex POSIX @command{awk}, @code{CONVFMT} variable and
-@cindex numbers, converting, to strings
-@cindex strings, converting, numbers to
+@cindex POSIX @command{awk} @subentry @code{CONVFMT} variable and
+@cindex numbers @subentry converting @subentry to strings
+@cindex strings @subentry converting @subentry numbers to
@item @code{CONVFMT}
A string that controls the conversion of numbers to
strings (@pxref{Conversion}).
@@ -14763,11 +14801,11 @@ It works by being passed, in effect, as the first
argument to the
Its default value is @code{"%.6g"}.
@code{CONVFMT} was introduced by the POSIX standard.
-@cindex @command{gawk}, @code{FIELDWIDTHS} variable in
+@cindex @command{gawk} @subentry @code{FIELDWIDTHS} variable in
@cindex @code{FIELDWIDTHS} variable
-@cindex differences in @command{awk} and @command{gawk}, @code{FIELDWIDTHS}
variable
-@cindex field separators, @code{FIELDWIDTHS} variable and
-@cindex separators, field, @code{FIELDWIDTHS} variable and
+@cindex differences in @command{awk} and @command{gawk} @subentry
@code{FIELDWIDTHS} variable
+@cindex field separator @subentry @code{FIELDWIDTHS} variable and
+@cindex separators @subentry field @subentry @code{FIELDWIDTHS} variable and
@item FIELDWIDTHS #
A space-separated list of columns that tells @command{gawk}
how to split input with fixed columnar boundaries.
@@ -14778,11 +14816,11 @@ Assigning a value to @code{FIELDWIDTHS}
overrides the use of @code{FS} and @code{FPAT} for field splitting.
@xref{Constant Size} for more information.
-@cindex @command{gawk}, @code{FPAT} variable in
+@cindex @command{gawk} @subentry @code{FPAT} variable in
@cindex @code{FPAT} variable
-@cindex differences in @command{awk} and @command{gawk}, @code{FPAT} variable
-@cindex field separators, @code{FPAT} variable and
-@cindex separators, field, @code{FPAT} variable and
+@cindex differences in @command{awk} and @command{gawk} @subentry @code{FPAT}
variable
+@cindex field separator @subentry @code{FPAT} variable and
+@cindex separators @subentry field @subentry @code{FPAT} variable and
@item FPAT #
A regular expression (as a string) that tells @command{gawk}
to create the fields based on text that matches the regular expression.
@@ -14791,8 +14829,8 @@ overrides the use of @code{FS} and @code{FIELDWIDTHS}
for field splitting.
@xref{Splitting By Content} for more information.
@cindex @code{FS} variable
-@cindex separators, field
-@cindex field separators
+@cindex separators @subentry field
+@cindex field separator
@item FS
The input field separator (@pxref{Field Separators}).
The value is a single-character string or a multicharacter regular
@@ -14817,19 +14855,19 @@ You can set the value of @code{FS} on the command
line using the
awk -F, '@var{program}' @var{input-files}
@end example
-@cindex @command{gawk}, field separators and
+@cindex @command{gawk} @subentry field separators and
If @command{gawk} is using @code{FIELDWIDTHS} or @code{FPAT}
for field splitting,
assigning a value to @code{FS} causes @command{gawk} to return to
the normal, @code{FS}-based field splitting. An easy way to do this
is to simply say @samp{FS = FS}, perhaps with an explanatory comment.
-@cindex @command{gawk}, @code{IGNORECASE} variable in
+@cindex @command{gawk} @subentry @code{IGNORECASE} variable in
@cindex @code{IGNORECASE} variable
-@cindex differences in @command{awk} and @command{gawk}, @code{IGNORECASE}
variable
-@cindex case sensitivity, string comparisons and
-@cindex case sensitivity, regexps and
-@cindex regular expressions, case sensitivity
+@cindex differences in @command{awk} and @command{gawk} @subentry
@code{IGNORECASE} variable
+@cindex case sensitivity @subentry string comparisons and
+@cindex case sensitivity @subentry regexps and
+@cindex regular expressions @subentry case sensitivity
@item IGNORECASE #
If @code{IGNORECASE} is nonzero or non-null, then all string comparisons
and all regular expression matching are case-independent.
@@ -14844,9 +14882,9 @@ and it does not affect field splitting when using a
single-character
field separator.
@xref{Case-sensitivity}.
-@cindex @command{gawk}, @code{LINT} variable in
+@cindex @command{gawk} @subentry @code{LINT} variable in
@cindex @code{LINT} variable
-@cindex differences in @command{awk} and @command{gawk}, @code{LINT} variable
+@cindex differences in @command{awk} and @command{gawk} @subentry @code{LINT}
variable
@cindex lint checking
@item LINT #
When this variable is true (nonzero or non-null), @command{gawk}
@@ -14868,8 +14906,8 @@ of lint warnings during program execution is
independent of the flavor
of @command{awk} being executed.
@cindex @code{OFMT} variable
-@cindex numbers, converting, to strings
-@cindex strings, converting, numbers to
+@cindex numbers @subentry converting @subentry to strings
+@cindex strings @subentry converting @subentry numbers to
@item OFMT
A string that controls conversion of numbers to
strings (@pxref{Conversion}) for
@@ -14880,10 +14918,10 @@ Its default value is @code{"%.6g"}. Earlier versions
of @command{awk}
used @code{OFMT} to specify the format for converting numbers to
strings in general expressions; this is now done by @code{CONVFMT}.
-@cindex @code{print} statement, @code{OFMT} variable and
+@cindex @code{print} statement @subentry @code{OFMT} variable and
@cindex @code{OFS} variable
-@cindex separators, field
-@cindex field separators
+@cindex separators @subentry field
+@cindex field separator
@item OFS
The output field separator (@pxref{Output Separators}). It is
output between the fields printed by a @code{print} statement. Its
@@ -14907,7 +14945,7 @@ numbers, by default @code{"N"} (@code{roundTiesToEven}
in
the IEEE 754 standard; @pxref{Setting the rounding mode}).
@cindex @code{RS} variable
-@cindex separators, for records
+@cindex separators @subentry for records
@cindex record separators
@item @code{RS}
The input record separator. Its default value is a string
@@ -14927,7 +14965,7 @@ or if @command{gawk} is in compatibility mode
just the first character of @code{RS}'s value is used.
@cindex @code{SUBSEP} variable
-@cindex separators, subscript
+@cindex separators @subentry subscript
@cindex subscript separators
@item @code{SUBSEP}
The subscript separator. It has the default value of
@@ -14936,10 +14974,10 @@ multidimensional array. Thus, the expression
@samp{@w{foo["A", "B"]}}
really accesses @code{foo["A\034B"]}
(@pxref{Multidimensional}).
-@cindex @command{gawk}, @code{TEXTDOMAIN} variable in
+@cindex @command{gawk} @subentry @code{TEXTDOMAIN} variable in
@cindex @code{TEXTDOMAIN} variable
-@cindex differences in @command{awk} and @command{gawk}, @code{TEXTDOMAIN}
variable
-@cindex internationalization, localization
+@cindex differences in @command{awk} and @command{gawk} @subentry
@code{TEXTDOMAIN} variable
+@cindex internationalization @subentry localization
@item TEXTDOMAIN #
Used for internationalization of programs at the
@command{awk} level. It sets the default text domain for specially
@@ -14952,8 +14990,8 @@ The default value of @code{TEXTDOMAIN} is
@code{"messages"}.
@node Auto-set
@subsection Built-in Variables That Convey Information
-@cindex predefined variables, conveying information
-@cindex variables, predefined, conveying information
+@cindex predefined variables @subentry conveying information
+@cindex variables @subentry predefined @subentry conveying information
The following is an alphabetical list of variables that @command{awk}
sets automatically on certain occasions in order to provide
information to your program.
@@ -14966,8 +15004,8 @@ mode (@pxref{Options}), they are not special:
@c @asis for docbook
@table @asis
@cindex @code{ARGC}/@code{ARGV} variables
-@cindex arguments, command-line
-@cindex command line, arguments
+@cindex arguments @subentry command-line
+@cindex command line @subentry arguments
@item @code{ARGC}, @code{ARGV}
The command-line arguments available to @command{awk} programs are stored in
an array called @code{ARGV}. @code{ARGC} is the number of command-line
@@ -14995,12 +15033,12 @@ contains @samp{inventory-shipped}, and @code{ARGV[2]}
contains
index of the last element in @code{ARGV}, because the elements are numbered
from zero.
-@cindex programming conventions, @code{ARGC}/@code{ARGV} variables
+@cindex programming conventions @subentry @code{ARGC}/@code{ARGV} variables
The names @code{ARGC} and @code{ARGV}, as well as the convention of indexing
the array from 0 to @code{ARGC} @minus{} 1, are derived from the C language's
method of accessing command-line arguments.
-@cindex dark corner, value of @code{ARGV[0]}
+@cindex dark corner @subentry value of @code{ARGV[0]}
The value of @code{ARGV[0]} can vary from system to system.
Also, you should note that the program text is @emph{not} included in
@code{ARGV}, nor are any of @command{awk}'s command-line options.
@@ -15009,7 +15047,7 @@ about how @command{awk} uses these variables.
@value{DARKCORNER}
@cindex @code{ARGIND} variable
-@cindex differences in @command{awk} and @command{gawk}, @code{ARGIND} variable
+@cindex differences in @command{awk} and @command{gawk} @subentry
@code{ARGIND} variable
@item @code{ARGIND #}
The index in @code{ARGV} of the current file being processed.
Every time @command{gawk} opens a new @value{DF} for processing, it sets
@@ -15017,18 +15055,18 @@ Every time @command{gawk} opens a new @value{DF} for
processing, it sets
When @command{gawk} is processing the input files,
@samp{FILENAME == ARGV[ARGIND]} is always true.
-@cindex files, processing@comma{} @code{ARGIND} variable and
+@cindex files @subentry processing, @code{ARGIND} variable and
This variable is useful in file processing; it allows you to tell how far
along you are in the list of @value{DF}s as well as to distinguish between
successive instances of the same @value{FN} on the command line.
-@cindex file names, distinguishing
+@cindex file names @subentry distinguishing
While you can change the value of @code{ARGIND} within your @command{awk}
program, @command{gawk} automatically sets it to a new value when it
opens the next file.
@cindex @code{ENVIRON} array
-@cindex environment variables, in @code{ENVIRON} array
+@cindex environment variables @subentry in @code{ENVIRON} array
@item @code{ENVIRON}
An associative array containing the values of the environment. The array
indices are the environment variable names; the elements are the values of
@@ -15064,10 +15102,10 @@ On such systems, the @code{ENVIRON} array is empty
(except for
@pxref{AWKLIBPATH Variable}).
@end ifnotdocbook
-@cindex @command{gawk}, @code{ERRNO} variable in
+@cindex @command{gawk} @subentry @code{ERRNO} variable in
@cindex @code{ERRNO} variable
-@cindex differences in @command{awk} and @command{gawk}, @code{ERRNO} variable
-@cindex error handling, @code{ERRNO} variable and
+@cindex differences in @command{awk} and @command{gawk} @subentry @code{ERRNO}
variable
+@cindex error handling @subentry @code{ERRNO} variable and
@item @code{ERRNO #}
If a system error occurs during a redirection for @code{getline}, during
a read for @code{getline}, or during a @code{close()} operation, then
@@ -15090,7 +15128,7 @@ of @code{errno}. For non-system errors,
@code{PROCINFO["errno"]} will
be zero.
@cindex @code{FILENAME} variable
-@cindex dark corner, @code{FILENAME} variable
+@cindex dark corner @subentry @code{FILENAME} variable
@item @code{FILENAME}
The name of the current input file. When no @value{DF}s are listed
on the command line, @command{awk} reads from the standard input and
@@ -15124,8 +15162,8 @@ to @code{NF} can be used to create fields in or remove
fields from the
current record. @xref{Changing Fields}.
@cindex @code{FUNCTAB} array
-@cindex @command{gawk}, @code{FUNCTAB} array in
-@cindex differences in @command{awk} and @command{gawk}, @code{FUNCTAB}
variable
+@cindex @command{gawk} @subentry @code{FUNCTAB} array in
+@cindex differences in @command{awk} and @command{gawk} @subentry
@code{FUNCTAB} variable
@item @code{FUNCTAB #}
An array whose indices and corresponding values are the names of all
the built-in, user-defined, and extension functions in the program.
@@ -15143,9 +15181,9 @@ the beginning of the program's execution
(@pxref{Records}).
@command{awk} increments @code{NR} each time it reads a new record.
-@cindex @command{gawk}, @code{PROCINFO} array in
+@cindex @command{gawk} @subentry @code{PROCINFO} array in
@cindex @code{PROCINFO} array
-@cindex differences in @command{awk} and @command{gawk}, @code{PROCINFO} array
+@cindex differences in @command{awk} and @command{gawk} @subentry
@code{PROCINFO} array
@item @code{PROCINFO #}
The elements of this array provide access to information about the
running @command{awk} program.
@@ -15154,7 +15192,7 @@ are guaranteed to be available:
@table @code
@item PROCINFO["argv"]
-@cindex command line, arguments
+@cindex command line @subentry arguments
The @code{PROCINFO["argv"]} array contains all of the command-line arguments
(after glob expansion and redirection processing on platforms where that must
be done manually by the program) with subscripts ranging from 0 through
@@ -15234,6 +15272,7 @@ while the program runs.
@item PROCINFO["platform"]
@cindex platform running on
+@cindex @code{PROCINFO} array @subentry platform running on
This element gives a string indicating the platform for which
@command{gawk} was compiled. The value will be one of the following:
@@ -15277,8 +15316,8 @@ Assigning a new value to this element changes the
default.
The value of the @code{getuid()} system call.
@item PROCINFO["version"]
-@cindex version of @command{gawk}
-@cindex @command{gawk} version
+@cindex version of @subentry @command{gawk}
+@cindex @command{gawk} @subentry version of
The version of @command{gawk}.
@end table
@@ -15289,10 +15328,10 @@ if your version of @command{gawk} supports
arbitrary-precision arithmetic
@table @code
@item PROCINFO["gmp_version"]
-@cindex version of GNU MP library
+@cindex version of @subentry GNU MP library
The version of the GNU MP library.
-@cindex version of GNU MPFR library
+@cindex version of @subentry GNU MPFR library
@item PROCINFO["mpfr_version"]
The version of the GNU MPFR library.
@@ -15312,8 +15351,8 @@ of @command{gawk} supports dynamic loading of extension
functions
@table @code
@item PROCINFO["api_major"]
-@cindex version of @command{gawk} extension API
-@cindex extension API, version number
+@cindex version of @subentry @command{gawk} extension API
+@cindex extension API @subentry version number
The major version of the extension API.
@item PROCINFO["api_minor"]
@@ -15385,16 +15424,16 @@ The start index in characters of the substring that
is matched by the
is the position of the string where the matched substring starts, or zero
if no match was found.
-@cindex @command{gawk}, @code{RT} variable in
+@cindex @command{gawk} @subentry @code{RT} variable in
@cindex @code{RT} variable
-@cindex differences in @command{awk} and @command{gawk}, @code{RS}/@code{RT}
variables
+@cindex differences in @command{awk} and @command{gawk} @subentry
@code{RS}/@code{RT} variables
@item @code{RT #}
The input text that matched the text denoted by @code{RS},
the record separator. It is set every time a record is read.
-@cindex @command{gawk}, @code{SYMTAB} array in
+@cindex @command{gawk} @subentry @code{SYMTAB} array in
@cindex @code{SYMTAB} array
-@cindex differences in @command{awk} and @command{gawk}, @code{SYMTAB} variable
+@cindex differences in @command{awk} and @command{gawk} @subentry
@code{SYMTAB} variable
@item @code{SYMTAB #}
An array whose indices are the names of all defined global variables and
arrays in the program. @code{SYMTAB} makes @command{gawk}'s symbol table
@@ -15471,9 +15510,9 @@ is available as an element within the @code{SYMTAB}
array.
@end table
@sidebar Changing @code{NR} and @code{FNR}
-@cindex @code{NR} variable, changing
-@cindex @code{FNR} variable, changing
-@cindex dark corner, @code{FNR}/@code{NR} variables
+@cindex @code{NR} variable @subentry changing
+@cindex @code{FNR} variable @subentry changing
+@cindex dark corner @subentry @code{FNR}/@code{NR} variables
@command{awk} increments @code{NR} and @code{FNR}
each time it reads a record, instead of setting them to the absolute
value of the number of records read. This means that a program can
@@ -15504,9 +15543,9 @@ changed.
@node ARGC and ARGV
@subsection Using @code{ARGC} and @code{ARGV}
-@cindex @code{ARGC}/@code{ARGV} variables, how to use
-@cindex arguments, command-line
-@cindex command line, arguments
+@cindex @code{ARGC}/@code{ARGV} variables @subentry how to use
+@cindex arguments @subentry command-line
+@cindex command line @subentry arguments
@ref{Auto-set}
presented the following program describing the information contained in
@code{ARGC}
@@ -15619,7 +15658,7 @@ BEGIN @{
@}
@end example
-@cindex differences in @command{awk} and @command{gawk},
@code{ARGC}/@code{ARGV} variables
+@cindex differences in @command{awk} and @command{gawk} @subentry
@code{ARGC}/@code{ARGV} variables
Ending the @command{awk} options with @option{--} isn't
necessary in @command{gawk}. Unless @option{--posix} has
been specified, @command{gawk} silently puts any unrecognized options
@@ -15835,10 +15874,10 @@ Only the values are stored; the indices are implicit
from the order of
the values. Here, eight is the value at index zero, because eight appears in
the
position with zero elements before it.
-@cindex arrays, indexing
+@cindex arrays @subentry indexing
@cindex indexing arrays
@cindex associative arrays
-@cindex arrays, associative
+@cindex arrays @subentry associative
Arrays in @command{awk} are different---they are @dfn{associative}. This means
that each array is a collection of pairs---an index and its corresponding
array element value:
@@ -15961,7 +16000,7 @@ whose value is @w{@code{"number ten"}}. The result is:
@noindent
@cindex sparse arrays
-@cindex arrays, sparse
+@cindex arrays @subentry sparse
Now the array is @dfn{sparse}, which just means some indices are missing.
It has elements 0--3 and 10, but doesn't have elements 4, 5, 6, 7, 8, or 9.
@@ -16029,10 +16068,10 @@ array subscripts; this is discussed in more detail in
Here, the number @code{1} isn't double-quoted, because @command{awk}
automatically converts it to a string.
-@cindex @command{gawk}, @code{IGNORECASE} variable in
-@cindex case sensitivity, array indices and
-@cindex arrays, @code{IGNORECASE} variable and
-@cindex @code{IGNORECASE} variable, array indices and
+@cindex @command{gawk} @subentry @code{IGNORECASE} variable in
+@cindex case sensitivity @subentry array indices and
+@cindex arrays @subentry @code{IGNORECASE} variable and
+@cindex @code{IGNORECASE} variable @subentry array indices and
The value of @code{IGNORECASE} has no effect upon array subscripting.
The identical string value used to store an array element must be used
to retrieve it.
@@ -16046,9 +16085,9 @@ is independent of the number of elements in the array.
@node Reference to Elements
@subsection Referring to an Array Element
-@cindex arrays, referencing elements
+@cindex arrays @subentry referencing elements
@cindex array members
-@cindex elements of arrays
+@cindex elements in arrays
The principal way to use an array is to refer to one of its elements.
An @dfn{array reference} is an expression as follows:
@@ -16068,7 +16107,7 @@ The value of the array reference is the current value
of that array
element. For example, @code{foo[4.3]} is an expression referencing the element
of array @code{foo} at index @samp{4.3}.
-@cindex arrays, unassigned elements
+@cindex arrays @subentry unassigned elements
@cindex unassigned array elements
@cindex empty array elements
A reference to an array element that has no recorded value yields a value of
@@ -16077,7 +16116,7 @@ that have not been assigned any value as well as
elements that have been
deleted (@pxref{Delete}).
@cindex non-existent array elements
-@cindex arrays, elements that don't exist
+@cindex arrays @subentry elements @subentry that don't exist
@quotation NOTE
A reference to an element that does not exist @emph{automatically} creates
that array element, with the null string as its value. (In some cases,
@@ -16098,7 +16137,7 @@ an array element equal to the empty string.
@end quotation
@c @cindex arrays, @code{in} operator and
-@cindex @code{in} operator, testing if array element exists
+@cindex @code{in} operator @subentry testing if array element exists
To determine whether an element exists in an array at a certain index, use
the following expression:
@@ -16106,7 +16145,7 @@ the following expression:
@var{indx} in @var{array}
@end example
-@cindex side effects, array indexing
+@cindex side effects @subentry array indexing
@noindent
This expression tests whether the particular index @var{indx} exists,
without the side effect of creating that element if it is not present.
@@ -16139,8 +16178,8 @@ if (frequencies[2] != "")
@node Assigning Elements
@subsection Assigning Array Elements
-@cindex arrays, elements, assigning values
-@cindex elements in arrays, assigning values
+@cindex arrays @subentry elements @subentry assigning values
+@cindex elements in arrays @subentry assigning values
Array elements can be assigned values just like
@command{awk} variables:
@@ -16157,7 +16196,7 @@ assign to that element of the array.
@node Array Example
@subsection Basic Array Example
-@cindex arrays, an example of using
+@cindex arrays @subentry example of using
The following program takes a list of lines, each beginning with a line
number, and prints them out in order of line number. The line numbers
@@ -16232,10 +16271,10 @@ END @{
@node Scanning an Array
@subsection Scanning All Elements of an Array
-@cindex elements in arrays, scanning
+@cindex elements in arrays @subentry scanning
@cindex scanning arrays
-@cindex arrays, scanning
-@cindex loops, @code{for}, array scanning
+@cindex arrays @subentry scanning
+@cindex loops @subentry @code{for} @subentry array scanning
In programs that use arrays, it is often necessary to use a loop that
executes once for each element of an array. In other languages, where
@@ -16254,12 +16293,12 @@ for (@var{var} in @var{array})
@end example
@noindent
-@cindex @code{in} operator, use in loops
+@cindex @code{in} operator @subentry use in loops
This loop executes @var{body} once for each index in @var{array} that the
program has previously used, with the variable @var{var} set to that index.
-@cindex arrays, @code{for} statement and
-@cindex @code{for} statement, looping over arrays
+@cindex arrays @subentry @code{for} statement and
+@cindex @code{for} statement @subentry looping over arrays
The following program uses this form of the @code{for} statement. The
first rule scans the input records and notes which words appear (at
least once) in the input, by storing a one into the array @code{used} with
@@ -16297,9 +16336,9 @@ END @{
@xref{Word Sorting}
for a more detailed example of this type.
-@cindex arrays, elements, order of access by @code{in} operator
-@cindex elements in arrays, order of access by @code{in} operator
-@cindex @code{in} operator, order of array access
+@cindex arrays @subentry elements @subentry order of access by @code{in}
operator
+@cindex elements in arrays @subentry order of access by @code{in} operator
+@cindex @code{in} operator @subentry order of array access
The order in which elements of the array are accessed by this statement
is determined by the internal arrangement of the array elements within
@command{awk} and in standard @command{awk} cannot be controlled
@@ -16377,7 +16416,7 @@ to use for comparison of array elements. This advanced
feature
is described later in @ref{Array Sorting}.
@end itemize
-@cindex @code{PROCINFO}, values of @code{sorted_in}
+@cindex @code{PROCINFO} array @subentry values of @code{sorted_in}
The following special values for @code{PROCINFO["sorted_in"]} are available:
@table @code
@@ -16512,11 +16551,11 @@ sorting arrays; see @ref{Array Sorting Functions}.
@node Numeric Array Subscripts
@section Using Numbers to Subscript Arrays
-@cindex numbers, as array subscripts
-@cindex array subscripts, numbers as
-@cindex arrays, numeric subscripts
-@cindex subscripts in arrays, numbers as
-@cindex @code{CONVFMT} variable, array subscripts and
+@cindex numbers @subentry as array subscripts
+@cindex array subscripts @subentry numbers as
+@cindex arrays @subentry numeric subscripts
+@cindex subscripts in arrays @subentry numbers as
+@cindex @code{CONVFMT} variable @subentry array subscripts and
An important aspect to remember about arrays is that @emph{array subscripts
are always strings}. When a numeric value is used as a subscript,
it is converted to a string value before being used for subscripting
@@ -16546,7 +16585,7 @@ string value from @code{xyz}---this time
@code{"12.15"}---because the value of
@code{CONVFMT} only allows two significant digits. This test fails,
because @code{"12.15"} is different from @code{"12.153"}.
-@cindex converting integer array subscripts
+@cindex converting @subentry integer array subscripts to strings
@cindex integer array indices
According to the rules for conversions
(@pxref{Conversion}), integer
@@ -16580,10 +16619,10 @@ effect on your programs.
@node Uninitialized Subscripts
@section Using Uninitialized Variables as Subscripts
-@cindex variables, uninitialized@comma{} as array subscripts
+@cindex variables @subentry uninitialized, as array subscripts
@cindex uninitialized variables, as array subscripts
-@cindex subscripts in arrays, uninitialized variables as
-@cindex arrays, subscripts, uninitialized variables as
+@cindex subscripts in arrays @subentry uninitialized variables as
+@cindex arrays @subentry subscripts, uninitialized variables as
Suppose it's necessary to write a program
to print the input data in reverse order.
A reasonable attempt to do so (with some test
@@ -16627,10 +16666,10 @@ Here, the @samp{++} forces @code{lines} to be
numeric, thus making
the ``old value'' numeric zero. This is then converted to @code{"0"}
as the array subscript.
-@cindex array subscripts, null strings as
-@cindex null strings, as array subscripts
-@cindex dark corner, array subscripts
-@cindex lint checking, array subscripts
+@cindex array subscripts @subentry null string as
+@cindex null strings @subentry as array subscripts
+@cindex dark corner @subentry array subscripts
+@cindex lint checking @subentry array subscripts
Even though it is somewhat unusual, the null string
(@code{""}) is a valid array subscript.
@value{DARKCORNER}
@@ -16641,9 +16680,9 @@ on the command line (@pxref{Options}).
@node Delete
@section The @code{delete} Statement
@cindex @code{delete} statement
-@cindex deleting elements in arrays
-@cindex arrays, elements, deleting
-@cindex elements in arrays, deleting
+@cindex deleting @subentry elements in arrays
+@cindex arrays @subentry elements @subentry deleting
+@cindex elements in arrays @subentry deleting
To remove an individual element of an array, use the @code{delete}
statement:
@@ -16674,7 +16713,7 @@ if (4 in foo)
print "This will never be printed"
@end example
-@cindex null strings, deleting array elements and
+@cindex null strings @subentry deleting array elements and
It is important to note that deleting an element is @emph{not} the
same as assigning it a null value (the empty string, @code{""}).
For example:
@@ -16687,19 +16726,19 @@ if (4 in foo)
@end group
@end example
-@cindex lint checking, array elements
+@cindex lint checking @subentry array subscripts
It is not an error to delete an element that does not exist.
However, if @option{--lint} is provided on the command line
(@pxref{Options}),
@command{gawk} issues a warning message when an element that
is not in the array is deleted.
-@cindex common extensions, @code{delete} to delete entire arrays
-@cindex extensions, common@comma{} @code{delete} to delete entire arrays
-@cindex arrays, deleting entire contents
-@cindex deleting entire arrays
+@cindex common extensions @subentry @code{delete} to delete entire arrays
+@cindex extensions @subentry common @subentry @code{delete} to delete entire
arrays
+@cindex arrays @subentry deleting entire contents
+@cindex deleting @subentry entire arrays
@cindex @code{delete} @var{array}
-@cindex differences in @command{awk} and @command{gawk}, array elements,
deleting
+@cindex differences in @command{awk} and @command{gawk} @subentry array
elements, deleting
All the elements of an array may be deleted with a single statement
by leaving off the subscript in the @code{delete} statement,
as follows:
@@ -16725,7 +16764,7 @@ POSIX standard. See
@uref{http://austingroupbugs.net/view.php?id=544,
the Austin Group website}.
@end quotation
-@cindex portability, deleting array elements
+@cindex portability @subentry deleting array elements
@cindex Brennan, Michael
The following statement provides a portable but nonobvious way to clear
out an array:@footnote{Thanks to Michael Brennan for pointing this out.}
@@ -16734,7 +16773,7 @@ out an array:@footnote{Thanks to Michael Brennan for
pointing this out.}
split("", array)
@end example
-@cindex @code{split()} function, array elements@comma{} deleting
+@cindex @code{split()} function @subentry array elements, deleting
The @code{split()} function
(@pxref{String Functions})
clears out the target array first. This call asks it to split
@@ -16760,8 +16799,8 @@ a = 3
* Multiscanning:: Scanning multidimensional arrays.
@end menu
-@cindex subscripts in arrays, multidimensional
-@cindex arrays, multidimensional
+@cindex subscripts in arrays @subentry multidimensional
+@cindex arrays @subentry multidimensional
A @dfn{multidimensional array} is an array in which an element is identified
by a sequence of indices instead of a single index. For example, a
two-dimensional array requires two indices. The usual way (in many
@@ -16769,7 +16808,7 @@ languages, including @command{awk}) to refer to an
element of a
two-dimensional array named @code{grid} is with
@code{grid[@var{x},@var{y}]}.
-@cindex @code{SUBSEP} variable, multidimensional arrays and
+@cindex @code{SUBSEP} variable @subentry multidimensional arrays and
Multidimensional arrays are supported in @command{awk} through
concatenation of indices into one string.
@command{awk} converts the indices into strings
@@ -16801,7 +16840,7 @@ combined strings that are ambiguous. Suppose that
@code{SUBSEP} is
"b@@c"]}} are indistinguishable because both are actually
stored as @samp{foo["a@@b@@c"]}.
-@cindex @code{in} operator, index existence in multidimensional arrays
+@cindex @code{in} operator @subentry index existence in multidimensional arrays
To test whether a particular index sequence exists in a
multidimensional array, use the same operator (@code{in}) that is
used for single-dimensional arrays. Write the whole sequence of indices
@@ -16870,8 +16909,8 @@ There is no special @code{for} statement for scanning a
multidimensional arrays or elements---there is only a
multidimensional @emph{way of accessing} an array.
-@cindex subscripts in arrays, multidimensional, scanning
-@cindex arrays, multidimensional, scanning
+@cindex subscripts in arrays @subentry multidimensional @subentry scanning
+@cindex arrays @subentry multidimensional @subentry scanning
@cindex scanning multidimensional arrays
However, if your program has an array that is always accessed as
multidimensional, you can get the effect of scanning it by combining
@@ -16914,7 +16953,7 @@ separate indices is recovered.
@node Arrays of Arrays
@section Arrays of Arrays
-@cindex arrays of arrays
+@cindex arrays @subentry arrays of arrays
@command{gawk} goes beyond standard @command{awk}'s multidimensional
array access and provides true arrays of
@@ -17136,7 +17175,7 @@ element is itself a subarray.
@node Functions
@chapter Functions
-@cindex functions, built-in
+@cindex functions @subentry built-in
@cindex built-in functions
This @value{CHAPTER} describes @command{awk}'s built-in functions,
which fall into three categories: numeric, string, and I/O.
@@ -17190,17 +17229,17 @@ the function followed
by arguments in parentheses. For example, @samp{atan2(y + z, 1)}
is a call to the function @code{atan2()} and has two arguments.
-@cindex programming conventions, functions, calling
-@cindex whitespace, functions@comma{} calling
+@cindex programming conventions @subentry functions @subentry calling
+@cindex whitespace @subentry functions, calling
Whitespace is ignored between the built-in function name and the
opening parenthesis, but nonetheless it is good practice to avoid using
whitespace
there. User-defined functions do not permit whitespace in this way, and
it is easier to avoid mistakes by following a simple
convention that always works---no whitespace after a function name.
-@cindex troubleshooting, @command{gawk}, fatal errors@comma{} function
arguments
-@cindex @command{gawk}, function arguments and
-@cindex differences in @command{awk} and @command{gawk}, function arguments
(@command{gawk})
+@cindex troubleshooting @subentry @command{gawk} @subentry fatal errors,
function arguments
+@cindex @command{gawk} @subentry function arguments and
+@cindex differences in @command{awk} and @command{gawk} @subentry function
arguments
Each built-in function accepts a certain number of arguments.
In some cases, arguments can be omitted. The defaults for omitted
arguments vary from function to function and are described under the
@@ -17217,9 +17256,9 @@ i = 4
j = sqrt(i++)
@end example
-@cindex evaluation order, functions
-@cindex functions, built-in, evaluation order
-@cindex built-in functions, evaluation order
+@cindex evaluation order @subentry functions
+@cindex functions @subentry built-in @subentry evaluation order
+@cindex built-in functions @subentry evaluation order
@noindent
the variable @code{i} is incremented to the value five before @code{sqrt()}
is called with a value of four for its actual parameter.
@@ -17241,7 +17280,7 @@ two arguments 11 and 10.
@node Numeric Functions
@subsection Numeric Functions
-@cindex numeric functions
+@cindex numeric @subentry functions
The following list describes all of
the built-in functions that work with numbers.
@@ -17310,7 +17349,7 @@ is negative.
@cindex Beebe, Nelson H.F.@:
@item @code{rand()}
@cindexawkfunc{rand}
-@cindex random numbers, @code{rand()}/@code{srand()} functions
+@cindex random numbers @subentry @code{rand()}/@code{srand()} functions
Return a random number. The values of @code{rand()} are
uniformly distributed between zero and one.
The value could be zero but is never one.@footnote{The C version of
@@ -17356,7 +17395,7 @@ function roll(n) @{ return 1 + int(rand() * n) @}
@end example
@cindex seeding random number generator
-@cindex random numbers, seed of
+@cindex random numbers @subentry seed of
@quotation CAUTION
In most @command{awk} implementations, including @command{gawk},
@code{rand()} starts generating numbers from the same
@@ -17459,7 +17498,7 @@ pound sign (@samp{#}). They are not available in
compatibility mode
@itemx @code{asorti(}@var{source} [@code{,} @var{dest} [@code{,} @var{how} ]
]@code{) #}
@cindexgawkfunc{asorti}
@cindex sort array
-@cindex arrays, elements, retrieving number of
+@cindex arrays @subentry elements @subentry retrieving number of
@cindexgawkfunc{asort}
@cindex sort array indices
These two functions are similar in behavior, so they are described
@@ -17479,7 +17518,7 @@ sequential integers starting with one. If the optional
array @var{dest}
is specified, then @var{source} is duplicated into @var{dest}. @var{dest}
is then sorted, leaving the indices of @var{source} unchanged.
-@cindex @command{gawk}, @code{IGNORECASE} variable in
+@cindex @command{gawk} @subentry @code{IGNORECASE} variable in
When comparing strings, @code{IGNORECASE} affects the sorting
(@pxref{Array Sorting Functions}). If the
@var{source} array contains subarrays as values (@pxref{Arrays of
@@ -17610,7 +17649,7 @@ and the third argument must be assignable.
@item @code{index(@var{in}, @var{find})}
@cindexawkfunc{index}
-@cindex search in string
+@cindex search for substring
@cindex find substring in string
Search the string @var{in} for the first occurrence of the string
@var{find}, and return the position in characters where that occurrence
@@ -17624,7 +17663,7 @@ $ @kbd{awk 'BEGIN @{ print index("peanut", "an") @}'}
@noindent
If @var{find} is not found, @code{index()} returns zero.
-@cindex dark corner, regexp as second argument to @code{index()}
+@cindex dark corner @subentry regexp as second argument to @code{index()}
With BWK @command{awk} and @command{gawk},
it is a fatal error to use a regexp constant for @var{find}.
Other implementations allow it, simply treating the regexp
@@ -17632,7 +17671,7 @@ constant as an expression meaning @samp{$0 ~ /regexp/}.
@value{DARKCORNER}
@item @code{length(}[@var{string}]@code{)}
@cindexawkfunc{length}
-@cindex string length
+@cindex string @subentry length
@cindex length of string
Return the number of characters in @var{string}. If
@var{string} is a number, the length of the digit string representing
@@ -17657,8 +17696,8 @@ three characters.
If no argument is supplied, @code{length()} returns the length of @code{$0}.
@c @cindex historical features
-@cindex portability, @code{length()} function
-@cindex POSIX @command{awk}, functions and, @code{length()}
+@cindex portability @subentry @code{length()} function
+@cindex POSIX @command{awk} @subentry functions and @subentry @code{length()}
@quotation NOTE
In older versions of @command{awk}, the @code{length()} function could
be called
@@ -17668,7 +17707,7 @@ support historical practice. For programs to be
maximally portable,
always supply the parentheses.
@end quotation
-@cindex dark corner, @code{length()} function
+@cindex dark corner @subentry @code{length()} function
If @code{length()} is called with a variable that has not been used,
@command{gawk} forces the variable to be a scalar. Other
implementations of @command{awk} leave the variable without a type.
@@ -17689,11 +17728,11 @@ If @option{--lint} has
been specified on the command line, @command{gawk} issues a
warning about this.
-@cindex common extensions, @code{length()} applied to an array
-@cindex extensions, common@comma{} @code{length()} applied to an array
-@cindex differences in @command{awk} and @command{gawk}, @code{length()}
function
+@cindex common extensions @subentry @code{length()} applied to an array
+@cindex extensions @subentry common @subentry @code{length()} applied to an
array
+@cindex differences in @command{awk} and @command{gawk} @subentry
@code{length()} function
@cindex number of array elements
-@cindex array, number of elements
+@cindex arrays @subentry number of elements
With @command{gawk} and several other @command{awk} implementations, when
given an
array argument, the @code{length()} function returns the number of elements
in the array. @value{COMMONEXT}
@@ -17708,7 +17747,7 @@ If @option{--posix} is supplied, using an array
argument is a fatal error
@item @code{match(@var{string}, @var{regexp}} [@code{, @var{array}}]@code{)}
@cindexawkfunc{match}
-@cindex string, regular expression match
+@cindex string @subentry regular expression match of
@cindex match regexp in string
Search @var{string} for the
longest, leftmost substring matched by the regular expression
@@ -17729,9 +17768,11 @@ functions that work with regular expressions, such as
for @code{match()}, the order is the same as for the @samp{~} operator:
@samp{@var{string} ~ @var{regexp}}.
-@cindex @code{RSTART} variable, @code{match()} function and
-@cindex @code{RLENGTH} variable, @code{match()} function and
-@cindex @code{match()} function, @code{RSTART}/@code{RLENGTH} variables
+@cindex @code{RSTART} variable @subentry @code{match()} function and
+@cindex @code{RLENGTH} variable @subentry @code{match()} function and
+@cindex @code{match()} function @subentry @code{RSTART}/@code{RLENGTH}
variables
+@cindex @code{match()} function @subentry side effects
+@cindex side effects @subentry @code{match()} function
The @code{match()} function sets the predefined variable @code{RSTART} to
the index. It also sets the predefined variable @code{RLENGTH} to the
length in characters of the matched substring. If no match is found,
@@ -17779,7 +17820,7 @@ Match of ru+n found at 12 in My program runs
Match of Melvin found at 1 in Melvin was here.
@end example
-@cindex differences in @command{awk} and @command{gawk}, @code{match()}
function
+@cindex differences in @command{awk} and @command{gawk} @subentry
@code{match()} function
If @var{array} is present, it is cleared, and then the zeroth element
of @var{array} is set to the entire portion of @var{string}
matched by @var{regexp}. If @var{regexp} contains parentheses,
@@ -17816,7 +17857,7 @@ subexpression, because they may not all have matched
text; thus, they
should be tested for with the @code{in} operator
(@pxref{Reference to Elements}).
-@cindex troubleshooting, @code{match()} function
+@cindex troubleshooting @subentry @code{match()} function
The @var{array} argument to @code{match()} is a
@command{gawk} extension. In compatibility mode
(@pxref{Options}),
@@ -17879,7 +17920,7 @@ split("cul-de-sac", a, "-", seps)
@end example
@noindent
-@cindex strings splitting, example
+@cindex strings @subentry splitting, example
splits the string @code{"cul-de-sac"} into three fields using @samp{-} as the
separator. It sets the contents of the array @code{a} as follows:
@@ -17899,7 +17940,7 @@ seps[2] = "-"
@noindent
The value returned by this call to @code{split()} is three.
-@cindex differences in @command{awk} and @command{gawk}, @code{split()}
function
+@cindex differences in @command{awk} and @command{gawk} @subentry
@code{split()} function
As with input field-splitting, when the value of @var{fieldsep} is
@w{@code{" "}}, leading and trailing whitespace is ignored in values assigned
to
the elements of
@@ -17915,7 +17956,7 @@ Note, however, that @code{RS} has no effect on the way
@code{split()}
works. Even though @samp{RS = ""} causes the newline character to also be an
input
field separator, this does not affect how @code{split()} splits strings.
-@cindex dark corner, @code{split()} function
+@cindex dark corner @subentry @code{split()} function
Modern implementations of @command{awk}, including @command{gawk}, allow
the third argument to be a regexp constant (@w{@code{/}@dots{}@code{/}})
as well as a string. @value{DARKCORNER}
@@ -17935,11 +17976,12 @@ If @var{string} does not match @var{fieldsep} at all
(but is not null),
@var{array} has one element only. The value of that element is the original
@var{string}.
+@cindex POSIX mode
In POSIX mode (@pxref{Options}), the fourth argument is not allowed.
@item @code{sprintf(@var{format}, @var{expression1}, @dots{})}
@cindexawkfunc{sprintf}
-@cindex formatting strings
+@cindex formatting @subentry strings
Return (without printing) the string that @code{printf} would
have printed out with the same arguments
(@pxref{Printf}).
@@ -17953,7 +17995,7 @@ pival = sprintf("pi = %.2f (approx.)", 22/7)
assigns the string @w{@samp{pi = 3.14 (approx.)}} to the variable @code{pival}.
@cindexgawkfunc{strtonum}
-@cindex convert string to number
+@cindex converting @subentry string to numbers
@item @code{strtonum(@var{str}) #}
Examine @var{str} and return its numeric value. If @var{str}
begins with a leading @samp{0}, @code{strtonum()} assumes that @var{str}
@@ -18052,8 +18094,10 @@ an @samp{&}:
@{ sub(/\|/, "\\&"); print @}
@end example
-@cindex @code{sub()} function, arguments of
-@cindex @code{gsub()} function, arguments of
+@cindex @code{sub()} function @subentry arguments of
+@cindex @code{gsub()} function @subentry arguments of
+@cindex side effects @subentry @code{sub()} function
+@cindex side effects @subentry @code{gsub()} function
As mentioned, the third argument to @code{sub()} must
be a variable, field, or array element.
Some versions of @command{awk} allow the third argument to
@@ -18068,7 +18112,7 @@ sub(/USA/, "United States", "the USA and Canada")
@end example
@noindent
-@cindex troubleshooting, @code{gsub()}/@code{sub()} functions
+@cindex troubleshooting @subentry @code{gsub()}/@code{sub()} functions
For historical compatibility, @command{gawk} accepts such erroneous code.
However, using any other nonchangeable
object as the third parameter causes a fatal error and your program
@@ -18103,7 +18147,7 @@ in the string, @code{substr()} returns the null string.
Similarly, if @var{length} is present but less than or equal to zero,
the null string is returned.
-@cindex troubleshooting, @code{substr()} function
+@cindex troubleshooting @subentry @code{substr()} function
The string returned by @code{substr()} @emph{cannot} be
assigned. Thus, it is a mistake to attempt to change a portion of
a string, as shown in the following example:
@@ -18122,7 +18166,7 @@ of @code{sub()} or @code{gsub()}:
gsub(/xyz/, "pdq", substr($0, 5, 20)) # WRONG
@end example
-@cindex portability, @code{substr()} function
+@cindex portability @subentry @code{substr()} function
(Some commercial versions of @command{awk} treat
@code{substr()} as assignable, but doing so is not portable.)
@@ -18135,11 +18179,11 @@ string = "abcdef"
string = substr(string, 1, 2) "CDE" substr(string, 6)
@end example
-@cindex case sensitivity, converting case
-@cindex strings, converting letter case
+@cindex case sensitivity @subentry converting case
+@cindex strings @subentry converting letter case
@item @code{tolower(@var{string})}
@cindexawkfunc{tolower}
-@cindex convert string to lower case
+@cindex converting @subentry string to lower case
Return a copy of @var{string}, with each uppercase character
in the string replaced with its corresponding lowercase character.
Nonalphabetic characters are left unchanged. For example,
@@ -18147,7 +18191,7 @@ Nonalphabetic characters are left unchanged. For
example,
@item @code{toupper(@var{string})}
@cindexawkfunc{toupper}
-@cindex convert string to upper case
+@cindex converting @subentry string to upper case
Return a copy of @var{string}, with each lowercase character
in the string replaced with its corresponding uppercase character.
Nonalphabetic characters are left unchanged. For example,
@@ -18155,10 +18199,10 @@ Nonalphabetic characters are left unchanged. For
example,
@end table
@sidebar Matching the Null String
-@cindex matching, null strings
-@cindex null strings, matching
-@cindex @code{*} (asterisk), @code{*} operator, null strings@comma{} matching
-@cindex asterisk (@code{*}), @code{*} operator, null strings@comma{} matching
+@cindex matching @subentry null strings
+@cindex null strings @subentry matching
+@cindex @code{*} (asterisk) @subentry @code{*} operator @subentry null
strings, matching
+@cindex asterisk (@code{*}) @subentry @code{*} operator @subentry null
strings, matching
In @command{awk}, the @samp{*} operator can match the null string.
This is particularly important for the @code{sub()}, @code{gsub()},
@@ -18177,14 +18221,14 @@ Although this makes a certain amount of sense, it can
be surprising.
@node Gory Details
@subsubsection More about @samp{\} and @samp{&} with @code{sub()},
@code{gsub()}, and @code{gensub()}
-@cindex escape processing, @code{gsub()}/@code{gensub()}/@code{sub()} functions
-@cindex @code{sub()} function, escape processing
-@cindex @code{gsub()} function, escape processing
-@cindex @code{gensub()} function (@command{gawk}), escape processing
-@cindex @code{\} (backslash), @code{gsub()}/@code{gensub()}/@code{sub()}
functions and
-@cindex backslash (@code{\}), @code{gsub()}/@code{gensub()}/@code{sub()}
functions and
-@cindex @code{&} (ampersand), @code{gsub()}/@code{gensub()}/@code{sub()}
functions and
-@cindex ampersand (@code{&}), @code{gsub()}/@code{gensub()}/@code{sub()}
functions and
+@cindex escape processing @subentry @code{gsub()}/@code{gensub()}/@code{sub()}
functions
+@cindex @code{sub()} function @subentry escape processing
+@cindex @code{gsub()} function @subentry escape processing
+@cindex @code{gensub()} function (@command{gawk}) @subentry escape processing
+@cindex @code{\} (backslash) @subentry
@code{gsub()}/@code{gensub()}/@code{sub()} functions and
+@cindex backslash (@code{\}) @subentry
@code{gsub()}/@code{gensub()}/@code{sub()} functions and
+@cindex @code{&} (ampersand) @subentry
@code{gsub()}/@code{gensub()}/@code{sub()} functions and
+@cindex ampersand (@code{&}) @subentry
@code{gsub()}/@code{gensub()}/@code{sub()} functions and
@quotation CAUTION
This subsubsection has been reported to cause headaches.
@@ -18350,7 +18394,7 @@ was expected. In addition, the @command{gawk}
maintainer's proposal was
lost during the standardization process. The final rules are
somewhat simpler. The results are similar except for one case.
-@cindex POSIX @command{awk}, functions and, @code{gsub()}/@code{sub()}
+@cindex POSIX @command{awk} @subentry functions and @subentry
@code{gsub()}/@code{sub()}
The POSIX rules state that @samp{\&} in the replacement string produces
a literal @samp{&}, @samp{\\} produces a literal @samp{\}, and @samp{\}
followed
by anything else is not special; the @samp{\} is placed straight into the
output.
@@ -18480,7 +18524,7 @@ to do substitutions.
@node I/O Functions
@subsection Input/Output Functions
-@cindex input/output functions
+@cindex input/output @subentry functions
The following functions relate to input/output (I/O).
Optional parameters are enclosed in square brackets ([ ]):
@@ -18488,7 +18532,7 @@ Optional parameters are enclosed in square brackets ([
]):
@table @asis
@item @code{close(}@var{filename} [@code{,} @var{how}]@code{)}
@cindexawkfunc{close}
-@cindex files, closing
+@cindex files @subentry closing
@cindex close file or coprocess
Close the file @var{filename} for input or output. Alternatively, the
argument may be a shell command that was used for creating a coprocess, or
@@ -18516,8 +18560,8 @@ Flush any buffered output associated with
@var{filename}, which is either a
file opened for writing or a shell command for redirecting output to
a pipe or coprocess.
-@cindex buffers, flushing
-@cindex output, buffering
+@cindex buffers @subentry flushing
+@cindex output @subentry buffering
Many utility programs @dfn{buffer} their output (i.e., they save information
to write to a disk file or the screen in memory until there is enough
for it to be worthwhile to send the data to the output device).
@@ -18529,7 +18573,7 @@ This is the purpose of the @code{fflush()}
function---@command{gawk} also
buffers its output, and the @code{fflush()} function forces
@command{gawk} to flush its buffers.
-@cindex extensions, common@comma{} @code{fflush()} function
+@cindex extensions @subentry common @subentry @code{fflush()} function
@cindex Brian Kernighan's @command{awk}
Brian Kernighan added @code{fflush()} to his @command{awk} in April
1992. For two decades, it was a common extension. In December
@@ -18556,7 +18600,7 @@ only the standard output.
@c @cindex automatic warnings
@c @cindex warnings, automatic
-@cindex troubleshooting, @code{fflush()} function
+@cindex troubleshooting @subentry @code{fflush()} function
@code{fflush()} returns zero if the buffer is successfully flushed;
otherwise, it returns a nonzero value. (@command{gawk} returns @minus{}1.)
In the case where all buffers are flushed, the return value is zero
@@ -18572,7 +18616,7 @@ In such a case, @code{fflush()} returns @minus{}1, as
well.
@end table
@sidebar Interactive Versus Noninteractive Buffering
-@cindex buffering, interactive vs.@: noninteractive
+@cindex buffering @subentry interactive vs.@: noninteractive
As a side point, buffering issues can be even more confusing if
your program is @dfn{interactive} (i.e., communicating
@@ -18647,8 +18691,8 @@ close("/bin/sh")
@end example
@noindent
-@cindex troubleshooting, @code{system()} function
-@cindex @option{--sandbox} option, disabling @code{system()} function
+@cindex troubleshooting @subentry @code{system()} function
+@cindex @option{--sandbox} option @subentry disabling @code{system()} function
However, if your @command{awk}
program is interactive, @code{system()} is useful for running large
self-contained programs, such as a shell or an editor.
@@ -18694,9 +18738,9 @@ As of August, 2018, BWK @command{awk} now follows
@command{gawk}'s behavior
for the return value of @code{system()}.
@sidebar Controlling Output Buffering with @code{system()}
-@cindex buffers, flushing
-@cindex buffering, input/output
-@cindex output, buffering
+@cindex buffers @subentry flushing
+@cindex buffering @subentry input/output
+@cindex output @subentry buffering
The @code{fflush()} function provides explicit control over output buffering
for
individual files and pipes. However, its use is not portable to many older
@@ -18756,9 +18800,9 @@ you would see the latter (undesirable) output.
@cindex timestamps
@cindex log files, timestamps in
-@cindex files, log@comma{} timestamps in
-@cindex @command{gawk}, timestamps
-@cindex POSIX @command{awk}, timestamps and
+@cindex files @subentry log, timestamps in
+@cindex @command{gawk} @subentry timestamps
+@cindex POSIX @command{awk} @subentry timestamps and
@command{awk} programs are commonly used to process log files
containing timestamp information, indicating when a
particular log record was written. Many programs log their timestamps
@@ -18789,8 +18833,8 @@ which is sufficient to represent times through
including negative timestamps that represent times before the
epoch.
-@cindex @command{date} utility, GNU
-@cindex time, retrieving
+@cindex @command{date} utility @subentry GNU
+@cindex time @subentry retrieving
In order to make it easier to process such log files and to produce
useful reports, @command{gawk} provides the following functions for
working with timestamps. They are @command{gawk} extensions; they are
@@ -18833,7 +18877,7 @@ whether daylight savings time is in effect for the
specified time.
If @var{datespec} does not contain enough elements or if the resulting time
is out of range, @code{mktime()} returns @minus{}1.
-@cindex @command{gawk}, @code{PROCINFO} array in
+@cindex @command{gawk} @subentry @code{PROCINFO} array in
@cindex @code{PROCINFO} array
@item @code{strftime(}[@var{format} [@code{,} @var{timestamp} [@code{,}
@var{utc-flag}] ] ]@code{)}
@cindexgawkfunc{strftime}
@@ -18871,9 +18915,9 @@ log file with the current time of day. In particular,
it is easy to
determine how long ago a particular record was logged. It also allows
you to produce log records using the ``seconds since the epoch'' format.
-@cindex converting, dates to timestamps
-@cindex dates, converting to timestamps
-@cindex timestamps, converting dates to
+@cindex converting @subentry dates to timestamps
+@cindex dates @subentry converting to timestamps
+@cindex timestamps @subentry converting dates to
The @code{mktime()} function allows you to convert a textual representation
of a date and time into a timestamp. This makes it easy to do before/after
comparisons of dates and times, particularly when dealing with date and
@@ -18887,7 +18931,7 @@ in that it copies nonformat specification characters
verbatim to the
returned string, while substituting date and time values for format
specifications in the @var{format} string.
-@cindex format specifiers, @code{strftime()} function (@command{gawk})
+@cindex format specifiers @subentry @code{strftime()} function (@command{gawk})
@code{strftime()} is guaranteed by the 1999 ISO C
standard@footnote{Unfortunately,
not every system's @code{strftime()} necessarily
@@ -18987,7 +19031,7 @@ The weekday as a decimal number (1--7). Monday is day
one.
The week number of the year (with the first Sunday as the first day of week
one)
as a decimal number (00--53).
-@c @cindex ISO 8601
+@cindex ISO @subentry ISO 8601 date and time standard
@item %V
The week number of the year (with the first Monday as the first
day of week one) as a decimal number (01--53).
@@ -19088,8 +19132,8 @@ The date in VMS format (e.g., @samp{20-JUN-1991}).
Additionally, the alternative representations are recognized but their
normal representations are used.
-@cindex @code{date} utility, POSIX
-@cindex POSIX @command{awk}, @code{date} utility and
+@cindex @code{date} utility @subentry POSIX
+@cindex POSIX @command{awk} @subentry @code{date} utility and
The following example is an @command{awk} implementation of the POSIX
@command{date} utility. Normally, the @command{date} utility prints the
current date and time of day in a well-known format. However, if you
@@ -19138,7 +19182,7 @@ gawk 'BEGIN @{
@node Bitwise Functions
@subsection Bit-Manipulation Functions
@cindex bit-manipulation functions
-@cindex bitwise, operations
+@cindex bitwise @subentry operations
@cindex AND bitwise operation
@cindex OR bitwise operation
@cindex XOR bitwise operation
@@ -19265,7 +19309,7 @@ Operands | 0 | 1 | 0 | 1 | 0 | 1
@end docbook
@end float
-@cindex bitwise complement
+@cindex bitwise @subentry complement
@cindex complement, bitwise
As you can see, the result of an AND operation is 1 only when @emph{both}
bits are 1.
@@ -19276,7 +19320,7 @@ The next operation is the @dfn{complement}; the
complement of 1 is 0 and
the complement of 0 is 1. Thus, this operation ``flips'' all the bits
of a given value.
-@cindex bitwise, shift
+@cindex bitwise @subentry shift
@cindex left shift, bitwise
@cindex right shift, bitwise
@cindex shift, bitwise
@@ -19291,35 +19335,33 @@ bits, you end up with @samp{11001000}. The following
list describes
@command{gawk}'s built-in functions that implement the bitwise operations.
Optional parameters are enclosed in square brackets ([ ]):
-@cindex @command{gawk}, bitwise operations in
+@cindex @command{gawk} @subentry bitwise operations in
@table @asis
@cindexgawkfunc{and}
-@cindex bitwise AND
+@cindex bitwise @subentry AND
@item @code{and(}@var{v1}@code{,} @var{v2} [@code{,} @dots{}]@code{)}
Return the bitwise AND of the arguments. There must be at least two.
@cindexgawkfunc{compl}
-@cindex bitwise complement
+@cindex bitwise @subentry complement
@item @code{compl(@var{val})}
Return the bitwise complement of @var{val}.
@cindexgawkfunc{lshift}
-@cindex left shift
@item @code{lshift(@var{val}, @var{count})}
Return the value of @var{val}, shifted left by @var{count} bits.
@cindexgawkfunc{or}
-@cindex bitwise OR
+@cindex bitwise @subentry OR
@item @code{or(}@var{v1}@code{,} @var{v2} [@code{,} @dots{}]@code{)}
Return the bitwise OR of the arguments. There must be at least two.
@cindexgawkfunc{rshift}
-@cindex right shift
@item @code{rshift(@var{val}, @var{count})}
Return the value of @var{val}, shifted right by @var{count} bits.
@cindexgawkfunc{xor}
-@cindex bitwise XOR
+@cindex bitwise @subentry XOR
@item @code{xor(}@var{v1}@code{,} @var{v2} [@code{,} @dots{}]@code{)}
Return the bitwise XOR of the arguments. There must be at least two.
@end table
@@ -19335,6 +19377,7 @@ Here is a user-defined function (@pxref{User-defined})
that illustrates the use of these functions:
@cindex @code{bits2str()} user-defined function
+@cindex user-defined @subentry function @subentry @code{bits2str()}
@cindex @code{testbits.awk} program
@example
@group
@@ -19408,11 +19451,11 @@ $ @kbd{gawk -f testbits.awk}
@print{} rshift(0x99, 2) = 0x26 = 00100110
@end example
-@cindex converting, strings to numbers
-@cindex strings, converting
-@cindex numbers, converting
-@cindex converting, numbers to strings
-@cindex numbers, as string of bits
+@cindex converting @subentry string to numbers
+@cindex strings @subentry converting
+@cindex numbers @subentry converting
+@cindex converting @subentry numbers to strings
+@cindex numbers @subentry as string of bits
The @code{bits2str()} function turns a binary number into a string.
Initializing @code{mask} to one creates
a binary value where the rightmost bit
@@ -19505,8 +19548,8 @@ that traverses every element of an array of arrays
Return a true value if @var{x} is an array. Otherwise, return false.
@cindexgawkfunc{typeof}
-@cindex variable type
-@cindex type, of variable
+@cindex variable type, @code{typeof()} function (@command{gawk})
+@cindex type @subentry of variable, @code{typeof()} function (@command{gawk})
@item typeof(@var{x})
Return one of the following strings, depending upon the type of @var{x}:
@@ -19590,11 +19633,11 @@ not change their arguments from untyped to unassigned.
@node I18N Functions
@subsection String-Translation Functions
-@cindex @command{gawk}, string-translation functions
-@cindex functions, string-translation
+@cindex @command{gawk} @subentry string-translation functions
+@cindex functions @subentry string-translation
@cindex string-translation functions
@cindex internationalization
-@cindex @command{awk} programs, internationalizing
+@cindex @command{awk} programs @subentry internationalizing
@command{gawk} provides facilities for internationalizing @command{awk}
programs.
These include the functions described in the following list.
@@ -19640,8 +19683,8 @@ The default value for @var{category} is
@code{"LC_MESSAGES"}.
@node User-defined
@section User-Defined Functions
-@cindex user-defined functions
-@cindex functions, user-defined
+@cindex user-defined @subentry functions
+@cindex functions @subentry user-defined
Complicated @command{awk} programs can often be simplified by defining
your own functions. User-defined functions can be called just like
built-in ones (@pxref{Function Calls}), but it is up to you to define
@@ -19665,7 +19708,7 @@ variable definitions is appallingly awful.}
@author Brian Kernighan
@end quotation
-@cindex functions, defining
+@cindex functions @subentry defining
Definitions of functions can appear anywhere between the rules of an
@command{awk} program. Thus, the general form of an @command{awk} program is
extended to include sequences of rules @emph{and} user-defined function
@@ -19685,9 +19728,9 @@ The definition of a function named @var{name} looks
like this:
@end group
@end display
-@cindex names, functions
-@cindex functions, names of
-@cindex namespace issues, functions
+@cindex names @subentry functions
+@cindex functions @subentry names of
+@cindex naming issues @subentry functions
@noindent
Here, @var{name} is the name of the function to define. A valid function
name is like a valid variable name: a sequence of letters, digits, and
@@ -19742,13 +19785,13 @@ arguments on some occasions and local variables on
others. Another
way to think of this is that omitted arguments default to the
null string.
-@cindex programming conventions, functions, writing
+@cindex programming conventions @subentry functions @subentry writing
Usually when you write a function, you know how many names you intend to
use for arguments and how many you intend to use as local variables. It is
conventional to place some extra space between the arguments and
the local variables, in order to document how your function is supposed to be
used.
-@cindex variables, shadowing
+@cindex variables @subentry shadowing
@cindex shadowing of variable values
During execution of the function body, the arguments and local variable
values hide, or @dfn{shadow}, any variables of the same names used in the
@@ -19763,7 +19806,7 @@ is executing. Once the body finishes, you can once
again access the
variables that were shadowed while the function was running.
@cindex recursive functions
-@cindex functions, recursive
+@cindex functions @subentry recursive
The function body can contain expressions that call functions. They
can even call this function, either directly or by way of another
function. When this happens, we say the function is @dfn{recursive}.
@@ -19775,11 +19818,11 @@ which is described in detail in @ref{Return
Statement}.
Many of the subsequent examples in this @value{SECTION} use
the @code{return} statement.
-@cindex common extensions, @code{func} keyword
-@cindex extensions, common@comma{} @code{func} keyword
-@c @cindex @command{awk} language, POSIX version
+@cindex common extensions @subentry @code{func} keyword
+@cindex extensions @subentry common @subentry @code{func} keyword
@c @cindex POSIX @command{awk}
-@cindex POSIX @command{awk}, @code{function} keyword in
+@cindex @command{awk} @subentry language, POSIX version
+@cindex POSIX @command{awk} @subentry @code{function} keyword in
In many @command{awk} implementations, including @command{gawk},
the keyword @code{function} may be
abbreviated @code{func}. @value{COMMONEXT}
@@ -19802,7 +19845,7 @@ syntactically valid, because functions may be used
before they are defined
in @command{awk} programs.@footnote{This program won't actually run,
because @code{foo()} is undefined.})
-@cindex portability, functions@comma{} defining
+@cindex portability @subentry functions, defining
To ensure that your @command{awk} programs are portable, always use the
keyword @code{function} when defining a function.
@@ -19877,6 +19920,7 @@ already empty:
@c 8/2014: Thanks to Mike Brennan for the improved formulation
@cindex @code{rev()} user-defined function
+@cindex user-defined @subentry function @subentry @code{rev()}
@example
function rev(str)
@{
@@ -19903,6 +19947,7 @@ The following example uses the built-in
@code{strftime()} function
to create an @command{awk} version of @code{ctime()}:
@cindex @code{ctime()} user-defined function
+@cindex user-defined @subentry function @subentry @code{ctime()}
@example
@c file eg/lib/ctime.awk
# ctime.awk
@@ -19928,7 +19973,7 @@ code could have changed @code{PROCINFO["strftime"]}.
@node Function Calling
@subsection Calling User-Defined Functions
-@cindex functions, user-defined, calling
+@cindex functions @subentry user-defined @subentry calling
@dfn{Calling a function} means causing the function to run and do its job.
A function call is an expression and its value is the value returned by
the function.
@@ -19966,8 +20011,8 @@ an error.
@node Variable Scope
@subsubsection Controlling Variable Scope
-@cindex local variables, in a function
-@cindex variables, local to a function
+@cindex local variables @subentry in a function
+@cindex variables @subentry local to a function
Unlike in many languages,
there is no way to make a variable local to a @code{@{} @dots{} @code{@}}
block in
@command{awk}, but you can make a variable local to a function. It is
@@ -20152,8 +20197,8 @@ cannot alter this outer value, because it is shadowed
during the
execution of @code{myfunc()} and cannot be seen or changed from there.
@cindex call by reference
-@cindex arrays, as parameters to functions
-@cindex functions, arrays as parameters to
+@cindex arrays @subentry as parameters to functions
+@cindex functions @subentry arrays as parameters to
However, when arrays are the parameters to functions, they are @emph{not}
copied. Instead, the array itself is made available for direct manipulation
by the function. This is usually termed @dfn{call by reference}.
@@ -20188,7 +20233,7 @@ prints @samp{a[1] = 1, a[2] = two, a[3] = 3}, because
@subsubsection Other Points About Calling Functions
@cindex undefined functions
-@cindex functions, undefined
+@cindex functions @subentry undefined
Some @command{awk} implementations allow you to call a function that
has not been defined. They only report a problem at runtime, when the
program actually tries to call the function. For example:
@@ -20209,12 +20254,12 @@ Because the @samp{if} statement will never be true,
it is not really a
problem that @code{foo()} has not been defined. Usually, though, it is a
problem if a program calls an undefined function.
-@cindex lint checking, undefined functions
+@cindex lint checking @subentry undefined functions
If @option{--lint} is specified
(@pxref{Options}),
@command{gawk} reports calls to undefined functions.
-@cindex portability, @code{next} statement in user-defined functions
+@cindex portability @subentry @code{next} statement in user-defined functions
Some @command{awk} implementations generate a runtime
error if you use either the @code{next} statement
or the @code{nextfile} statement
@@ -20260,7 +20305,7 @@ don't like the warning, fix your code! It's incorrect,
after all.)
@node Return Statement
@subsection The @code{return} Statement
-@cindex @code{return} statement@comma{} user-defined functions
+@cindex @code{return} statement, user-defined functions
As seen in several earlier examples,
the body of a user-defined function can contain a @code{return} statement.
@@ -20305,7 +20350,7 @@ function maxelt(vec, i, ret)
@}
@end example
-@cindex programming conventions, function parameters
+@cindex programming conventions @subentry function parameters
@noindent
You call @code{maxelt()} with one argument, which is an array name. The local
variables @code{i} and @code{ret} are not intended to be arguments;
@@ -20391,10 +20436,10 @@ being aware of them.
@section Indirect Function Calls
@cindex indirect function calls
-@cindex function calls, indirect
+@cindex function calls @subentry indirect
@cindex function pointers
@cindex pointers to functions
-@cindex differences in @command{awk} and @command{gawk}, indirect function
calls
+@cindex differences in @command{awk} and @command{gawk} @subentry indirect
function calls
This section describes an advanced, @command{gawk}-specific extension.
@@ -20446,9 +20491,10 @@ This style of programming works, but can be awkward.
With @dfn{indirect}
function calls, you tell @command{gawk} to use the @emph{value} of a
variable as the @emph{name} of the function to call.
-@cindex @code{@@}-notation for indirect function calls
-@cindex indirect function calls, @code{@@}-notation
-@cindex function calls, indirect, @code{@@}-notation for
+@cindex @code{@@} (at-sign) @subentry @code{@@}-notation for indirect function
calls
+@cindex at-sign (@code{@@}) @subentry @code{@@}-notation for indirect function
calls
+@cindex indirect function calls @subentry @code{@@}-notation
+@cindex function calls @subentry indirect @subentry @code{@@}-notation for
The syntax is similar to that of a regular function call: an identifier
immediately followed by an opening parenthesis, any arguments, and then
a closing parenthesis, with the addition of a leading @samp{@@}
@@ -20861,8 +20907,8 @@ It contains the following chapters:
@node Library Functions
@chapter A Library of @command{awk} Functions
@cindex libraries of @command{awk} functions
-@cindex functions, library
-@cindex functions, user-defined, library of
+@cindex functions @subentry library
+@cindex functions @subentry user-defined @subentry library of
@ref{User-defined} describes how to write
your own @command{awk} functions. Writing functions is important, because
@@ -20909,7 +20955,7 @@ and would like to contribute them to the @command{awk}
user community, see
@ref{How To Contribute}, for more information.
@end ifclear
-@cindex portability, example programs
+@cindex portability @subentry example programs
The programs in this @value{CHAPTER} and in
@ref{Sample Programs},
freely use @command{gawk}-specific features.
@@ -20929,8 +20975,8 @@ to skip any remaining input in the input file.
@item
@c 12/2000: Thanks to Nelson Beebe for pointing out the output issue.
-@cindex case sensitivity, example programs
-@cindex @code{IGNORECASE} variable, in example programs
+@cindex case sensitivity @subentry example programs
+@cindex @code{IGNORECASE} variable @subentry in example programs
Finally, some of the programs choose to ignore upper- and lowercase
distinctions in their input. They do so by assigning one to @code{IGNORECASE}.
You can achieve almost the same effect@footnote{The effects are
@@ -20967,19 +21013,19 @@ comparisons use only lowercase letters.
@node Library Names
@section Naming Library Function Global Variables
-@cindex names, arrays/variables
-@cindex names, functions
-@cindex namespace issues
-@cindex @command{awk} programs, documenting
-@cindex documentation, of @command{awk} programs
+@cindex names @subentry arrays/variables
+@cindex names @subentry functions
+@cindex naming issues
+@cindex @command{awk} programs @subentry documenting
+@cindex documentation @subentry of @command{awk} programs
Due to the way the @command{awk} language evolved, variables are either
@dfn{global} (usable by the entire program) or @dfn{local} (usable just by
a specific function). There is no intermediate state analogous to
@code{static} variables in C.
-@cindex variables, global, for library functions
+@cindex variables @subentry global @subentry for library functions
@cindex private variables
-@cindex variables, private
+@cindex variables @subentry private
Library functions often need to have global variables that they can use to
preserve state information between calls to the function---for example,
@code{getopt()}'s variable @code{_opti}
@@ -20993,15 +21039,15 @@ either another library function or a user's main
program. For example, a
name like @code{i} or @code{j} is not a good choice, because user programs
often use variable names like these for their own purposes.
-@cindex programming conventions, private variable names
+@cindex programming conventions @subentry private variable names
The example programs shown in this @value{CHAPTER} all start the names of their
private variables with an underscore (@samp{_}). Users generally don't use
leading underscores in their variable names, so this convention immediately
decreases the chances that the variable names will be accidentally shared
with the user's program.
-@cindex @code{_} (underscore), in names of private variables
-@cindex underscore (@code{_}), in names of private variables
+@cindex @code{_} (underscore) @subentry in names of private variables
+@cindex underscore (@code{_}) @subentry in names of private variables
In addition, several of the library functions use a prefix that helps
indicate what function or set of functions use the variables---for example,
@code{_pw_byname()} in the user database routines
@@ -21023,7 +21069,7 @@ The leading capital letter indicates that it is global,
while the fact that
the variable name is not all capital letters indicates that the variable is
not one of @command{awk}'s predefined variables, such as @code{FS}.
-@cindex @option{--dump-variables} option, using for library functions
+@cindex @option{--dump-variables} option @subentry using for library functions
It is also important that @emph{all} variables in library
functions that do not need to save state are, in fact, declared
local.@footnote{@command{gawk}'s @option{--dump-variables} command-line
@@ -21041,9 +21087,9 @@ function lib_func(x, y, l1, l2)
@}
@end example
-@cindex arrays, associative, library functions and
-@cindex libraries of @command{awk} functions, associative arrays and
-@cindex functions, library, associative arrays and
+@cindex arrays @subentry associative @subentry library functions and
+@cindex libraries of @command{awk} functions @subentry associative arrays and
+@cindex functions @subentry library @subentry associative arrays and
@cindex Tcl
A different convention, common in the Tcl community, is to use a single
associative array to hold the values needed by the library function(s), or
@@ -21191,9 +21237,10 @@ be tested with @command{gawk} and the results compared
to the built-in
@cindex assertions
@cindex @code{assert()} function (C library)
-@cindex libraries of @command{awk} functions, assertions
-@cindex functions, library, assertions
-@cindex @command{awk} programs, lengthy, assertions
+@cindex C library functions @subentry @code{assert()}
+@cindex libraries of @command{awk} functions @subentry assertions
+@cindex functions @subentry library @subentry assertions
+@cindex @command{awk} programs @subentry lengthy @subentry assertions
When writing large programs, it is often useful to know
that a condition or set of conditions is true. Before proceeding with a
particular computation, you make a statement about what you believe to be
@@ -21224,6 +21271,7 @@ prog.c:5: assertion failed: a <= 5 && b >= 17.1
@end example
@cindex @code{assert()} user-defined function
+@cindex user-defined @subentry function @subentry @code{assert()}
The C language makes it possible to turn the condition into a string for use
in printing the diagnostic message. This is not possible in @command{awk}, so
this @code{assert()} function also requires a string version of the condition
@@ -21295,7 +21343,7 @@ If the assertion fails, you see a message similar to
the following:
mydata:1357: assertion failed: a <= 5 && b >= 17.1
@end example
-@cindex @code{END} pattern, @code{assert()} user-defined function and
+@cindex @code{END} pattern @subentry @code{assert()} user-defined function and
There is a small problem with this version of @code{assert()}.
An @code{END} rule is automatically added
to the program calling @code{assert()}. Normally, if a program consists
@@ -21305,7 +21353,7 @@ attempts to read the input @value{DF}s or standard input
(@pxref{Using BEGIN/END}),
most likely causing the program to hang as it waits for input.
-@cindex @code{BEGIN} pattern, @code{assert()} user-defined function and
+@cindex @code{BEGIN} pattern @subentry @code{assert()} user-defined function
and
There is a simple workaround to this:
make sure that such a @code{BEGIN} rule always ends
with an @code{exit} statement.
@@ -21314,12 +21362,12 @@ with an @code{exit} statement.
@subsection Rounding Numbers
@cindex rounding numbers
-@cindex numbers, rounding
-@cindex libraries of @command{awk} functions, rounding numbers
-@cindex functions, library, rounding numbers
-@cindex @code{print} statement, @code{sprintf()} function and
-@cindex @code{printf} statement, @code{sprintf()} function and
-@cindex @code{sprintf()} function, @code{print}/@code{printf} statements and
+@cindex numbers @subentry rounding
+@cindex libraries of @command{awk} functions @subentry rounding numbers
+@cindex functions @subentry library @subentry rounding numbers
+@cindex @code{print} statement @subentry @code{sprintf()} function and
+@cindex @code{printf} statement @subentry @code{sprintf()} function and
+@cindex @code{sprintf()} function @subentry @code{print}/@code{printf}
statements and
The way @code{printf} and @code{sprintf()}
(@pxref{Printf})
perform rounding often depends upon the system's C @code{sprintf()}
@@ -21333,6 +21381,7 @@ traditional rounding; it might be useful if your
@command{awk}'s @code{printf}
does unbiased rounding:
@cindex @code{round()} user-defined function
+@cindex user-defined @subentry function @subentry @code{round()}
@example
@c file eg/lib/round.awk
# round.awk --- do normal rounding
@@ -21380,10 +21429,10 @@ function round(x, ival, aval, fraction)
@node Cliff Random Function
@subsection The Cliff Random Number Generator
-@cindex random numbers, Cliff
+@cindex random numbers @subentry Cliff
@cindex Cliff random numbers
-@cindex numbers, Cliff random
-@cindex functions, library, Cliff random numbers
+@cindex numbers @subentry Cliff random
+@cindex functions @subentry library @subentry Cliff random numbers
The
@uref{http://mathworld.wolfram.com/CliffRandomNumberGenerator.html, Cliff
random number generator}
@@ -21392,6 +21441,7 @@ for randomness by showing no structure.''
It is easily programmed, in less than 10 lines of @command{awk} code:
@cindex @code{cliff_rand()} user-defined function
+@cindex user-defined @subentry function @subentry @code{cliff_rand()}
@example
@c file eg/lib/cliff_rand.awk
# cliff_rand.awk --- generate Cliff random numbers
@@ -21426,10 +21476,10 @@ isn't random enough, you might try using this
function instead.
@node Ordinal Functions
@subsection Translating Between Characters and Numbers
-@cindex libraries of @command{awk} functions, character values as numbers
-@cindex functions, library, character values as numbers
-@cindex characters, values of as numbers
-@cindex numbers, as values of characters
+@cindex libraries of @command{awk} functions @subentry character values as
numbers
+@cindex functions @subentry library @subentry character values as numbers
+@cindex characters @subentry values of as numbers
+@cindex numbers @subentry as values of characters
One commercial implementation of @command{awk} supplies a built-in function,
@code{ord()}, which takes a character and returns the numeric value for that
character in the machine's character set. If the string passed to
@@ -21441,8 +21491,11 @@ Both functions are written very nicely in
@command{awk}; there is no real
reason to build them into the @command{awk} interpreter:
@cindex @code{ord()} user-defined function
+@cindex user-defined @subentry function @subentry @code{ord()}
@cindex @code{chr()} user-defined function
+@cindex user-defined @subentry function @subentry @code{chr()}
@cindex @code{_ord_init()} user-defined function
+@cindex user-defined @subentry function @subentry @code{_ord_init()}
@example
@c file eg/lib/ord.awk
# ord.awk --- do ord and chr
@@ -21551,10 +21604,10 @@ function. It is commented out for production use.
@node Join Function
@subsection Merging an Array into a String
-@cindex libraries of @command{awk} functions, merging arrays into strings
-@cindex functions, library, merging arrays into strings
-@cindex strings, merging arrays into
-@cindex arrays, merging into strings
+@cindex libraries of @command{awk} functions @subentry merging arrays into
strings
+@cindex functions @subentry library @subentry merging arrays into strings
+@cindex strings @subentry merging arrays into
+@cindex arrays @subentry merging into strings
When doing string processing, it is often useful to be able to join
all the strings in an array into one long string. The following function,
@code{join()}, accomplishes this task. It is used later in several of
@@ -21569,6 +21622,7 @@ assumption, as the array was likely created with
@code{split()}
(@pxref{String Functions}):
@cindex @code{join()} user-defined function
+@cindex user-defined @subentry function @subentry @code{join()}
@example
@c file eg/lib/join.awk
# join.awk --- join an array into a string
@@ -21611,10 +21665,10 @@ more difficult than they really need to be.}
@node Getlocaltime Function
@subsection Managing the Time of Day
-@cindex libraries of @command{awk} functions, managing, time
-@cindex functions, library, managing time
-@cindex timestamps, formatted
-@cindex time, managing
+@cindex libraries of @command{awk} functions @subentry managing @subentry time
+@cindex functions @subentry library @subentry managing time
+@cindex timestamps @subentry formatted
+@cindex time @subentry managing
The @code{systime()} and @code{strftime()} functions described in
@ref{Time Functions}
provide the minimum functionality necessary for dealing with the time of day
@@ -21627,6 +21681,7 @@ with preformatted time information. It returns a
string with the current
time formatted in the same way as the @command{date} utility:
@cindex @code{getlocaltime()} user-defined function
+@cindex user-defined @subentry function @subentry @code{getlocaltime()}
@example
@c file eg/lib/gettime.awk
# getlocaltime.awk --- get the time of day in a usable format
@@ -21738,6 +21793,7 @@ The following function, based on a suggestion by Denis
Shirokov,
reads the entire contents of the named file in one shot:
@cindex @code{readfile()} user-defined function
+@cindex user-defined @subentry function @subentry @code{readfile()}
@example
@c file eg/lib/readfile.awk
# readfile.awk --- read an entire file at once
@@ -21867,9 +21923,9 @@ function shell_quote(s, # parameter
@node Data File Management
@section @value{DDF} Management
-@cindex files, managing
-@cindex libraries of @command{awk} functions, managing, data files
-@cindex functions, library, managing data files
+@cindex files @subentry managing
+@cindex libraries of @command{awk} functions @subentry managing @subentry data
files
+@cindex functions @subentry library @subentry managing data files
This @value{SECTION} presents functions that are useful for managing
command-line @value{DF}s.
@@ -21884,8 +21940,8 @@ command-line @value{DF}s.
@node Filetrans Function
@subsection Noting @value{DDF} Boundaries
-@cindex files, managing, data file boundaries
-@cindex files, initialization and cleanup
+@cindex files @subentry managing @subentry data file boundaries
+@cindex files @subentry initialization and cleanup
The @code{BEGIN} and @code{END} rules are each executed exactly once, at
the beginning and end of your @command{awk} program, respectively
(@pxref{BEGIN/END}).
@@ -21950,7 +22006,9 @@ supplied in the ``main'' program, @code{endfile()} is
called first. Once
again, the value of multiple @code{BEGIN} and @code{END} rules should be clear.
@cindex @code{beginfile()} user-defined function
+@cindex user-defined @subentry function @subentry @code{beginfile()}
@cindex @code{endfile()} user-defined function
+@cindex user-defined @subentry function @subentry @code{endfile()}
If the same @value{DF} occurs twice in a row on the command line, then
@code{endfile()} and @code{beginfile()} are not executed at the end of the
first pass and at the beginning of the second pass.
@@ -22005,7 +22063,7 @@ For more information, refer to @ref{BEGINFILE/ENDFILE}.
@node Rewind Function
@subsection Rereading the Current File
-@cindex files, reading
+@cindex files @subentry reading
Another request for a new built-in function was for a
function that would make it possible to reread the current file.
The requesting user didn't want to have to use @code{getline}
@@ -22018,6 +22076,7 @@ and then start over with it from the top.
For lack of a better name, we'll call the function @code{rewind()}:
@cindex @code{rewind()} user-defined function
+@cindex user-defined @subentry function @subentry @code{rewind()}
@example
@c file eg/lib/rewind.awk
# rewind.awk --- rewind the current file and start over
@@ -22091,9 +22150,9 @@ $ @kbd{gawk -f rewind.awk -f test.awk data }
@node File Checking
@subsection Checking for Readable @value{DDF}s
-@cindex troubleshooting, readable data files
-@cindex readable data files@comma{} checking
-@cindex files, skipping
+@cindex troubleshooting @subentry readable data files
+@cindex readable data files, checking
+@cindex files @subentry skipping
Normally, if you give @command{awk} a @value{DF} that isn't readable,
it stops with a fatal error. There are times when you might want to
just ignore such files and keep going.@footnote{The @code{BEGINFILE}
@@ -22131,7 +22190,7 @@ BEGIN @{
@c endfile
@end example
-@cindex troubleshooting, @code{getline} function
+@cindex troubleshooting @subentry @code{getline} command
This works, because the @code{getline} won't be fatal.
Removing the element from @code{ARGV} with @code{delete}
skips the file (because it's no longer in the list).
@@ -22209,7 +22268,7 @@ not @samp{<}.
@subsection Treating Assignments as @value{FFN}s
@cindex assignments as file names
-@cindex file names, assignments as
+@cindex file names @subentry assignments as
Occasionally, you might not want @command{awk} to process command-line
variable assignments
(@pxref{Assignment Options}).
@@ -22268,12 +22327,12 @@ are left alone.
@node Getopt Function
@section Processing Command-Line Options
-@cindex libraries of @command{awk} functions, command-line options
-@cindex functions, library, command-line options
-@cindex command-line options, processing
-@cindex options, command-line, processing
-@cindex functions, library, C library
-@cindex arguments, processing
+@cindex libraries of @command{awk} functions @subentry command-line options
+@cindex functions @subentry library @subentry command-line options
+@cindex command line @subentry options @subentry processing
+@cindex options @subentry command-line @subentry processing
+@cindex functions @subentry library @subentry C library
+@cindex arguments @subentry processing
Most utilities on POSIX-compatible systems take options on
the command line that can be used to change the way a program behaves.
@command{awk} is an example of such a program
@@ -22285,6 +22344,7 @@ The first occurrence on the command line of either
@option{--} or a
string that does not begin with @samp{-} ends the options.
@cindex @code{getopt()} function (C library)
+@cindex C library functions @subentry @code{getopt()}
Modern Unix systems provide a C function named @code{getopt()} for processing
command-line arguments. The programmer provides a string describing the
one-letter options. If an option requires an argument, it is followed in the
@@ -22388,6 +22448,7 @@ We have left it alone, as using @code{substr()} is more
portable.}
The discussion that follows walks through the code a bit at a time:
@cindex @code{getopt()} user-defined function
+@cindex user-defined @subentry function @subentry @code{getopt()}
@example
@c file eg/lib/getopt.awk
# getopt.awk --- Do C library getopt(3) function in awk
@@ -22430,6 +22491,7 @@ a string of options (the @code{options} parameter). If
@code{options}
has a zero length, @code{getopt()} immediately returns @minus{}1:
@cindex @code{getopt()} user-defined function
+@cindex user-defined @subentry function @subentry @code{getopt()}
@example
@c file eg/lib/getopt.awk
function getopt(argc, argv, options, thisopt, i)
@@ -22627,10 +22689,10 @@ use @code{getopt()} to process their arguments.
@node Passwd Functions
@section Reading the User Database
-@cindex libraries of @command{awk} functions, user database, reading
-@cindex functions, library, user database@comma{} reading
-@cindex user database@comma{} reading
-@cindex database, users@comma{} reading
+@cindex libraries of @command{awk} functions @subentry user database, reading
+@cindex functions @subentry library @subentry user database, reading
+@cindex user database, reading
+@cindex database @subentry users, reading
@cindex @code{PROCINFO} array
The @code{PROCINFO} array
(@pxref{Built-in Variables})
@@ -22644,12 +22706,14 @@ user database. @xref{Group Functions}
for a similar suite that retrieves information from the group database.
@cindex @code{getpwent()} function (C library)
+@cindex C library functions @subentry @code{getpwent()}
@cindex @code{getpwent()} user-defined function
-@cindex users, information about, retrieving
+@cindex user-defined @subentry function @subentry @code{getpwent()}
+@cindex users, information about @subentry retrieving
@cindex login information
@cindex account information
@cindex password file
-@cindex files, password
+@cindex files @subentry password
The POSIX standard does not define the file where user information is
kept. Instead, it provides the @code{<pwd.h>} header file
and several C language subroutines for obtaining user information.
@@ -22777,8 +22841,8 @@ shell, such as Bash.
A few lines representative of @command{pwcat}'s output are as follows:
@cindex Jacobs, Andrew
-@cindex Robbins, Arnold
-@cindex Robbins, Miriam
+@cindex Robbins @subentry Arnold
+@cindex Robbins @subentry Miriam
@example
$ @kbd{pwcat}
@print{} root:x:0:1:Operator:/:/bin/sh
@@ -22797,6 +22861,7 @@ information. There are several functions here,
corresponding to the C
functions of the same names:
@cindex @code{_pw_init()} user-defined function
+@cindex user-defined @subentry function @subentry @code{_pw_init()}
@example
@c file eg/lib/passwdawk.in
# passwd.awk --- access password file information
@@ -22850,7 +22915,7 @@ function _pw_init( oldfs, oldrs, olddol0, pwcat,
using_fw, using_fpat)
@c endfile
@end example
-@cindex @code{BEGIN} pattern, @code{pwcat} program
+@cindex @code{BEGIN} pattern @subentry @code{pwcat} program
The @code{BEGIN} rule sets a private variable to the directory where
@command{pwcat} is stored. Because it is used to help out an @command{awk}
library
routine, we have chosen to put it in @file{/usr/local/libexec/awk};
@@ -22863,8 +22928,8 @@ occurrence (@code{_pw_bycount}).
The variable @code{_pw_inited} is used for efficiency, as @code{_pw_init()}
needs to be called only once.
-@cindex @code{PROCINFO} array, testing the field splitting
-@cindex @code{getline} command, @code{_pw_init()} function
+@cindex @code{PROCINFO} array @subentry testing the field splitting
+@cindex @code{getline} command @subentry @code{_pw_init()} function
Because this function uses @code{getline} to read information from
@command{pwcat}, it first saves the values of @code{FS}, @code{RS}, and
@code{$0}.
It notes in the variable @code{using_fw} whether field splitting
@@ -22889,12 +22954,14 @@ if necessary), @code{RS}, and @code{$0}.
The use of @code{@w{_pw_count}} is explained shortly.
@cindex @code{getpwnam()} function (C library)
+@cindex C library functions @subentry @code{getpwnam()}
The @code{getpwnam()} function takes a username as a string argument. If that
user is in the database, it returns the appropriate line. Otherwise, it
relies on the array reference to a nonexistent
element to create the element with the null string as its value:
@cindex @code{getpwnam()} user-defined function
+@cindex user-defined @subentry function @subentry @code{getpwnam()}
@example
@group
@c file eg/lib/passwdawk.in
@@ -22908,11 +22975,13 @@ function getpwnam(name)
@end example
@cindex @code{getpwuid()} function (C library)
+@cindex C library functions @subentry @code{getpwuid()}
Similarly, the @code{getpwuid()} function takes a user ID number
argument. If that user number is in the database, it returns the
appropriate line. Otherwise, it returns the null string:
@cindex @code{getpwuid()} user-defined function
+@cindex user-defined @subentry function @subentry @code{getpwuid()}
@example
@c file eg/lib/passwdawk.in
function getpwuid(uid)
@@ -22924,11 +22993,13 @@ function getpwuid(uid)
@end example
@cindex @code{getpwent()} function (C library)
+@cindex C library functions @subentry @code{getpwent()}
The @code{getpwent()} function simply steps through the database, one entry at
a time. It uses @code{_pw_count} to track its current position in the
@code{_pw_bycount} array:
@cindex @code{getpwent()} user-defined function
+@cindex user-defined @subentry function @subentry @code{getpwent()}
@example
@c file eg/lib/passwdawk.in
function getpwent()
@@ -22942,10 +23013,12 @@ function getpwent()
@end example
@cindex @code{endpwent()} function (C library)
+@cindex C library functions @subentry @code{endpwent()}
The @code{@w{endpwent()}} function resets @code{@w{_pw_count}} to zero, so that
subsequent calls to @code{getpwent()} start over again:
@cindex @code{endpwent()} user-defined function
+@cindex user-defined @subentry function @subentry @code{endpwent()}
@example
@c file eg/lib/passwdawk.in
function endpwent()
@@ -22980,17 +23053,19 @@ uses these functions.
@node Group Functions
@section Reading the Group Database
-@cindex libraries of @command{awk} functions, group database, reading
-@cindex functions, library, group database@comma{} reading
+@cindex libraries of @command{awk} functions @subentry group database, reading
+@cindex functions @subentry library @subentry group database, reading
@cindex group database, reading
-@cindex database, group, reading
-@cindex @code{PROCINFO} array, group membership and
+@cindex database @subentry group, reading
+@cindex @code{PROCINFO} array @subentry group membership and
@cindex @code{getgrent()} function (C library)
+@cindex C library functions @subentry @code{getgrent()}
@cindex @code{getgrent()} user-defined function
-@cindex groups@comma{} information about
+@cindex user-defined @subentry function @subentry @code{getgrent()}
+@cindex groups, information about
@cindex account information
@cindex group file
-@cindex files, group
+@cindex files @subentry group
Much of the discussion presented in
@ref{Passwd Functions}
applies to the group database as well. Although there has traditionally
@@ -23126,8 +23201,9 @@ $ @kbd{grcat}
Here are the functions for obtaining information from the group database.
There are several, modeled after the C library functions of the same names:
-@cindex @code{getline} command, @code{_gr_init()} user-defined function
+@cindex @code{getline} command @subentry @code{_gr_init()} user-defined
function
@cindex @code{_gr_init()} user-defined function
+@cindex user-defined @subentry function @subentry @code{_gr_init()}
@example
@c file eg/lib/groupawk.in
# group.awk --- functions for dealing with the group file
@@ -23241,6 +23317,7 @@ initializes @code{_gr_count} to zero
(it is used later), and makes @code{_gr_inited} nonzero.
@cindex @code{getgrnam()} function (C library)
+@cindex C library functions @subentry @code{getgrnam()}
The @code{getgrnam()} function takes a group name as its argument, and if that
group exists, it is returned.
Otherwise, it
@@ -23248,6 +23325,7 @@ relies on the array reference to a nonexistent
element to create the element with the null string as its value:
@cindex @code{getgrnam()} user-defined function
+@cindex user-defined @subentry function @subentry @code{getgrnam()}
@example
@c file eg/lib/groupawk.in
function getgrnam(group)
@@ -23259,10 +23337,12 @@ function getgrnam(group)
@end example
@cindex @code{getgrgid()} function (C library)
+@cindex C library functions @subentry @code{getgrgid()}
The @code{getgrgid()} function is similar; it takes a numeric group ID and
looks up the information associated with that group ID:
@cindex @code{getgrgid()} user-defined function
+@cindex user-defined @subentry function @subentry @code{getgrgid()}
@example
@c file eg/lib/groupawk.in
function getgrgid(gid)
@@ -23274,10 +23354,12 @@ function getgrgid(gid)
@end example
@cindex @code{getgruser()} function (C library)
+@cindex C library functions @subentry @code{getgruser()}
The @code{getgruser()} function does not have a C counterpart. It takes a
username and returns the list of groups that have the user as a member:
-@cindex @code{getgruser()} function, user-defined
+@cindex @code{getgruser()} user-defined function
+@cindex user-defined @subentry function @subentry @code{getgruser()}
@example
@c file eg/lib/groupawk.in
function getgruser(user)
@@ -23289,10 +23371,12 @@ function getgruser(user)
@end example
@cindex @code{getgrent()} function (C library)
+@cindex C library functions @subentry @code{getgrent()}
The @code{getgrent()} function steps through the database one entry at a time.
It uses @code{_gr_count} to track its position in the list:
@cindex @code{getgrent()} user-defined function
+@cindex user-defined @subentry function @subentry @code{getgrent()}
@example
@c file eg/lib/groupawk.in
function getgrent()
@@ -23308,10 +23392,12 @@ function getgrent()
@end example
@cindex @code{endgrent()} function (C library)
+@cindex C library functions @subentry @code{endgrent()}
The @code{endgrent()} function resets @code{_gr_count} to zero so that
@code{getgrent()} can
start over again:
@cindex @code{endgrent()} user-defined function
+@cindex user-defined @subentry function @subentry @code{endgrent()}
@example
@c file eg/lib/groupawk.in
function endgrent()
@@ -23348,6 +23434,7 @@ You call it with the array and a string representing
the name
of the array:
@cindex @code{walk_array()} user-defined function
+@cindex user-defined @subentry function @subentry @code{walk_array()}
@example
@c file eg/lib/walkarray.awk
function walk_array(arr, name, i)
@@ -23573,7 +23660,7 @@ output identical to that of the original version.
@node Sample Programs
@chapter Practical @command{awk} Programs
-@cindex @command{awk} programs, examples of
+@cindex @command{awk} programs @subentry examples of
@c FULLXREF ON
@ref{Library Functions},
@@ -23642,7 +23729,7 @@ cut.awk -- -c1-8 myfiles > results
@node Clones
@section Reinventing Wheels for Fun and Profit
-@cindex POSIX, programs@comma{} implementing in @command{awk}
+@cindex POSIX @subentry programs, implementing in @command{awk}
This @value{SECTION} presents a number of POSIX utilities implemented in
@command{awk}. Reinventing these programs in @command{awk} is often enjoyable,
@@ -23673,8 +23760,8 @@ The programs are presented in alphabetical order.
@cindex @command{cut} utility
@cindex @command{cut} utility
-@cindex fields, cutting
-@cindex columns, cutting
+@cindex fields @subentry cutting
+@cindex columns @subentry cutting
The @command{cut} utility selects, or ``cuts,'' characters or fields
from its standard input and sends them to its standard output.
Fields are separated by TABs by default,
@@ -23754,8 +23841,8 @@ function usage()
@c endfile
@end example
-@cindex @code{BEGIN} pattern, running @command{awk} programs and
-@cindex @code{FS} variable, running @command{awk} programs and
+@cindex @code{BEGIN} pattern @subentry running @command{awk} programs and
+@cindex @code{FS} variable @subentry running @command{awk} programs and
Next comes a @code{BEGIN} rule that parses the command-line options.
It sets @code{FS} to a single TAB character, because that is @command{cut}'s
default field separator. The rule then sets the output field separator to be
the
@@ -23801,7 +23888,7 @@ BEGIN @{
@c endfile
@end example
-@cindex field separators, spaces as
+@cindex field separator @subentry spaces as
The code must take
special care when the field delimiter is a space. Using
a single space (@code{@w{" "}}) for the value of @code{FS} is
@@ -23993,9 +24080,9 @@ of picking the input line apart by characters.
@node Egrep Program
@subsection Searching for Regular Expressions in Files
-@cindex regular expressions, searching for
-@cindex searching, files for regular expressions
-@cindex files, searching for regular expressions
+@cindex regular expressions @subentry searching for
+@cindex searching @subentry files for regular expressions
+@cindex files @subentry searching for regular expressions
@cindex @command{egrep} utility
The @command{egrep} utility searches files for patterns. It uses regular
expressions that are almost identical to those available in @command{awk}
@@ -24208,8 +24295,8 @@ print the @value{FN}, and then skip to the next file
with @code{nextfile}.
Finally, each line is printed, with a leading @value{FN} and colon
if necessary:
-@cindex @code{!} (exclamation point), @code{!} operator
-@cindex exclamation point (@code{!}), @code{!} operator
+@cindex @code{!} (exclamation point) @subentry @code{!} operator
+@cindex exclamation point (@code{!}) @subentry @code{!} operator
@example
@c file eg/prog/egrep.awk
@{
@@ -24269,8 +24356,8 @@ function usage()
@node Id Program
@subsection Printing Out User Information
-@cindex printing, user information
-@cindex users, information about, printing
+@cindex printing @subentry user information
+@cindex users, information about @subentry printing
@cindex @command{id} utility
The @command{id} utility lists a user's real and effective user ID numbers,
real and effective group ID numbers, and the user's group set, if any.
@@ -24283,7 +24370,7 @@ $ @kbd{id}
@print{} uid=1000(arnold) gid=1000(arnold)
groups=1000(arnold),4(adm),7(lp),27(sudo)
@end example
-@cindex @code{PROCINFO} array, user and group ID numbers and
+@cindex @code{PROCINFO} array @subentry user and group ID numbers and
This information is part of what is provided by @command{gawk}'s
@code{PROCINFO} array (@pxref{Built-in Variables}).
However, the @command{id} utility provides a more palatable output than just
@@ -24410,7 +24497,7 @@ the empty string into this function saves several lines
of code.
@c FIXME: One day, update to current POSIX version of split
-@cindex files, splitting
+@cindex files @subentry splitting
@cindex @code{split} utility
The @command{split} program splits large text files into smaller pieces.
Usage is as follows:@footnote{This is the traditional usage. The
@@ -24552,8 +24639,8 @@ way as to solve the EBCDIC issue as well.
@node Tee Program
@subsection Duplicating Output into Multiple Files
-@cindex files, multiple@comma{} duplicating output into
-@cindex output, duplicating into files
+@cindex files @subentry multiple, duplicating output into
+@cindex output @subentry duplicating into files
@cindex @code{tee} utility
The @code{tee} program is known as a ``pipe fitting.'' @code{tee} copies
its standard input to its standard output and also duplicates it to the
@@ -24676,8 +24763,8 @@ END @{
@c FIXME: One day, update to current POSIX version of uniq
-@cindex printing, unduplicated lines of text
-@cindex text@comma{} printing, unduplicated lines of
+@cindex printing @subentry unduplicated lines of text
+@cindex text, printing @subentry unduplicated lines of
@cindex @command{uniq} utility
The @command{uniq} utility reads sorted lines of data on its standard
input, and by default removes duplicate lines. In other words, it only
@@ -24957,11 +25044,11 @@ suggestion.
@c FIXME: One day, update to current POSIX version of wc
-@cindex counting
-@cindex input files, counting elements in
-@cindex words, counting
-@cindex characters, counting
-@cindex lines, counting
+@cindex counting words, lines, and characters
+@cindex input files @subentry counting elements in
+@cindex words @subentry counting
+@cindex characters @subentry counting
+@cindex lines @subentry counting
@cindex @command{wc} utility
The @command{wc} (word count) utility counts lines, words, and characters in
one or more input files. Its usage is as follows:
@@ -25159,9 +25246,9 @@ We hope you find them both interesting and enjoyable.
@node Dupword Program
@subsection Finding Duplicated Words in a Document
-@cindex words, duplicate@comma{} searching for
-@cindex searching, for words
-@cindex documents@comma{} searching
+@cindex words @subentry duplicate, searching for
+@cindex searching @subentry for words
+@cindex documents, searching
A common error when writing large amounts of prose is to accidentally
duplicate words. Typically you will see this in text as something like ``the
the program does the following@dots{}'' When the text is online, often
@@ -25229,7 +25316,7 @@ word, comparing it to the previous one:
@node Alarm Program
@subsection An Alarm Clock Program
@cindex insomnia, cure for
-@cindex Robbins, Arnold
+@cindex Robbins @subentry Arnold
@quotation
@i{Nothing cures insomnia like a ringing alarm clock.}
@author Arnold Robbins
@@ -25261,7 +25348,7 @@ Aharon Robbins <address@hidden> wrote:
@author Erik Quanstrom
@end quotation
-@cindex time, alarm clock example program
+@cindex time @subentry alarm clock example program
@cindex alarm clock example program
The following program is a simple ``alarm clock'' program.
You give it a time of day and an optional message. At the specified time,
@@ -25272,6 +25359,7 @@ repetitions.
This program uses the @code{getlocaltime()} function from
@ref{Getlocaltime Function}.
+@cindex ASCII
All the work is done in the @code{BEGIN} rule. The first part is argument
checking and setting of defaults: the delay, the count, and the message to
print. If the user supplied a message without the ASCII BEL
@@ -25417,7 +25505,7 @@ seconds are necessary:
@node Translate Program
@subsection Transliterating Characters
-@cindex characters, transliterating
+@cindex characters @subentry transliterating
@cindex @command{tr} utility
The system @command{tr} utility transliterates characters. For example, it is
often used to map uppercase letters into lowercase for further processing:
@@ -25569,8 +25657,8 @@ for inspiration.
@node Labels Program
@subsection Printing Mailing Labels
-@cindex printing, mailing labels
-@cindex mailing labels@comma{} printing
+@cindex printing @subentry mailing labels
+@cindex mailing labels, printing
Here is a ``real-world''@footnote{``Real world'' is defined as
``a program actually used to get something done.''}
program. This
@@ -25701,7 +25789,7 @@ END @{
@node Word Sorting
@subsection Generating Word-Usage Counts
-@cindex words, usage counts@comma{} generating
+@cindex words @subentry usage counts, generating
When working with large amounts of text, it can be interesting to know
how often different words appear. For example, an author may overuse
@@ -25832,7 +25920,7 @@ to use the @command{sort} program.
@node History Sorting
@subsection Removing Duplicates from Unsorted Text
-@cindex lines, duplicate@comma{} removing
+@cindex lines @subentry duplicate, removing
The @command{uniq} program
(@pxref{Uniq Program})
removes duplicate lines from @emph{sorted} data.
@@ -25902,8 +25990,8 @@ seen.
@node Extract Program
@subsection Extracting Programs from Texinfo Source Files
-@cindex Texinfo, extracting programs from source files
-@cindex files, Texinfo@comma{} extracting programs from
+@cindex Texinfo @subentry extracting programs from source files
+@cindex files @subentry Texinfo, extracting programs from
@ifnotinfo
Both this chapter and the previous chapter
(@ref{Library Functions})
@@ -26279,8 +26367,8 @@ value of @code{RT}.
@node Igawk Program
@subsection An Easy Way to Use Library Functions
-@cindex libraries of @command{awk} functions, example program for using
-@cindex functions, library, example program for using
+@cindex libraries of @command{awk} functions @subentry example program for
using
+@cindex functions @subentry library @subentry example program for using
In @ref{Include Files}, we saw how @command{gawk} provides a built-in
file-inclusion capability. However, this is a @command{gawk} extension.
This @value{SECTION} provides the motivation for making file inclusion
@@ -27112,10 +27200,10 @@ things considerably. What problem does this engender
though?
@c answer, reading from "-" or /dev/stdin
@cindex search paths
-@cindex search paths, for source files
-@cindex source files@comma{} search path for
-@cindex files, source@comma{} search path for
-@cindex directories, searching
+@cindex search paths @subentry for source files
+@cindex source files, search path for
+@cindex files @subentry source, search path for
+@cindex directories @subentry searching @subentry for source files
@item
As an additional example of the idea that it is not always necessary to
add new features to a program, consider the idea of having two files in
@@ -27181,8 +27269,8 @@ It contains the following chapters:
@node Advanced Features
@chapter Advanced Features of @command{gawk}
-@cindex @command{gawk}, features, advanced
-@cindex advanced features, @command{gawk}
+@cindex @command{gawk} @subentry features @subentry advanced
+@cindex advanced features @subentry @command{gawk}
@ignore
Contributed by: Peter Langston <pud!address@hidden>
@@ -27250,9 +27338,9 @@ discusses the ability to dynamically add new built-in
functions to
@node Nondecimal Data
@section Allowing Nondecimal Input Data
@cindex @option{--non-decimal-data} option
-@cindex advanced features, nondecimal input data
-@cindex input, data@comma{} nondecimal
-@cindex constants, nondecimal
+@cindex advanced features @subentry nondecimal input data
+@cindex input @subentry data, nondecimal
+@cindex constants @subentry nondecimal
If you run @command{gawk} with the @option{--non-decimal-data} option,
you can have nondecimal values in your input data:
@@ -27290,9 +27378,9 @@ Because it is common to have decimal data with leading
zeros, and because
using this facility could lead to surprising results, the default is to leave
it
disabled. If you want it, you must explicitly request it.
-@cindex programming conventions, @code{--non-decimal-data} option
-@cindex @option{--non-decimal-data} option, @code{strtonum()} function and
-@cindex @code{strtonum()} function (@command{gawk}), @code{--non-decimal-data}
option and
+@cindex programming conventions @subentry @code{--non-decimal-data} option
+@cindex @option{--non-decimal-data} option @subentry @code{strtonum()}
function and
+@cindex @code{strtonum()} function (@command{gawk}) @subentry
@code{--non-decimal-data} option and
@quotation CAUTION
@emph{Use of this option is not recommended.}
It can break old programs very badly.
@@ -27583,6 +27671,7 @@ function should use the @code{isarray()} function
(@pxref{Type Functions})
to check for this, and choose a defined sorting order for subarrays.
+@cindex POSIX mode
All sorting based on @code{PROCINFO["sorted_in"]}
is disabled in POSIX mode,
because the @code{PROCINFO} array is not special in that case.
@@ -27599,11 +27688,14 @@ sorted array traversal is not the default.
@node Array Sorting Functions
@subsection Sorting Array Values and Indices with @command{gawk}
-@cindex arrays, sorting
+@cindex arrays @subentry sorting @subentry @code{asort()} function
(@command{gawk})
+@cindex arrays @subentry sorting @subentry @code{asorti()} function
(@command{gawk})
@cindexgawkfunc{asort}
-@cindex @code{asort()} function (@command{gawk}), arrays@comma{} sorting
+@cindex @code{asort()} function (@command{gawk}) @subentry arrays, sorting
+@cindex @code{asort()} function (@command{gawk}) @subentry side effects
@cindexgawkfunc{asorti}
-@cindex @code{asorti()} function (@command{gawk}), arrays@comma{} sorting
+@cindex @code{asorti()} function (@command{gawk}) @subentry arrays, sorting
+@cindex @code{asorti()} function (@command{gawk}) @subentry side effects
@cindex sort function, arrays, sorting
In most @command{awk} implementations, sorting an array requires writing
a @code{sort()} function. This can be educational for exploring
@@ -27627,7 +27719,8 @@ The default comparison is based on the type of the
elements
All numeric values come before all string values,
which in turn come before all subarrays.
-@cindex side effects, @code{asort()} function
+@cindex side effects @subentry @code{asort()} function
+@cindex side effects @subentry @code{asorti()} function
An important side effect of calling @code{asort()} is that
@emph{the array's original indices are irrevocably lost}.
As this isn't always desirable, @code{asort()} accepts a
@@ -27696,9 +27789,9 @@ both arrays use the values.
@end quotation
@c Document It And Call It A Feature. Sigh.
-@cindex @command{gawk}, @code{IGNORECASE} variable in
-@cindex arrays, sorting, @code{IGNORECASE} variable and
-@cindex @code{IGNORECASE} variable, array sorting functions and
+@cindex @command{gawk} @subentry @code{IGNORECASE} variable in
+@cindex arrays @subentry sorting @subentry @code{IGNORECASE} variable and
+@cindex @code{IGNORECASE} variable @subentry array sorting functions and
Because @code{IGNORECASE} affects string comparisons, the value
of @code{IGNORECASE} also affects sorting for both @code{asort()} and
@code{asorti()}.
Note also that the locale's sorting order does @emph{not}
@@ -27797,7 +27890,7 @@ Mike Brennan
@end smallexample
@end ignore
-@cindex advanced features, processes@comma{} communicating with
+@cindex advanced features @subentry processes, communicating with
@cindex processes, two-way communications with
It is often useful to be able to
send data to a separate program for
@@ -27828,10 +27921,10 @@ Brennan suggests the use of @command{rand()} to
generate unique
remain more difficult to use than two-way pipes.} @c 8/2014
@cindex coprocesses
-@cindex input/output, two-way
-@cindex @code{|} (vertical bar), @code{|&} operator (I/O)
-@cindex vertical bar (@code{|}), @code{|&} operator (I/O)
-@cindex @command{csh} utility, @code{|&} operator, comparison with
+@cindex input/output @subentry two-way
+@cindex @code{|} (vertical bar) @subentry @code{|&} operator (I/O)
+@cindex vertical bar (@code{|}) @subentry @code{|&} operator (I/O)
+@cindex @command{csh} utility @subentry @code{|&} operator, comparison with
However, with @command{gawk}, it is possible to
open a @emph{two-way} pipe to another process. The second process is
termed a @dfn{coprocess}, as it runs in parallel with @command{gawk}.
@@ -27867,8 +27960,8 @@ standard error goes. It is not possible to read the
child's
standard error separately.
@cindex deadlocks
-@cindex buffering, input/output
-@cindex @code{getline} command, deadlock and
+@cindex buffering @subentry input/output
+@cindex @code{getline} command @subentry deadlock and
@item
I/O buffering may be a problem. @command{gawk} automatically
flushes all output down the pipe to the coprocess.
@@ -27879,7 +27972,7 @@ known as @dfn{deadlock}, where each process is waiting
for the
other one to do something.
@end itemize
-@cindex @code{close()} function, two-way pipes and
+@cindex @code{close()} function @subentry two-way pipes and
It is possible to close just one end of the two-way pipe to
a coprocess, by supplying a second argument to the @code{close()}
function of either @code{"to"} or @code{"from"}
@@ -27888,7 +27981,7 @@ These strings tell @command{gawk} to close the end of
the pipe
that sends data to the coprocess or the end that reads from it,
respectively.
-@cindex @command{sort} utility, coprocesses and
+@cindex @command{sort} utility @subentry coprocesses and
This is particularly necessary in order to use
the system @command{sort} utility as part of a coprocess;
@command{sort} must read @emph{all} of its input
@@ -27923,6 +28016,7 @@ indication. This causes @command{sort} to sort the
data and write the
sorted data back to the @command{gawk} program. Once all of the data
has been read, @command{gawk} terminates the coprocess and exits.
+@cindex ASCII
As a side note, the assignment @samp{LC_ALL=C} in the @command{sort}
command ensures traditional Unix (ASCII) sorting from @command{sort}.
This is not strictly necessary here, but it's good to know how to do this.
@@ -27945,8 +28039,8 @@ or @code{getline}.
@xref{Nonfatal}, for more information.
@end quotation
-@cindex @command{gawk}, @code{PROCINFO} array in
-@cindex @code{PROCINFO} array, communications via ptys and
+@cindex @command{gawk} @subentry @code{PROCINFO} array in
+@cindex @code{PROCINFO} array @subentry communications via ptys and
You may also use pseudo-ttys (ptys) for
two-way communication instead of pipes, if your system supports them.
This is done on a per-command basis, by setting a special element
@@ -28033,15 +28127,15 @@ And now, magically, it works!
@node TCP/IP Networking
@section Using @command{gawk} for Network Programming
-@cindex advanced features, network programming
-@cindex networks, programming
+@cindex advanced features @subentry network programming
+@cindex networks @subentry programming
@cindex TCP/IP
@cindex @code{/inet/@dots{}} special files (@command{gawk})
-@cindex files, @code{/inet/@dots{}} (@command{gawk})
+@cindex files @subentry @code{/inet/@dots{}} (@command{gawk})
@cindex @code{/inet4/@dots{}} special files (@command{gawk})
-@cindex files, @code{/inet4/@dots{}} (@command{gawk})
+@cindex files @subentry @code{/inet4/@dots{}} (@command{gawk})
@cindex @code{/inet6/@dots{}} special files (@command{gawk})
-@cindex files, @code{/inet6/@dots{}} (@command{gawk})
+@cindex files @subentry @code{/inet6/@dots{}} (@command{gawk})
@cindex @code{EMRED}
@ifnotdocbook
@quotation
@@ -28096,6 +28190,7 @@ respectively. TCP should be used for most applications.
@item local-port
@cindex @code{getaddrinfo()} function (C library)
+@cindex C library functions @subentry @code{getaddrinfo()}
The local TCP or UDP port number to use. Use a port number of @samp{0}
when you want the system to pick a port. This is what you should do
when writing a TCP or UDP client.
@@ -28113,7 +28208,7 @@ Again, use @samp{0} if you don't care, or else a
well-known
service name.
@end table
-@cindex @command{gawk}, @code{ERRNO} variable in
+@cindex @command{gawk} @subentry @code{ERRNO} variable in
@cindex @code{ERRNO} variable
@quotation NOTE
Failure in opening a two-way socket will result in a nonfatal error
@@ -28160,10 +28255,10 @@ no way to access services available over Secure
Socket Layer
@node Profiling
@section Profiling Your @command{awk} Programs
-@cindex @command{awk} programs, profiling
+@cindex @command{awk} programs @subentry profiling
@cindex profiling @command{awk} programs
@cindex @code{awkprof.out} file
-@cindex files, @code{awkprof.out}
+@cindex files @subentry @code{awkprof.out}
You may produce execution traces of your @command{awk} programs.
This is done by passing the option @option{--profile} to @command{gawk}.
@@ -28231,8 +28326,8 @@ Here is the @file{awkprof.out} that results from
running the
illustrates that @command{awk} programmers sometimes get up very early
in the morning to work):
-@cindex @code{BEGIN} pattern, profiling and
-@cindex @code{END} pattern, profiling and
+@cindex @code{BEGIN} pattern @subentry profiling and
+@cindex @code{END} pattern @subentry profiling and
@example
# gawk profile, created Mon Sep 29 05:16:21 2014
@@ -28296,7 +28391,7 @@ Multiple @code{BEGIN} and @code{END} rules retain their
separate identities, as do
multiple @code{BEGINFILE} and @code{ENDFILE} rules.
-@cindex patterns, counts, in a profile
+@cindex patterns @subentry counts, in a profile
@item
Pattern--action rules have two counts.
The first count, to the left of the rule, shows how many times
@@ -28316,7 +28411,7 @@ is a count showing how many times the condition was
true.
The count for the @code{else}
indicates how many times the test failed.
-@cindex loops, count for header, in a profile
+@cindex loops @subentry count for header, in a profile
@item
The count for a loop header (such as @code{for}
or @code{while}) shows how many times the loop test was executed.
@@ -28324,8 +28419,8 @@ or @code{while}) shows how many times the loop test was
executed.
statement in a rule to determine how many times the rule was executed.
If the first statement is a loop, the count is misleading.)
-@cindex functions, user-defined, counts@comma{} in a profile
-@cindex user-defined, functions, counts@comma{} in a profile
+@cindex functions @subentry user-defined @subentry counts, in a profile
+@cindex user-defined @subentry functions @subentry counts, in a profile
@item
For user-defined functions, the count next to the @code{function}
keyword indicates how many times the function was called.
@@ -28339,8 +28434,8 @@ The layout uses ``K&R'' style with TABs.
Braces are used everywhere, even when
the body of an @code{if}, @code{else}, or loop is only a single statement.
-@cindex @code{()} (parentheses), in a profile
-@cindex parentheses @code{()}, in a profile
+@cindex @code{()} (parentheses) @subentry in a profile
+@cindex parentheses @code{()} @subentry in a profile
@item
Parentheses are used only where needed, as indicated by the structure
of the program and the precedence rules.
@@ -28395,8 +28490,9 @@ which is correct, but possibly unexpected.
(If a program uses both @samp{print $0} and plain
@samp{print}, that distinction is retained.)
-@cindex profiling @command{awk} programs, dynamically
-@cindex @command{gawk} program, dynamic profiling
+@cindex profiling @command{awk} programs @subentry dynamically
+@cindex @command{gawk} @subentry dynamic profiling
+@cindex @command{gawk} @subentry profiling programs
@cindex dynamic profiling
Besides creating profiles when a program has completed,
@command{gawk} can produce a profile while it is running.
@@ -28410,10 +28506,10 @@ $ @kbd{gawk --profile -f myprog &}
[1] 13992
@end example
-@cindex @command{kill} command@comma{} dynamic profiling
+@cindex @command{kill} command, dynamic profiling
@cindex @code{USR1} signal, for dynamic profiling
@cindex @code{SIGUSR1} signal, for dynamic profiling
-@cindex signals, @code{USR1}/@code{SIGUSR1}, for profiling
+@cindex signals @subentry @code{USR1}/@code{SIGUSR1}, for profiling
@noindent
The shell prints a job number and process ID number; in this case, 13992.
Use the @command{kill} command to send the @code{USR1} signal
@@ -28446,16 +28542,16 @@ profile file.
@cindex @code{HUP} signal, for dynamic profiling
@cindex @code{SIGHUP} signal, for dynamic profiling
-@cindex signals, @code{HUP}/@code{SIGHUP}, for profiling
+@cindex signals @subentry @code{HUP}/@code{SIGHUP}, for profiling
If you use the @code{HUP} signal instead of the @code{USR1} signal,
@command{gawk} produces the profile and the function call trace and then exits.
@cindex @code{INT} signal (MS-Windows)
@cindex @code{SIGINT} signal (MS-Windows)
-@cindex signals, @code{INT}/@code{SIGINT} (MS-Windows)
+@cindex signals @subentry @code{INT}/@code{SIGINT} (MS-Windows)
@cindex @code{QUIT} signal (MS-Windows)
@cindex @code{SIGQUIT} signal (MS-Windows)
-@cindex signals, @code{QUIT}/@code{SIGQUIT} (MS-Windows)
+@cindex signals @subentry @code{QUIT}/@code{SIGQUIT} (MS-Windows)
When @command{gawk} runs on MS-Windows systems, it uses the
@code{INT} and @code{QUIT} signals for producing the profile, and in
the case of the @code{INT} signal, @command{gawk} exits. This is
@@ -28475,8 +28571,8 @@ Once upon a time, the @option{--pretty-print} option
would also run
your program. This is no longer the case.
@end quotation
-@cindex profiling, pretty-printing, difference with
-@cindex pretty-printing, profiling, difference with
+@cindex profiling, pretty printing, difference with
+@cindex pretty printing @subentry profiling, difference with
There is a significant difference between the output created when
profiling, and that created when pretty-printing. Pretty-printed output
preserves the original comments that were in the program, although their
@@ -28560,9 +28656,9 @@ countries, they were able to sell more systems.
As a result, internationalization and localization
of programs and software systems became a common practice.
-@cindex internationalization, localization
-@cindex @command{gawk}, internationalization and, See internationalization
-@cindex internationalization, localization, @command{gawk} and
+@cindex internationalization @subentry localization
+@cindex @command{gawk} @subentry internationalization
@seeentry{internationalization}
+@cindex internationalization @subentry localization @subentry @command{gawk}
and
For many years, the ability to provide internationalization
was largely restricted to programs written in C and C++.
This @value{CHAPTER} describes the underlying library @command{gawk}
@@ -28588,8 +28684,8 @@ a requirement.
@section Internationalization and Localization
@cindex internationalization
-@cindex localization, See internationalization@comma{} localization
-@cindex localization
+@cindex localization @seeentry{internationalization, localization}
+@cindex internationalization @subentry localization
@dfn{Internationalization} means writing (or modifying) a program once,
in such a way that it can use multiple languages without requiring
further source code changes.
@@ -28614,7 +28710,7 @@ port doesn't support GNU @command{gettext}.
Therefore, these features are not available
if you are using one of those operating systems. Sorry.}
-@cindex portability, @command{gettext} library and
+@cindex portability @subentry @command{gettext} library and
When using GNU @command{gettext}, each application has its own
@dfn{text domain}. This is a unique name, such as @samp{kpilot} or
@samp{gawk},
that identifies the application.
@@ -28636,15 +28732,16 @@ A table with strings of option names is not (e.g.,
@command{gawk}'s
language).
@cindex @code{textdomain()} function (C library)
+@cindex C library functions @subentry @code{textdomain()}
@item
The programmer indicates the application's text domain
(@command{"guide"}) to the @command{gettext} library,
by calling the @code{textdomain()} function.
@cindex @code{.pot} files
-@cindex files, @code{.pot}
-@cindex portable object template files
-@cindex files, portable object template
+@cindex files @subentry @code{.pot}
+@cindex portable object @subentry template files
+@cindex files @subentry portable object @subentry template file (@file{.pot})
@item
Messages from the application are extracted from the source code and
collected into a portable object template file (@file{guide.pot}),
@@ -28654,9 +28751,9 @@ The original (usually English) messages serve as the
key for
lookup of the translations.
@cindex @code{.po} files
-@cindex files, @code{.po}
-@cindex portable object files
-@cindex files, portable object
+@cindex files @subentry @code{.po}
+@cindex portable object @subentry files
+@cindex files @subentry portable object
@item
For each language with a translator, @file{guide.pot}
is copied to a portable object file (@code{.po})
@@ -28664,9 +28761,9 @@ and translations are created and shipped with the
application.
For example, there might be a @file{fr.po} for a French translation.
@cindex @code{.gmo} files
-@cindex files, @code{.gmo}
+@cindex files @subentry @code{.gmo}
@cindex message object files
-@cindex files, message object
+@cindex files @subentry message object
@item
Each language's @file{.po} file is converted into a binary
message object (@file{.gmo}) file.
@@ -28679,15 +28776,16 @@ When @command{guide} is built and installed, the
binary translation files
are installed in a standard place.
@cindex @code{bindtextdomain()} function (C library)
+@cindex C library functions @subentry @code{bindtextdomain()}
@item
For testing and development, it is possible to tell @command{gettext}
to use @file{.gmo} files in a different directory than the standard
one by using the @code{bindtextdomain()} function.
-@cindex @code{.gmo} files, specifying directory of
-@cindex files, @code{.gmo}, specifying directory of
-@cindex message object files, specifying directory of
-@cindex files, message object, specifying directory of
+@cindex @code{.gmo} files @subentry specifying directory of
+@cindex files @subentry @code{.gmo} @subentry specifying directory of
+@cindex message object files @subentry specifying directory of
+@cindex files @subentry message object @subentry specifying directory of
@item
At runtime, @command{guide} looks up each string via a call
to @code{gettext()}. The returned string is the translated string
@@ -28701,6 +28799,7 @@ and forth.
@end enumerate
@cindex @code{gettext()} function (C library)
+@cindex C library functions @subentry @code{gettext()}
In C (or C++), the string marking and dynamic translation lookup
are accomplished by wrapping each string in a call to @code{gettext()}:
@@ -28711,8 +28810,8 @@ printf("%s", gettext("Don't Panic!\n"));
The tools that extract messages from source code pull out all
strings enclosed in calls to @code{gettext()}.
-@cindex @code{_} (underscore), C macro
-@cindex underscore (@code{_}), C macro
+@cindex @code{_} (underscore) @subentry C macro
+@cindex underscore (@code{_}) @subentry C macro
The GNU @command{gettext} developers, recognizing that typing
@samp{gettext(@dots{})} over and over again is both painful and ugly to look
at, use the macro @samp{_} (an underscore) to make things easier:
@@ -28725,8 +28824,8 @@ at, use the macro @samp{_} (an underscore) to make
things easier:
printf("%s", _("Don't Panic!\n"));
@end example
-@cindex internationalization, localization, locale categories
-@cindex @command{gettext} library, locale categories
+@cindex internationalization @subentry localization @subentry locale categories
+@cindex @command{gettext} library @subentry locale categories
@cindex locale categories
@noindent
This reduces the typing overhead to just three extra characters per string
@@ -28769,6 +28868,8 @@ such as @code{/[[:alnum:]]/}
@cindex monetary information, localization
@cindex currency symbols, localization
+@cindex internationalization @subentry localization @subentry monetary
information
+@cindex internationalization @subentry localization @subentry currency symbols
@cindex @code{LC_MONETARY} locale category
@item LC_MONETARY
Monetary information, such as the currency symbol, and whether the
@@ -28782,8 +28883,8 @@ use a comma every three decimal places and a period for
the decimal
point, while many Europeans do exactly the opposite:
1,234.56 versus 1.234,56.}
-@cindex time, localization and
-@cindex dates, information related to@comma{} localization
+@cindex time @subentry localization and
+@cindex dates @subentry information related to, localization
@cindex @code{LC_TIME} locale category
@item LC_TIME
Time- and date-related information, such as 12- or 24-hour clock, month printed
@@ -28796,6 +28897,7 @@ All of the above. (Not too useful in the context of
@command{gettext}.)
@quotation NOTE
@cindex @env{LANGUAGE} environment variable
+@cindex environment variables @subentry @env{LANGUAGE}
As described in @ref{Locales}, environment variables with the same
name as the locale categories (@env{LC_CTYPE}, @env{LC_ALL}, etc.)
influence @command{gawk}'s behavior (and that of other utilities).
@@ -28809,6 +28911,8 @@ look to see if @env{LANGUAGE} is defined, and if so,
use the shell's
@command{unset} command to remove it.
@end quotation
+@cindex @env{GAWK_LOCALE_DIR} environment variable
+@cindex environment variables @subentry @env{GAWK_LOCALE_DIR}
For testing translations of @command{gawk} itself, you can set
the @env{GAWK_LOCALE_DIR} environment variable. See the documentation
for the C @code{bindtextdomain()} function and also see
@@ -28816,7 +28920,7 @@ for the C @code{bindtextdomain()} function and also see
@node Programmer i18n
@section Internationalizing @command{awk} Programs
-@cindex @command{awk} programs, internationalizing
+@cindex @command{awk} programs @subentry internationalizing
@command{gawk} provides the following variables for
internationalization:
@@ -28828,8 +28932,8 @@ This variable indicates the application's text domain.
For compatibility with GNU @command{gettext}, the default
value is @code{"messages"}.
-@cindex internationalization, localization, marked strings
-@cindex strings, for localization
+@cindex internationalization @subentry localization @subentry marked strings
+@cindex strings @subentry for localization
@item _"your message here"
String constants marked with a leading underscore
are candidates for translation at runtime.
@@ -28878,10 +28982,10 @@ The default value for @var{category} is
@code{"LC_MESSAGES"}.
The same remarks about argument order as for the @code{dcgettext()} function
apply.
-@cindex @code{.gmo} files, specifying directory of
-@cindex files, @code{.gmo}, specifying directory of
-@cindex message object files, specifying directory of
-@cindex files, message object, specifying directory of
+@cindex @code{.gmo} files @subentry specifying directory of
+@cindex files @subentry @code{.gmo} @subentry specifying directory of
+@cindex message object files @subentry specifying directory of
+@cindex files @subentry message object @subentry specifying directory of
@cindexgawkfunc{bindtextdomain}
@item @code{bindtextdomain(@var{directory}} [@code{,} @var{domain} ]@code{)}
Change the directory in which
@@ -28899,8 +29003,8 @@ given @var{domain}.
To use these facilities in your @command{awk} program, follow these steps:
@enumerate
-@cindex @code{BEGIN} pattern, @code{TEXTDOMAIN} variable and
-@cindex @code{TEXTDOMAIN} variable, @code{BEGIN} pattern and
+@cindex @code{BEGIN} pattern @subentry @code{TEXTDOMAIN} variable and
+@cindex @code{TEXTDOMAIN} variable @subentry @code{BEGIN} pattern and
@item
Set the variable @code{TEXTDOMAIN} to the text domain of
your program. This is best done in a @code{BEGIN} rule
@@ -28915,8 +29019,8 @@ BEGIN @{
@}
@end example
-@cindex @code{_} (underscore), translatable string
-@cindex underscore (@code{_}), translatable string
+@cindex @code{_} (underscore) @subentry translatable strings
+@cindex underscore (@code{_}) @subentry translatable strings
@item
Mark all translatable strings with a leading underscore (@samp{_})
character. It @emph{must} be adjacent to the opening
@@ -28962,7 +29066,7 @@ printf(message, ncustomers)
@end example
-@cindex @code{LC_MESSAGES} locale category, @code{bindtextdomain()} function
(@command{gawk})
+@cindex @code{LC_MESSAGES} locale category @subentry @code{bindtextdomain()}
function (@command{gawk})
@item
During development, you might want to put the @file{.gmo}
file in a private directory for testing. This is done
@@ -28991,9 +29095,9 @@ and use translations from @command{awk}.
@section Translating @command{awk} Programs
@cindex @code{.po} files
-@cindex files, @code{.po}
-@cindex portable object files
-@cindex files, portable object
+@cindex files @subentry @code{.po}
+@cindex portable object @subentry files
+@cindex files @subentry portable object
Once a program's translatable strings have been marked, they must
be extracted to create the initial @file{.pot} file.
As part of translation, it is often helpful to rearrange the order
@@ -29013,10 +29117,10 @@ is covered.
@node String Extraction
@subsection Extracting Marked Strings
-@cindex strings, extracting
+@cindex strings @subentry extracting
@cindex @option{--gen-pot} option
-@cindex command-line options, string extraction
-@cindex string extraction (internationalization)
+@cindex command line @subentry options @subentry string extraction
+@cindex string @subentry extraction (internationalization)
@cindex marked string extraction (internationalization)
@cindex extraction, of marked strings (internationalization)
@@ -29050,7 +29154,7 @@ translations for @command{guide}.
@node Printf Ordering
@subsection Rearranging @code{printf} Arguments
-@cindex @code{printf} statement, positional specifiers
+@cindex @code{printf} statement @subentry positional specifiers
@cindex positional specifiers, @code{printf} statement
Format strings for @code{printf} and @code{sprintf()}
(@pxref{Printf})
@@ -29118,9 +29222,9 @@ comes first, then the integer position, and then the
@samp{$}.
This is somewhat counterintuitive.
@end quotation
-@cindex @code{printf} statement, positional specifiers, mixing with regular
formats
-@cindex positional specifiers, @code{printf} statement, mixing with regular
formats
-@cindex format specifiers, mixing regular with positional specifiers
+@cindex @code{printf} statement @subentry positional specifiers @subentry
mixing with regular formats
+@cindex positional specifiers, @code{printf} statement @subentry mixing with
regular formats
+@cindex format specifiers @subentry mixing regular with positional specifiers
@command{gawk} does not allow you to mix regular format specifiers
and those with positional specifiers in the same string:
@@ -29146,8 +29250,8 @@ is first written.
@node I18N Portability
@subsection @command{awk} Portability Issues
-@cindex portability, internationalization and
-@cindex internationalization, localization, portability and
+@cindex portability @subentry internationalization and
+@cindex internationalization @subentry localization @subentry portability and
@command{gawk}'s internationalization features were purposely chosen to
have as little impact as possible on the portability of @command{awk}
programs that use them to other versions of @command{awk}.
@@ -29168,7 +29272,7 @@ However, it is actually almost portable, requiring very
little
change:
@itemize @value{BULLET}
-@cindex @code{TEXTDOMAIN} variable, portability and
+@cindex @code{TEXTDOMAIN} variable @subentry portability and
@item
Assignments to @code{TEXTDOMAIN} won't have any effect,
because @code{TEXTDOMAIN} is not special in other @command{awk}
implementations.
@@ -29187,9 +29291,9 @@ and @code{bindtextdomain()}, the @command{awk} program
can be made to run, but
all the messages are output in the original language.
For example:
-@cindex @code{bindtextdomain()} function (@command{gawk}), portability and
-@cindex @code{dcgettext()} function (@command{gawk}), portability and
-@cindex @code{dcngettext()} function (@command{gawk}), portability and
+@cindex @code{bindtextdomain()} function (@command{gawk}) @subentry
portability and
+@cindex @code{dcgettext()} function (@command{gawk}) @subentry portability and
+@cindex @code{dcngettext()} function (@command{gawk}) @subentry portability and
@example
@c file eg/lib/libintl.awk
function bindtextdomain(dir, domain)
@@ -29303,7 +29407,6 @@ msgstr "Like, the scoop is"
@c endfile
@end example
-@cindex Linux
@cindex GNU/Linux
@quotation NOTE
The following instructions apply to GNU/Linux with the GNU C Library. Be
@@ -29317,6 +29420,14 @@ file and then to create the @file{guide.mo} file.
The directory has the form @file{@var{locale}/LC_MESSAGES}, where
@var{locale} is a locale name known to the C @command{gettext} routines.
+@cindex @env{LANGUAGE} environment variable
+@cindex environment variables @subentry @env{LANGUAGE}
+@cindex @env{LC_ALL} environment variable
+@cindex environment variables @subentry @env{LC_ALL}
+@cindex @env{LANG} environment variable
+@cindex environment variables @subentry @env{LANG}
+@cindex @env{LC_MESSAGES} environment variable
+@cindex environment variables @subentry @env{LC_MESSAGES}
How do we know which locale to use? It turns out that there are
four different environment variables used by the C @command{gettext} routines.
In order, they are @env{$LANGUAGE}, @env{$LC_ALL}, @env{$LANG}, and
@@ -29336,14 +29447,14 @@ We next make the directories:
$ @kbd{mkdir en_US.UTF-8 en_US.UTF-8/LC_MESSAGES}
@end example
-@cindex @code{.po} files, converting to @code{.mo}
-@cindex files, @code{.po}, converting to @code{.mo}
+@cindex @code{.po} files @subentry converting to @code{.mo}
+@cindex files @subentry @code{.po} @subentry converting to @code{.mo}
@cindex @code{.mo} files, converting from @code{.po}
-@cindex files, @code{.mo}, converting from @code{.po}
-@cindex portable object files, converting to message object files
-@cindex files, portable object, converting to message object files
-@cindex message object files, converting from portable object files
-@cindex files, message object, converting from portable object files
+@cindex files @subentry @code{.mo}, converting from @code{.po}
+@cindex portable object @subentry files @subentry converting to message object
files
+@cindex files @subentry portable object @subentry converting to message object
files
+@cindex message object files @subentry converting from portable object files
+@cindex files @subentry message object @subentry converting from portable
object files
@cindex @command{msgfmt} utility
The @command{msgfmt} utility converts the human-readable
@file{.po} file into a machine-readable @file{.mo} file.
@@ -29440,7 +29551,7 @@ a number of translations for its messages.
@node Debugger
@chapter Debugging @command{awk} Programs
-@cindex debugging @command{awk} programs
+@cindex debugging @subentry @command{awk} programs
@c The original text for this chapter was contributed by Efraim Yawitz.
@@ -29488,7 +29599,7 @@ In that case, what can you expect from such a tool?
The answer to that
depends on the language being debugged, but in general, you can expect at
least the following:
-@cindex debugger capabilities
+@cindex debugger @subentry capabilities
@itemize @value{BULLET}
@item
The ability to watch a program execute its instructions one by one,
@@ -29521,14 +29632,14 @@ functional program that you or someone else wrote).
@node Debugging Terms
@subsection Debugging Concepts
-@cindex debugger, concepts
+@cindex debugger @subentry concepts
Before diving in to the details, we need to introduce several
important concepts that apply to just about all debuggers.
The following list defines terms used throughout the rest of
this @value{CHAPTER}:
@table @dfn
-@cindex call stack (debugger)
+@cindex call stack @subentry explanation of
@cindex stack frame (debugger)
@item Stack frame
Programs generally call functions during the course of their execution.
@@ -29551,7 +29662,7 @@ invoked. Commands that print the call stack print
information about
each stack frame (as detailed later on).
@item Breakpoint
-@cindex breakpoint (debugger)
+@cindex breakpoint
During debugging, you often wish to let the program run until it
reaches a certain point, and then continue execution from there one
statement (or instruction) at a time. The way to do this is to set
@@ -29597,7 +29708,7 @@ does not work at the level of machine instructions.}
@section Sample @command{gawk} Debugging Session
@cindex sample debugging session
@cindex example debugging session
-@cindex debugging, example session
+@cindex debugging @subentry example session
In order to illustrate the use of @command{gawk} as a debugger, let's look at
a sample
debugging session. We will use the @command{awk} implementation of the
@@ -29612,7 +29723,7 @@ as our example.
@node Debugger Invocation
@subsection How to Start the Debugger
@cindex starting the debugger
-@cindex debugger, how to start
+@cindex debugger @subentry how to start
Starting the debugger is almost exactly like running @command{gawk} normally,
except you have to pass an additional option, @option{--debug}, or the
@@ -29635,7 +29746,7 @@ in the command line to the debugger rather than as part
of the @code{run}
command at the debugger prompt.)
The @option{-1} is an option to @file{uniq.awk}.
-@cindex debugger, prompt
+@cindex debugger @subentry prompt
Instead of immediately running the program on @file{inputfile}, as
@command{gawk} would ordinarily do, the debugger merely loads all
the program source files, compiles them internally, and then gives
@@ -29685,10 +29796,10 @@ a breakpoint in @file{uniq.awk} is at the beginning
of the function
@code{are_equal()}, which compares the current line with the previous one. To
set
the breakpoint, use the @code{b} (breakpoint) command:
-@cindex debugger, setting a breakpoint
-@cindex debugger, @code{breakpoint} command
-@cindex debugger, @code{break} command
-@cindex debugger, @code{b} command
+@cindex debugger @subentry setting a breakpoint
+@cindex debugger @subentry commands @subentry @code{breakpoint}
+@cindex debugger @subentry commands @subentry @code{break}
+@cindex debugger @subentry commands @subentry @code{b} (@code{break})
@example
gawk> @kbd{b are_equal}
@print{} Breakpoint 1 set at file `awklib/eg/prog/uniq.awk', line 63
@@ -29698,8 +29809,8 @@ The debugger tells us the file and line number where
the breakpoint is.
Now type @samp{r} or @samp{run} and the program runs until it hits
the breakpoint for the first time:
-@cindex debugger, running the program
-@cindex debugger, @code{run} command
+@cindex debugger @subentry running the program
+@cindex debugger @subentry commands @subentry @code{run}
@example
gawk> @kbd{r}
@print{} Starting program:
@@ -29715,9 +29826,9 @@ let's see how we got to where we are. At the prompt,
we type @samp{bt}
(short for ``backtrace''), and the debugger responds with a
listing of the current stack frames:
-@cindex debugger, stack frames, showing
-@cindex debugger, @code{bt} command
-@cindex debugger, @code{backtrace} command
+@cindex debugger @subentry stack frames, showing
+@cindex debugger @subentry commands @subentry @code{bt} (@code{backtrace})
+@cindex debugger @subentry commands @subentry @code{backtrace}
@example
gawk> @kbd{bt}
@print{} #0 are_equal(n, m, clast, cline, alast, aline)
@@ -29737,8 +29848,8 @@ of some variables. Let's say we type @samp{p n}
@code{n}, a parameter to @code{are_equal()}. Actually, the debugger
gives us:
-@cindex debugger, @code{print} command
-@cindex debugger, @code{p} command
+@cindex debugger @subentry commands @subentry @code{print}
+@cindex debugger @subentry commands @subentry @code{p} (@code{print})
@example
gawk> @kbd{p n}
@print{} n = untyped variable
@@ -29789,8 +29900,8 @@ be inside this function. To investigate further, we
must begin
``stepping through'' the lines of @code{are_equal()}. We start by typing
@samp{n} (for ``next''):
-@cindex debugger, @code{n} command
-@cindex debugger, @code{next} command
+@cindex debugger @subentry commands @subentry @code{n} (@code{next})
+@cindex debugger @subentry commands @subentry @code{next}
@example
@group
gawk> @kbd{n}
@@ -29836,7 +29947,7 @@ This information is useful enough (we now know that
none of the words were accidentally left out), but what if we want to see
inside the array?
-@cindex debugger, printing single array elements
+@cindex debugger @subentry printing single array elements
The first choice would be to use subscripts:
@example
@@ -29856,7 +29967,7 @@ This would be kind of slow for a 100-member array,
though, so
@command{gawk} provides a shortcut (reminiscent of another language
not to be mentioned):
-@cindex debugger, printing all array elements
+@cindex debugger @subentry printing all array elements
@example
gawk> @kbd{p @@alast}
@print{} alast["1"] = "awk"
@@ -29936,7 +30047,7 @@ Getting information
Miscellaneous
@end itemize
-@cindex debugger, repeating commands
+@cindex debugger @subentry repeating commands
Each of these are discussed in the following subsections.
In the following descriptions, commands that may be abbreviated
show the abbreviation on a second description line.
@@ -29966,12 +30077,12 @@ will otherwise just run as if it was not under the
debugger. The commands for
controlling breakpoints are:
@table @asis
-@cindex debugger commands, @code{b} (@code{break})
-@cindex debugger commands, @code{break}
+@cindex debugger @subentry commands @subentry @code{b} (@code{break})
+@cindex debugger @subentry commands @subentry @code{break}
@cindex @code{break} debugger command
@cindex @code{b} debugger command (alias for @code{break})
@cindex set breakpoint
-@cindex breakpoint, setting
+@cindex breakpoint @subentry setting
@item @code{break} [[@var{filename}@code{:}]@var{n} | @var{function}]
[@code{"@var{expression}"}]
@itemx @code{b} [[@var{filename}@code{:}]@var{n} | @var{function}]
[@code{"@var{expression}"}]
Without any argument, set a breakpoint at the next instruction
@@ -30001,10 +30112,10 @@ evaluates whenever the breakpoint is reached. If the
condition is true,
then the debugger stops execution and prompts for a command. Otherwise,
it continues executing the program.
-@cindex debugger commands, @code{clear}
+@cindex debugger @subentry commands @subentry @code{clear}
@cindex @code{clear} debugger command
-@cindex delete breakpoint, at location
-@cindex breakpoint at location, how to delete
+@cindex delete breakpoint @subentry at location
+@cindex breakpoint @subentry at location, how to delete
@item @code{clear} [[@var{filename}@code{:}]@var{n} | @var{function}]
Without any argument, delete any breakpoint at the next instruction
to be executed in the selected stack frame. If the program stops at
@@ -30023,9 +30134,9 @@ Delete breakpoint(s) set at line number @var{n} in
source file @var{filename}.
Delete breakpoint(s) set at entry to function @var{function}.
@end table
-@cindex debugger commands, @code{condition}
+@cindex debugger @subentry commands @subentry @code{condition}
@cindex @code{condition} debugger command
-@cindex breakpoint condition
+@cindex breakpoint @subentry condition
@item @code{condition} @var{n} @code{"@var{expression}"}
Add a condition to existing breakpoint or watchpoint @var{n}. The
condition is an @command{awk} expression @emph{enclosed in double quotes}
@@ -30036,27 +30147,27 @@ the debugger continues executing the program. If the
condition expression is
not specified, any existing condition is removed (i.e., the breakpoint or
watchpoint is made unconditional).
-@cindex debugger commands, @code{d} (@code{delete})
-@cindex debugger commands, @code{delete}
+@cindex debugger @subentry commands @subentry @code{d} (@code{delete})
+@cindex debugger @subentry commands @subentry @code{delete}
@cindex @code{delete} debugger command
@cindex @code{d} debugger command (alias for @code{delete})
-@cindex delete breakpoint, by number
-@cindex breakpoint, delete by number
+@cindex delete breakpoint @subentry by number
+@cindex breakpoint @subentry delete by number
@item @code{delete} [@var{n1 n2} @dots{}] [@var{n}--@var{m}]
@itemx @code{d} [@var{n1 n2} @dots{}] [@var{n}--@var{m}]
Delete specified breakpoints or a range of breakpoints. Delete
all defined breakpoints if no argument is supplied.
-@cindex debugger commands, @code{disable}
+@cindex debugger @subentry commands @subentry @code{disable}
@cindex @code{disable} debugger command
@cindex disable breakpoint
-@cindex breakpoint, how to disable or enable
+@cindex breakpoint @subentry how to disable or enable
@item @code{disable} [@var{n1 n2} @dots{} | @var{n}--@var{m}]
Disable specified breakpoints or a range of breakpoints. Without
any argument, disable all breakpoints.
-@cindex debugger commands, @code{e} (@code{enable})
-@cindex debugger commands, @code{enable}
+@cindex debugger @subentry commands @subentry @code{e} (@code{enable})
+@cindex debugger @subentry commands @subentry @code{enable}
@cindex @code{enable} debugger command
@cindex @code{e} debugger command (alias for @code{enable})
@cindex enable breakpoint
@@ -30077,15 +30188,15 @@ Enable the breakpoints temporarily, then disable each
one when
the program stops at it.
@end table
-@cindex debugger commands, @code{ignore}
+@cindex debugger @subentry commands @subentry @code{ignore}
@cindex @code{ignore} debugger command
@cindex ignore breakpoint
@item @code{ignore} @var{n} @var{count}
Ignore breakpoint number @var{n} the next @var{count} times it is
hit.
-@cindex debugger commands, @code{t} (@code{tbreak})
-@cindex debugger commands, @code{tbreak}
+@cindex debugger @subentry commands @subentry @code{t} (@code{tbreak})
+@cindex debugger @subentry commands @subentry @code{tbreak}
@cindex @code{tbreak} debugger command
@cindex @code{t} debugger command (alias for @code{tbreak})
@cindex temporary breakpoint
@@ -30103,13 +30214,13 @@ and observing its behavior. There are more commands
for controlling
execution of the program than we saw in our earlier example:
@table @asis
-@cindex debugger commands, @code{commands}
+@cindex debugger @subentry commands @subentry @code{commands}
@cindex @code{commands} debugger command
-@cindex debugger commands, @code{silent}
+@cindex debugger @subentry commands @subentry @code{silent}
@cindex @code{silent} debugger command
-@cindex debugger commands, @code{end}
+@cindex debugger @subentry commands @subentry @code{end}
@cindex @code{end} debugger command
-@cindex breakpoint commands
+@cindex breakpoint @subentry commands to execute at
@cindex commands to execute at breakpoint
@item @code{commands} [@var{n}]
@itemx @code{silent}
@@ -30136,8 +30247,8 @@ gawk> @kbd{commands}
gawk>
@end example
-@cindex debugger commands, @code{c} (@code{continue})
-@cindex debugger commands, @code{continue}
+@cindex debugger @subentry commands @subentry @code{c} (@code{continue})
+@cindex debugger @subentry commands @subentry @code{continue}
@cindex continue program, in debugger
@cindex @code{continue} debugger command
@item @code{continue} [@var{count}]
@@ -30146,14 +30257,14 @@ Resume program execution. If continued from a
breakpoint and @var{count} is
specified, ignore the breakpoint at that location the next @var{count} times
before stopping.
-@cindex debugger commands, @code{finish}
+@cindex debugger @subentry commands @subentry @code{finish}
@cindex @code{finish} debugger command
@item @code{finish}
Execute until the selected stack frame returns.
Print the returned value.
-@cindex debugger commands, @code{n} (@code{next})
-@cindex debugger commands, @code{next}
+@cindex debugger @subentry commands @subentry @code{n} (@code{next})
+@cindex debugger @subentry commands @subentry @code{next}
@cindex @code{next} debugger command
@cindex @code{n} debugger command (alias for @code{next})
@cindex single-step execution, in the debugger
@@ -30163,15 +30274,15 @@ Continue execution to the next source line, stepping
over function calls.
The argument @var{count} controls how many times to repeat the action, as
in @code{step}.
-@cindex debugger commands, @code{ni} (@code{nexti})
-@cindex debugger commands, @code{nexti}
+@cindex debugger @subentry commands @subentry @code{ni} (@code{nexti})
+@cindex debugger @subentry commands @subentry @code{nexti}
@cindex @code{nexti} debugger command
@cindex @code{ni} debugger command (alias for @code{nexti})
@item @code{nexti} [@var{count}]
@itemx @code{ni} [@var{count}]
Execute one (or @var{count}) instruction(s), stepping over function calls.
-@cindex debugger commands, @code{return}
+@cindex debugger @subentry commands @subentry @code{return}
@cindex @code{return} debugger command
@item @code{return} [@var{value}]
Cancel execution of a function call. If @var{value} (either a string or a
@@ -30180,8 +30291,8 @@ frame other than the innermost one (the currently
executing function; i.e.,
frame number 0), discard all inner frames in addition to the selected one,
and the caller of that frame becomes the innermost frame.
-@cindex debugger commands, @code{r} (@code{run})
-@cindex debugger commands, @code{run}
+@cindex debugger @subentry commands @subentry @code{r} (@code{run})
+@cindex debugger @subentry commands @subentry @code{run}
@cindex @code{run} debugger command
@cindex @code{r} debugger command (alias for @code{run})
@item @code{run}
@@ -30190,8 +30301,8 @@ Start/restart execution of the program. When
restarting, the debugger
retains the current breakpoints, watchpoints, command history,
automatic display variables, and debugger options.
-@cindex debugger commands, @code{s} (@code{step})
-@cindex debugger commands, @code{step}
+@cindex debugger @subentry commands @subentry @code{s} (@code{step})
+@cindex debugger @subentry commands @subentry @code{step}
@cindex @code{step} debugger command
@cindex @code{s} debugger command (alias for @code{step})
@item @code{step} [@var{count}]
@@ -30201,8 +30312,8 @@ current stack frame, stepping inside any function
called within
the line. If the argument @var{count} is supplied, steps that many times
before
stopping, unless it encounters a breakpoint or watchpoint.
-@cindex debugger commands, @code{si} (@code{stepi})
-@cindex debugger commands, @code{stepi}
+@cindex debugger @subentry commands @subentry @code{si} (@code{stepi})
+@cindex debugger @subentry commands @subentry @code{stepi}
@cindex @code{stepi} debugger command
@cindex @code{si} debugger command (alias for @code{stepi})
@item @code{stepi} [@var{count}]
@@ -30211,8 +30322,8 @@ Execute one (or @var{count}) instruction(s), stepping
inside function calls.
(For illustration of what is meant by an ``instruction'' in @command{gawk},
see the output shown under @code{dump} in @ref{Miscellaneous Debugger
Commands}.)
-@cindex debugger commands, @code{u} (@code{until})
-@cindex debugger commands, @code{until}
+@cindex debugger @subentry commands @subentry @code{u} (@code{until})
+@cindex debugger @subentry commands @subentry @code{until}
@cindex @code{until} debugger command
@cindex @code{u} debugger command (alias for @code{until})
@item @code{until} [[@var{filename}@code{:}]@var{n} | @var{function}]
@@ -30229,7 +30340,7 @@ stack frame returns.
The commands for viewing and changing variables inside of @command{gawk} are:
@table @asis
-@cindex debugger commands, @code{display}
+@cindex debugger @subentry commands @subentry @code{display}
@cindex @code{display} debugger command
@item @code{display} [@var{var} | @code{$}@var{n}]
Add variable @var{var} (or field @code{$@var{n}}) to the display list.
@@ -30249,7 +30360,7 @@ no such variable of the given name exists.
Without argument, @code{display} displays the current values of
items on the list.
-@cindex debugger commands, @code{eval}
+@cindex debugger @subentry commands @subentry @code{eval}
@cindex @code{eval} debugger command
@cindex evaluate expressions, in debugger
@item @code{eval "@var{awk statements}"}
@@ -30276,8 +30387,8 @@ This form of @code{eval} is similar, but it allows you
to define
@var{awk statements}, instead of using variables or function
parameters defined by the program.
-@cindex debugger commands, @code{p} (@code{print})
-@cindex debugger commands, @code{print}
+@cindex debugger @subentry commands @subentry @code{p} (@code{print})
+@cindex debugger @subentry commands @subentry @code{print}
@cindex @code{print} debugger command
@cindex @code{p} debugger command (alias for @code{print})
@cindex print variables, in debugger
@@ -30304,7 +30415,7 @@ gawk> @kbd{print @@a}
This prints the indices and the corresponding values for all elements in
the array @code{a}.
-@cindex debugger commands, @code{printf}
+@cindex debugger @subentry commands @subentry @code{printf}
@cindex @code{printf} debugger command
@item @code{printf} @var{format} [@code{,} @var{arg} @dots{}]
Print formatted text. The @var{format} may include escape sequences,
@@ -30312,7 +30423,7 @@ such as @samp{\n}
(@pxref{Escape Sequences}).
No newline is printed unless one is specified.
-@cindex debugger commands, @code{set}
+@cindex debugger @subentry commands @subentry @code{set}
@cindex @code{set} debugger command
@cindex assign values to variables, in debugger
@item @code{set} @var{var}@code{=}@var{value}
@@ -30323,8 +30434,8 @@ String values must be enclosed between double quotes
(@code{"}@dots{}@code{"}).
You can also set special @command{awk} variables, such as @code{FS},
@code{NF}, @code{NR}, and so on.
-@cindex debugger commands, @code{w} (@code{watch})
-@cindex debugger commands, @code{watch}
+@cindex debugger @subentry commands @subentry @code{w} (@code{watch})
+@cindex debugger @subentry commands @subentry @code{watch}
@cindex @code{watch} debugger command
@cindex @code{w} debugger command (alias for @code{watch})
@cindex set watchpoint
@@ -30342,14 +30453,14 @@ evaluates whenever the watchpoint is reached. If the
condition is true,
then the debugger stops execution and prompts for a command. Otherwise,
@command{gawk} continues executing the program.
-@cindex debugger commands, @code{undisplay}
+@cindex debugger @subentry commands @subentry @code{undisplay}
@cindex @code{undisplay} debugger command
@cindex stop automatic display, in debugger
@item @code{undisplay} [@var{n}]
Remove item number @var{n} (or all items, if no argument) from the
automatic display list.
-@cindex debugger commands, @code{unwatch}
+@cindex debugger @subentry commands @subentry @code{unwatch}
@cindex @code{unwatch} debugger command
@cindex delete watchpoint
@item @code{unwatch} [@var{n}]
@@ -30368,13 +30479,13 @@ and also move around in the stack to see what the
state of things was in the
functions that called the one you are in. The commands for doing this are:
@table @asis
-@cindex debugger commands, @code{bt} (@code{backtrace})
-@cindex debugger commands, @code{backtrace}
-@cindex debugger commands, @code{where} (@code{backtrace})
+@cindex debugger @subentry commands @subentry @code{bt} (@code{backtrace})
+@cindex debugger @subentry commands @subentry @code{backtrace}
+@cindex debugger @subentry commands @subentry @code{where} (@code{backtrace})
@cindex @code{backtrace} debugger command
@cindex @code{bt} debugger command (alias for @code{backtrace})
@cindex @code{where} debugger command (alias for @code{backtrace})
-@cindex call stack, display in debugger
+@cindex call stack @subentry display in debugger
@cindex traceback, display in debugger
@item @code{backtrace} [@var{count}]
@itemx @code{bt} [@var{count}]
@@ -30386,14 +30497,14 @@ function, the source @value{FN}, and the line number.
The alias @code{where} for @code{backtrace} is provided for longtime
GDB users who may be used to that command.
-@cindex debugger commands, @code{down}
+@cindex debugger @subentry commands @subentry @code{down}
@cindex @code{down} debugger command
@item @code{down} [@var{count}]
Move @var{count} (default 1) frames down the stack toward the innermost frame.
Then select and print the frame.
-@cindex debugger commands, @code{f} (@code{frame})
-@cindex debugger commands, @code{frame}
+@cindex debugger @subentry commands @subentry @code{f} (@code{frame})
+@cindex debugger @subentry commands @subentry @code{frame}
@cindex @code{frame} debugger command
@cindex @code{f} debugger command (alias for @code{frame})
@item @code{frame} [@var{n}]
@@ -30404,7 +30515,7 @@ called the innermost one. The highest-numbered frame is
the one for the
main program. The printed information consists of the frame number,
function and argument names, source file, and the source line.
-@cindex debugger commands, @code{up}
+@cindex debugger @subentry commands @subentry @code{up}
@cindex @code{up} debugger command
@item @code{up} [@var{count}]
Move @var{count} (default 1) frames up the stack toward the outermost frame.
@@ -30422,8 +30533,8 @@ is used with one of a number of arguments that tell it
exactly what
you want to know:
@table @asis
-@cindex debugger commands, @code{i} (@code{info})
-@cindex debugger commands, @code{info}
+@cindex debugger @subentry commands @subentry @code{i} (@code{info})
+@cindex debugger @subentry commands @subentry @code{info}
@cindex @code{info} debugger command
@cindex @code{i} debugger command (alias for @code{info})
@item @code{info} @var{what}
@@ -30433,11 +30544,13 @@ The value for @var{what} should be one of the
following:
@c nested table
@table @code
@item args
-@cindex show function arguments, in debugger
+@cindex show in debugger @subentry function arguments
+@cindex function arguments, show in debugger
List arguments of the selected frame.
@item break
-@cindex show breakpoints
+@cindex show in debugger @subentry breakpoints
+@cindex breakpoint @subentry show all in debugger
List all currently set breakpoints.
@item display
@@ -30450,15 +30563,19 @@ Give a description of the selected stack frame.
@item functions
@cindex list function definitions, in debugger
+@cindex function definitions, list in debugger
List all function definitions including source @value{FN}s and
line numbers.
@item locals
-@cindex show local variables, in debugger
+@cindex show in debugger @subentry local variables
+@cindex local variables @subentry show in debugger
List local variables of the selected frame.
@item source
-@cindex show name of current source file, in debugger
+@cindex show in debugger @subentry name of current source file
+@cindex current source file, show in debugger
+@cindex source file, show in debugger
Print the name of the current source file. Each time the program stops, the
current source file is the file containing the current instruction.
When the debugger first starts, the current source file is the first file
@@ -30467,15 +30584,18 @@ included via the @option{-f} option. The
be used at any time to change the current source.
@item sources
-@cindex show all source files, in debugger
+@cindex show in debugger @subentry all source files
+@cindex all source files, show in debugger
List all program sources.
@item variables
@cindex list all global variables, in debugger
+@cindex global variables, show in debugger
List all global variables.
@item watch
-@cindex show watchpoints
+@cindex show in debugger @subentry watchpoints
+@cindex watchpoints, show in debugger
List all items in the watch list.
@end table
@end table
@@ -30485,12 +30605,12 @@ save the debugger's state, and the ability to run
debugger commands
from a file. The commands are:
@table @asis
-@cindex debugger commands, @code{o} (@code{option})
-@cindex debugger commands, @code{option}
+@cindex debugger @subentry commands @subentry @code{o} (@code{option})
+@cindex debugger @subentry commands @subentry @code{option}
@cindex @code{option} debugger command
@cindex @code{o} debugger command (alias for @code{option})
@cindex display debugger options
-@cindex debugger, options
+@cindex debugger @subentry options
@item @code{option} [@var{name}[@code{=}@var{value}]]
@itemx @code{o} [@var{name}[@code{=}@var{value}]]
Without an argument, display the available debugger options
@@ -30503,12 +30623,12 @@ The available options are:
@c asis for docbook
@table @asis
@item @code{history_size}
-@cindex debugger, history size
+@cindex debugger @subentry history size
Set the maximum number of lines to keep in the history file
@file{./.gawk_history}. The default is 100.
@item @code{listsize}
-@cindex debugger, default list amount
+@cindex debugger @subentry default list amount
Specify the number of lines that @code{list} prints. The default is 15.
@item @code{outfile}
@@ -30518,11 +30638,11 @@ to standard output. An empty string (@code{""})
resets output to
standard output.
@item @code{prompt}
-@cindex debugger, prompt
+@cindex debugger @subentry prompt
Change the debugger prompt. The default is @samp{@w{gawk> }}.
@item @code{save_history} [@code{on} | @code{off}]
-@cindex debugger, history file
+@cindex debugger @subentry history file
Save command history to file @file{./.gawk_history}.
The default is @code{on}.
@@ -30534,17 +30654,17 @@ Options are read back into the next session upon
startup.
@item @code{trace} [@code{on} | @code{off}]
@cindex instruction tracing, in debugger
-@cindex debugger, instruction tracing
+@cindex debugger @subentry instruction tracing
Turn instruction tracing on or off. The default is @code{off}.
@end table
-@cindex debugger, save commands to a file
+@cindex debugger @subentry save commands to a file
@item @code{save} @var{filename}
Save the commands from the current session to the given @value{FN},
so that they can be replayed using the @command{source} command.
@item @code{source} @var{filename}
-@cindex debugger, read commands from a file
+@cindex debugger @subentry read commands from a file
Run command(s) from a file; an error in any command does not
terminate execution of subsequent commands. Comments (lines starting
with @samp{#}) are allowed in a command file.
@@ -30568,7 +30688,7 @@ There are a few more commands that do not fit into the
previous categories, as follows:
@table @asis
-@cindex debugger commands, @code{dump}
+@cindex debugger @subentry commands @subentry @code{dump}
@cindex @code{dump} debugger command
@item @code{dump} [@var{filename}]
Dump byte code of the program to standard output or to the file
@@ -30638,8 +30758,8 @@ gawk>
Exit the debugger.
See the entry for @samp{quit}, later in this list.
-@cindex debugger commands, @code{h} (@code{help})
-@cindex debugger commands, @code{help}
+@cindex debugger @subentry commands @subentry @code{h} (@code{help})
+@cindex debugger @subentry commands @subentry @code{help}
@cindex @code{help} debugger command
@cindex @code{h} debugger command (alias for @code{help})
@item @code{help}
@@ -30648,8 +30768,8 @@ Print a list of all of the @command{gawk} debugger
commands with a short
summary of their usage. @samp{help @var{command}} prints the information
about the command @var{command}.
-@cindex debugger commands, @code{l} (@code{list})
-@cindex debugger commands, @code{list}
+@cindex debugger @subentry commands @subentry @code{l} (@code{list})
+@cindex debugger @subentry commands @subentry @code{list}
@cindex @code{list} debugger command
@cindex @code{l} debugger command (alias for @code{list})
@item @code{list} [@code{-} | @code{+} | @var{n} |
@var{filename}@code{:}@var{n} | @var{n}--@var{m} | @var{function}]
@@ -30682,8 +30802,8 @@ Print lines centered around the beginning of the
function @var{function}. This command may change the current source file.
@end table
-@cindex debugger commands, @code{q} (@code{quit})
-@cindex debugger commands, @code{quit}
+@cindex debugger @subentry commands @subentry @code{q} (@code{quit})
+@cindex debugger @subentry commands @subentry @code{quit}
@cindex @code{quit} debugger command
@cindex @code{q} debugger command (alias for @code{quit})
@cindex exit the debugger
@@ -30695,7 +30815,7 @@ and are free to go on to the next one! As we saw
earlier, if you are
running a program, the debugger warns you when you type
@samp{q} or @samp{quit}, to make sure you really want to quit.
-@cindex debugger commands, @code{trace}
+@cindex debugger @subentry commands @subentry @code{trace}
@cindex @code{trace} debugger command
@item @code{trace} [@code{on} | @code{off}]
Turn on or off continuous printing of the instructions that are about to
@@ -30711,9 +30831,9 @@ fairly self-explanatory, and using @code{stepi} and
@code{nexti} while
@node Readline Support
@section Readline Support
@cindex command completion, in debugger
-@cindex debugger, command completion
+@cindex debugger @subentry command completion
@cindex history expansion, in debugger
-@cindex debugger, history expansion
+@cindex debugger @subentry history expansion
If @command{gawk} is compiled with
@uref{http://cnswww.cns.cwru.edu/php/chet/readline/readline.html,
@@ -30752,7 +30872,7 @@ and
@node Limitations
@section Limitations
-@cindex debugger, limitations
+@cindex debugger @subentry limitations
We hope you find the @command{gawk} debugger useful and enjoyable to work with,
but as with any program, especially in its early releases, it still has
some limitations. A few that it's worth being aware of are:
@@ -30944,8 +31064,8 @@ please report them (@xref{Bugs}).
@node Global Namespace
@section Standard @command{awk}'s Single Namespace
-@cindex namespace, definition of
-@cindex namespace, standard @command{awk}, global
+@cindex namespace @subentry definition of
+@cindex namespace @subentry standard @command{awk}, global
In standard @command{awk}, there is a single, global, @dfn{namespace}.
This means that @emph{all} function names and global variable names must
be unique. For example, two different @command{awk} source files cannot
@@ -30975,9 +31095,10 @@ simple mechanism to put functions and global variables
into separate namespaces.
@node Qualified Names
@section Qualified Names
-@cindex qualified name, definition of
-@cindex namespaces, qualified names
-@cindex @code{::}, namespace separator
+@cindex qualified name @subentry definition of
+@cindex namespaces @subentry qualified names
+@cindex @code{:} (colon) @subentry @code{::} namespace separator
+@cindex colon (@code{:}) @subentry @code{::} namespace separator
@cindex component name
A @dfn{qualified name} is an identifier that includes a namespace name,
the namespace separator @code{::}, and a @dfn{component} name. For example,
one
@@ -30991,7 +31112,7 @@ Unlike C++, the @code{::} is @emph{not} an operator.
No spaces are
allowed between the namespace name, the @code{::}, and the component name.
@end quotation
-@cindex qualified name, use of
+@cindex qualified name @subentry use of
You must use qualified names from one namespace to access variables
and functions in another. This is especially important when using
variable names to index the special @code{SYMTAB} array (@pxref{Auto-set}),
@@ -31000,9 +31121,9 @@ and when making indirect function calls
(@pxref{Indirect Calls}).
@node Default Namespace
@section The Default Namespace
-@cindex namespace, default
-@cindex namespace, @code{awk}
-@cindex @code{awk} namespace
+@cindex namespace @subentry default
+@cindex namespace @subentry @code{awk}
+@cindex @code{awk} @subentry namespace
The default namespace, not surprisingly, is @code{awk}.
All of the predefined @command{awk} and @command{gawk} variables
are in this namespace, and thus have qualified names like
@@ -31019,8 +31140,10 @@ It also keeps your code looking natural.
@node Changing The Namespace
@section Changing The Namespace
-@cindex namespaces, changing
-@cindex @code{@@namespace} directive
+@cindex namespaces @subentry changing
+@cindex @code{@@} (at-sign) @subentry @code{@@namespace} directive
+@cindex at-sign (@code{@@}) @subentry @code{@@namespace} directive
+@cindex @code{@@namespace} directive @sortas{namespace directive}
In order to set the current namespace, use an @code{@@namespace} directive
at the top level of your program:
@@ -31045,7 +31168,7 @@ no concept of a ``current'' namespace once your program
starts executing.
Be sure you understand this.
@end quotation
-@cindex namespace, implicit
+@cindex namespace @subentry implicit
@cindex implicit namespace
Each source file for @option{-i} and @option{-f} starts out with
an implicit @samp{@@namespace "awk"}. Similarly, each chunk of
@@ -31053,7 +31176,7 @@ command-line code supplied with @option{-e} has such an
implicit
initial statement (@pxref{Options}).
@cindex current namespace, pushing and popping
-@cindex namespace, pushing and popping
+@cindex namespace @subentry pushing and popping
Files included with @code{@@include} (@pxref{Include Files}) ``push''
and ``pop'' the current namespace. That is, each @code{@@include} saves
the current namespace and starts over with an implicit @samp{@@namespace
@@ -31062,20 +31185,23 @@ directive is seen. When @command{gawk} finishes
processing the included
file, the saved namespace is restored and processing continues where it
left off in the original file.
-@cindex @code{@@namespace}, no effect on @code{BEGIN}@comma{}
@code{BEGINFILE}@comma{} @code{END}@comma{} and @code{ENDFILE}
-@cindex @code{BEGIN} pattern, execution order not affected by
@code{@@namespace}
-@cindex @code{BEGINFILE} pattern, execution order not affected by
@code{@@namespace}
-@cindex @code{END} pattern, execution order not affected by @code{@@namespace}
-@cindex @code{ENDFILE} pattern, execution order not affected by
@code{@@namespace}
+@cindex @code{@@} (at-sign) @subentry @code{@@namespace} directive @subentry
@code{BEGIN}, @code{BEGINFILE}, @code{END}, @code{ENDFILE} and
+@cindex at-sign (@code{@@}) @subentry @code{@@namespace} directive @subentry
@code{BEGIN}, @code{BEGINFILE}, @code{END}, @code{ENDFILE} and
+@cindex @code{BEGIN} pattern @subentry @code{@@namespace} directive and
+@cindex @code{BEGINFILE} pattern @subentry @code{@@namespace} directive and
+@cindex @code{END} pattern @subentry @code{@@namespace} directive and
+@cindex @code{ENDFILE} pattern @subentry @code{@@namespace} directive and
+@cindex @code{@@namespace} directive @sortas{namespace directive}
The use of @code{@@namespace} has no influence upon the order of execution
of @code{BEGIN}, @code{BEGINFILE}, @code{END}, and @code{ENDFILE} rules.
@node Naming Rules
@section Namespace and Component Naming Rules
-@cindex naming rules, namespaces and component names
-@cindex namespace names, naming rules
-@cindex component names, naming rules
+@cindex naming rules, namespace and component names
+@cindex namespaces @subentry naming rules
+@c not "component names" to merge with other index entry
+@cindex component name @subentry naming rules
A number of rules apply to the namespace and component names, as follows.
@itemize @bullet
@@ -31142,8 +31268,8 @@ $ @kbd{gawk -f systime.awk}
@section Internal Name Management
@cindex name management
-@cindex @code{awk} namespace, identifier name storage
-@cindex @code{awk} namespace, use for indirect function calls
+@cindex @code{awk} @subentry namespace @subentry identifier name storage
+@cindex @code{awk} @subentry namespace @subentry use for indirect function
calls
For backwards compatibility, all identifiers in the @code{awk} namespace
are stored internally as unadorned identifiers (that is, without a
leading @samp{awk::}). This is mainly relevant
@@ -31174,7 +31300,7 @@ function compute() @ii{This is really}
report::compute()
@node Namespace Example
@section Namespace Example
-@cindex namespace, example code
+@cindex namespace @subentry example code
The following example is a revised version of the suite of routines
developed in @ref{Passwd Functions}. See there for an explanation
of how the code works.
@@ -31300,8 +31426,8 @@ $ @kbd{gawk -f ns_passwd.awk -f testpasswd.awk}
This @value{SECTION} looks briefly at how the namespace facility interacts
with other important @command{gawk} features.
-@cindex namespaces, interaction with profiler
-@cindex namespaces, interaction with pretty printer
+@cindex namespaces @subentry interaction with @subentry profiler
+@cindex namespaces @subentry interaction with @subentry pretty printer
@cindex profiler, interaction with namespaces
@cindex pretty printer, interaction with namespaces
The profiler and pretty-printer (@pxref{Profiling}) have been enhanced
@@ -31311,15 +31437,15 @@ namespace together, and has @code{@@namespace}
directives in front
of rules as necessary. This allows component names to be
simple identifiers, instead of using qualified identifiers everywhere.
-@cindex namespaces, interaction with debugger
-@cindex debugger, interaction with namespaces
+@cindex namespaces @subentry interaction with @subentry debugger
+@cindex debugger @subentry interaction with namespaces
Interaction with the debugger (@pxref{Debugging}) has not had to change
(at least as of this writing). Some of the internal byte codes changed
in order to accommodate namespaces, and the debugger's @code{dump} command
was adjusted to match.
-@cindex namespaces, interaction with extension API
-@cindex extension API interaction with namespaces
+@cindex namespaces @subentry interaction with @subentry extension API
+@cindex extension API @subentry interaction with namespaces
The extension API (@pxref{Dynamic Extensions}) has always allowed for
placing functions into a different namespace, although this was not
previously implemented. However, the symbol lookup and symbol update
@@ -31356,7 +31482,7 @@ namespaces smoothly with their operation. This applies
most notably to
the profiler / pretty-printer (@pxref{Profiling}) and to the extension
facility (@pxref{Dynamic Extensions}).
-@cindex namespaces, backwards compatibility
+@cindex namespaces @subentry backwards compatibility
@item
Overall, the namespace facility was designed and implemented such that
backwards compatibility is paramount. Programs that don't use namespaces
@@ -31369,7 +31495,7 @@ version of @command{gawk}.
@cindex arbitrary precision
@cindex multiple precision
@cindex infinite precision
-@cindex floating-point, numbers@comma{} arbitrary-precision
+@cindex floating-point @subentry numbers @subentry arbitrary-precision
This @value{CHAPTER} introduces some basic concepts relating to
how computers do arithmetic and defines some important terms.
@@ -31438,7 +31564,7 @@ The advantage to integer numbers is that they represent
values exactly.
The disadvantage is that their range is limited.
@cindex unsigned integers
-@cindex integers, unsigned
+@cindex integers @subentry unsigned
In computers, integer values come in two flavors: @dfn{signed} and
@dfn{unsigned}. Signed values may be negative or positive, whereas
unsigned values are always greater than or equal
@@ -31448,7 +31574,7 @@ In computer systems, integer arithmetic is exact, but
the possible
range of values is limited. Integer arithmetic is generally faster than
floating-point arithmetic.
-@cindex floating-point, numbers
+@cindex floating-point @subentry numbers
@item Floating-point arithmetic
Floating-point numbers represent what were called in school ``real''
numbers (i.e., those that have a fractional part, such as 3.1415927).
@@ -31460,9 +31586,9 @@ Modern systems support floating-point arithmetic in
hardware, with a
limited range of values. There are software libraries that allow
the use of arbitrary-precision floating-point calculations.
-@cindex floating-point, numbers@comma{} single-precision
-@cindex floating-point, numbers@comma{} double-precision
-@cindex floating-point, numbers@comma{} arbitrary-precision
+@cindex floating-point @subentry numbers @subentry single-precision
+@cindex floating-point @subentry numbers @subentry double-precision
+@cindex floating-point @subentry numbers @subentry arbitrary-precision
@cindex single-precision
@cindex double-precision
@cindex arbitrary precision
@@ -32132,8 +32258,8 @@ output when you change the rounding mode to be sure.
@node Arbitrary Precision Integers
@section Arbitrary-Precision Integer Arithmetic with @command{gawk}
-@cindex integers, arbitrary precision
-@cindex arbitrary precision integers
+@cindex integers @subentry arbitrary precision
+@cindex arbitrary precision @subentry integers
When given the @option{-M} option,
@command{gawk} performs all integer arithmetic using GMP arbitrary-precision
@@ -32365,7 +32491,6 @@ word sizes. See
@node Checking for MPFR
@section How To Check If MPFR Is Available
-@cindex MPFR, checking availability of
@cindex checking for MPFR
@cindex MPFR, checking for
Occasionally, you might like to be able to check if @command{gawk}
@@ -32519,6 +32644,7 @@ $ @kbd{echo 0xDeadBeef | gawk '@{ print $1 + 0 @}'}
Thus, @samp{+nan} and @samp{+NaN} are the same.
@end itemize
+@cindex POSIX mode
Besides handling input, @command{gawk} also needs to print ``correct'' values
on
output when a value is either NaN or infinity. Starting with @value{PVERSION}
4.2.2, for such values @command{gawk} prints one of the four strings
@@ -33014,7 +33140,7 @@ the macros as if they were functions.
@node General Data Types
@subsection General-Purpose Data Types
-@cindex Robbins, Arnold
+@cindex Robbins @subentry Arnold
@cindex Ramey, Chet
@quotation
@i{I have a true love/hate relationship with unions.}
@@ -33224,7 +33350,7 @@ process and reduces the time needed to create the value.
@node Memory Allocation Functions
@subsection Memory Allocation Functions and Convenience Macros
@cindex allocating memory for extensions
-@cindex extensions, allocating memory
+@cindex extensions @subentry loadable @subentry allocating memory
@cindex memory, allocating for extensions
The API provides a number of @dfn{memory allocation} functions for
@@ -33417,8 +33543,8 @@ to be a @samp{char *} value pointing to data previously
obtained from
@node Registration Functions
@subsection Registration Functions
-@cindex register extension
-@cindex extension registration
+@cindex register loadable extension
+@cindex extensions @subentry loadable @subentry registration
This @value{SECTION} describes the API functions for
registering parts of your extension with @command{gawk}.
@@ -34097,7 +34223,7 @@ Register the two-way processor pointed to by
@code{two_way_processor} with
@node Printing Messages
@subsection Printing Messages
-@cindex printing messages from extensions
+@cindex printing @subentry messages from extensions
@cindex messages from extensions
You can print different kinds of warning messages from your
@@ -34646,7 +34772,7 @@ you should release any cached values that you created,
using
@node Array Manipulation
@subsection Array Manipulation
@cindex array manipulation in extensions
-@cindex extensions, array manipulation in
+@cindex extensions @subentry loadable @subentry array manipulation in
The primary data structure@footnote{OK, the only data structure.} in
@command{awk}
is the associative array (@pxref{Arrays}).
@@ -35322,8 +35448,8 @@ information about how @command{gawk} was invoked.
@node Extension Versioning
@subsubsection API Version Constants and Variables
-@cindex API version
-@cindex extension API version
+@cindex API @subentry version
+@cindex extension API @subentry version number
The API provides both a ``major'' and a ``minor'' version number.
The API versions are available at compile time as C preprocessor defines
@@ -35423,8 +35549,8 @@ calls @code{check_mpfr_version()}.
@node Extension API Informational Variables
@subsubsection Informational Variables
-@cindex API informational variables
-@cindex extension API informational variables
+@cindex API @subentry informational variables
+@cindex extension API @subentry informational variables
The API provides access to several variables that describe
whether the corresponding command-line options were enabled when
@@ -35636,7 +35762,7 @@ The @code{get_file()} API is new
@node Finding Extensions
@section How @command{gawk} Finds Extensions
-@cindex extension search path
+@cindex extensions @subentry loadable @subentry search path
@cindex finding extensions
Compiled extensions have to be installed in a directory where
@@ -35648,7 +35774,7 @@ path with a list of directories to search for compiled
extensions.
@node Extension Example
@section Example: Some File Functions
-@cindex extension example
+@cindex extensions @subentry loadable @subentry example
@quotation
@i{No matter where you go, there you are.}
@@ -35862,7 +35988,7 @@ static const char *ext_version = "filefuncs extension:
version 1.0";
int plugin_is_GPL_compatible;
@end example
-@cindex programming conventions, @command{gawk} extensions
+@cindex programming conventions @subentry @command{gawk} extensions
By convention, for an @command{awk} function @code{foo()}, the C function
that implements it is called @code{do_foo()}. The function should have
two arguments. The first is an @code{int}, usually called @code{nargs},
@@ -36204,7 +36330,7 @@ And that's it!
@node Using Internal File Ops
@subsection Integrating the Extensions
-@cindex @command{gawk}, interpreter@comma{} adding code to
+@cindex @command{gawk} @subentry interpreter, adding code to
Now that the code is written, it must be possible to add it at
runtime to the running @command{gawk} interpreter. First, the
code must be compiled. Assuming that the functions are in
@@ -36286,7 +36412,7 @@ $ @kbd{AWKLIBPATH=$PWD gawk -f testff.awk}
@node Extension Samples
@section The Sample Extensions in the @command{gawk} Distribution
-@cindex extensions distributed with @command{gawk}
+@cindex extensions @subentry loadable @subentry distributed with @command{gawk}
This @value{SECTION} provides a brief overview of the sample extensions
that come in the @command{gawk} distribution. Some of them are intended
@@ -36996,8 +37122,7 @@ for more information.
@node gawkextlib
@section The @code{gawkextlib} Project
-@cindex @code{gawkextlib}
-@cindex extensions, where to find
+@cindex extensions @subentry loadable @subentry @code{gawkextlib} project
@cindex @code{gawkextlib} project
The @uref{https://sourceforge.net/projects/gawkextlib/, @code{gawkextlib}}
@@ -37317,8 +37442,8 @@ online documentation}.
@node V7/SVR3.1
@appendixsec Major Changes Between V7 and SVR3.1
-@cindex @command{awk}, versions of
-@cindex @command{awk}, versions of, changes between V7 and SVR3.1
+@cindex @command{awk} @subentry versions of
+@cindex @command{awk} @subentry versions of @subentry changes between V7 and
SVR3.1
The @command{awk} language evolved considerably between the release of
Version 7 Unix (1978) and the new version that was first made generally
available in
@@ -37408,7 +37533,7 @@ Multidimensional arrays
@node SVR4
@appendixsec Changes Between SVR3.1 and SVR4
-@cindex @command{awk}, versions of, changes between SVR3.1 and SVR4
+@cindex @command{awk} @subentry versions of @subentry changes between SVR3.1
and SVR4
The System V Release 4 (1989) version of Unix @command{awk} added these
features
(some of which originated in @command{gawk}):
@@ -37466,8 +37591,8 @@ Processing of escape sequences inside command-line
variable assignments
@node POSIX
@appendixsec Changes Between SVR4 and POSIX @command{awk}
-@cindex @command{awk}, versions of, changes between SVR4 and POSIX
@command{awk}
-@cindex POSIX @command{awk}, changes in @command{awk} versions
+@cindex @command{awk} @subentry versions of @subentry changes between SVR4 and
POSIX @command{awk}
+@cindex POSIX @command{awk} @subentry changes in @command{awk} versions
The POSIX Command Language and Utilities standard for @command{awk} (1992)
introduced the following changes into the language:
@@ -37522,9 +37647,9 @@ The 2008 POSIX standard can be found online at
@node BTL
@appendixsec Extensions in Brian Kernighan's @command{awk}
-@cindex @command{awk}, versions of, See Also Brian Kernighan's @command{awk}
-@cindex extensions, Brian Kernighan's @command{awk}
-@cindex Brian Kernighan's @command{awk}, extensions
+@cindex @command{awk} @subentry versions of @seealso{Brian Kernighan's
@command{awk}}
+@cindex extensions @subentry Brian Kernighan's @command{awk}
+@cindex Brian Kernighan's @command{awk} @subentry extensions
@cindex Kernighan, Brian
Brian Kernighan
has made his version available via his home page
@@ -37563,9 +37688,9 @@ available in his @command{awk}.
@node POSIX/GNU
@appendixsec Extensions in @command{gawk} Not in POSIX @command{awk}
-@cindex compatibility mode (@command{gawk}), extensions
-@cindex extensions, in @command{gawk}, not in POSIX @command{awk}
-@cindex POSIX, @command{gawk} extensions not included in
+@cindex compatibility mode (@command{gawk}) @subentry extensions
+@cindex extensions @subentry in @command{gawk}, not in POSIX @command{awk}
+@cindex POSIX @subentry @command{gawk} extensions not included in
The GNU implementation, @command{gawk}, adds a large number of features.
They can all be disabled with either the @option{--traditional} or
@option{--posix} options
@@ -38403,6 +38528,7 @@ a global symbol indicating that they are GPL-compatible
(@pxref{Plugin License}).
@item
+@cindex POSIX mode
In POSIX mode, string comparisons use @code{strcoll()} / @code{wcscoll()}
(@pxref{POSIX String Comparison}).
@@ -38661,8 +38787,8 @@ unfortunately.
@node Common Extensions
@appendixsec Common Extensions Summary
-@cindex extensions, Brian Kernighan's @command{awk}
-@cindex extensions, @command{mawk}
+@cindex extensions @subentry Brian Kernighan's @command{awk}
+@cindex extensions @subentry @command{mawk}
The following table summarizes the common extensions supported
by @command{gawk}, Brian Kernighan's @command{awk}, and @command{mawk},
the three most widely used freely available versions of @command{awk}
@@ -38693,6 +38819,8 @@ This @value{SECTION} describes the confusing history of
ranges within
regular expressions and their interactions with locales, and how this
affected different versions of @command{gawk}.
+@cindex ASCII
+@cindex EBCDIC
The original Unix tools that worked with regular expressions defined
character ranges (such as @samp{[a-z]}) to match any character between
the first character in the range and the last character in the range,
@@ -38750,6 +38878,7 @@ This result is due to the locale setting (and thus you
may not see
it on your system).
@cindex Unicode
+@cindex ASCII
Similar considerations apply to other ranges. For example, @samp{["-/]}
is perfectly valid in ASCII, but is not valid in many Unicode locales,
such as @code{en_US.UTF-8}.
@@ -38792,7 +38921,7 @@ In all cases @command{gawk} remains POSIX-compliant.
@node Contributors
@appendixsec Major Contributors to @command{gawk}
-@cindex @command{gawk}, list of contributors to
+@cindex @command{gawk} @subentry list of contributors to
@quotation
@i{Always give credit where credit is due.}
@author Anonymous
@@ -38979,7 +39108,7 @@ of IBM in Japan, contributed support for multibyte
characters.
Michael Benzinger contributed the initial code for @code{switch} statements.
@item
-@cindex McPhee, Patrick
+@cindex McPhee, Patrick T.J.@:
Patrick T.J.@: McPhee contributed the code for dynamic loading in Windows32
environments.
(This is no longer supported.)
@@ -39061,7 +39190,7 @@ distribution.
Juan Manuel Guerrero took over maintenance of the DJGPP port.
@item
-@cindex Robbins, Arnold
+@cindex Robbins @subentry Arnold
Arnold Robbins
has been working on @command{gawk} since 1988, at first
helping David Trueman, and as the primary maintainer since around 1994.
@@ -39089,6 +39218,8 @@ They can be disabled with either the
@option{--traditional} or @option{--posix}
options.
@item
+@cindex ASCII
+@cindex EBCDIC
The interaction of POSIX locales and regexp matching in @command{gawk} has
been confusing over
the years. Today, @command{gawk} implements Rational Range Interpretation,
where
ranges of the form @samp{[a-z]} match @emph{only} the characters numerically
between
@@ -39106,8 +39237,11 @@ the appropriate credit where credit is due.
@appendix Installing @command{gawk}
@c last two commas are part of see also
-@cindex operating systems, See Also GNU/Linux@comma{} PC operating
systems@comma{} Unix
-@cindex @command{gawk}, installing
+@cindex operating systems
+@cindex operating systems @seealso{GNU/Linux}
+@cindex operating systems @seealso{PC operating systems}
+@cindex operating systems @seealso{Unix}
+@cindex @command{gawk} @subentry installing
@cindex installing @command{gawk}
This appendix provides instructions for installing @command{gawk} on the
various platforms that are supported by the developers. The primary
@@ -39130,7 +39264,7 @@ the respective ports.
@node Gawk Distribution
@appendixsec The @command{gawk} Distribution
-@cindex source code, @command{gawk}
+@cindex source code @subentry @command{gawk}
This @value{SECTION} describes how to get the @command{gawk}
distribution, how to extract it, and then what is in the various files and
@@ -39144,7 +39278,7 @@ subdirectories.
@node Getting
@appendixsubsec Getting the @command{gawk} Distribution
-@cindex @command{gawk}, source code@comma{} obtaining
+@cindex @command{gawk} @subentry source code, obtaining
There are two ways to get GNU software:
@itemize @value{BULLET}
@@ -39220,7 +39354,7 @@ a local expert.
@node Distribution contents
@appendixsubsec Contents of the @command{gawk} Distribution
-@cindex @command{gawk}, distribution
+@cindex @command{gawk} @subentry distribution
The @command{gawk} distribution has a number of C source files,
documentation files,
@@ -39276,7 +39410,7 @@ A description of behaviors in the POSIX standard for
@command{awk} that
are left undefined, or where @command{gawk} may not comply fully, as well
as a list of things that the POSIX standard should describe but does not.
-@cindex artificial intelligence@comma{} @command{gawk} and
+@cindex artificial intelligence, @command{gawk} and
@item doc/awkforai.txt
Pointers to the original draft of
a short article describing why @command{gawk} is a good language for
@@ -39528,26 +39662,32 @@ on other platforms, the appropriate location may be
different.
@table @command
@cindex @command{gawkpath_default} shell function
+@cindex shell function @subentry @command{gawkpath_default}
@item gawkpath_default
Reset the @env{AWKPATH} environment variable to its default value.
@cindex @command{gawkpath_prepend} shell function
+@cindex shell function @subentry @command{gawkpath_prepend}
@item gawkpath_prepend
Add the argument to the front of the @env{AWKPATH} environment variable.
@cindex @command{gawkpath_append} shell function
+@cindex shell function @subentry @command{gawkpath_append}
@item gawkpath_append
Add the argument to the end of the @env{AWKPATH} environment variable.
@cindex @command{gawklibpath_default} shell function
+@cindex shell function @subentry @command{gawklibpath_default}
@item gawklibpath_default
Reset the @env{AWKLIBPATH} environment variable to its default value.
@cindex @command{gawklibpath_prepend} shell function
+@cindex shell function @subentry @command{gawklibpath_prepend}
@item gawklibpath_prepend
Add the argument to the front of the @env{AWKLIBPATH} environment variable.
@cindex @command{gawklibpath_append} shell function
+@cindex shell function @subentry @command{gawklibpath_append}
@item gawklibpath_append
Add the argument to the end of the @env{AWKLIBPATH} environment variable.
@@ -39556,8 +39696,8 @@ Add the argument to the end of the @env{AWKLIBPATH}
environment variable.
@node Additional Configuration Options
@appendixsubsec Additional Configuration Options
-@cindex @command{gawk}, configuring, options
-@cindex configuration options@comma{} @command{gawk}
+@cindex @command{gawk} @subentry configuring @subentry options
+@cindex configuration options, @command{gawk}
There are several additional options you may use on the @command{configure}
command line when compiling @command{gawk} from scratch, including:
@@ -39565,7 +39705,7 @@ command line when compiling @command{gawk} from
scratch, including:
@table @code
@cindex @option{--disable-extensions} configuration option
-@cindex configuration option, @code{--disable-extensions}
+@cindex configuration option @subentry @code{--disable-extensions}
@item --disable-extensions
Disable the extension mechanism within @command{gawk}. With this
option, it is not possible to use dynamic extensions. This also
@@ -39577,7 +39717,7 @@ The default action is to dynamically check if the
extensions
can be configured and compiled.
@cindex @option{--disable-lint} configuration option
-@cindex configuration option, @code{--disable-lint}
+@cindex configuration option @subentry @code{--disable-lint}
@item --disable-lint
Disable all lint checking within @command{gawk}. The
@option{--lint} and @option{--lint-old} options
@@ -39600,21 +39740,21 @@ to fail. This option may be removed at a later date.
@end quotation
@cindex @option{--disable-mpfr} configuration option
-@cindex configuration option, @code{--disable-mpfr}
+@cindex configuration option @subentry @code{--disable-mpfr}
@item --disable-mpfr
Skip checking for the MPFR and GMP libraries. This is useful
mainly for the developers, to make sure nothing breaks if
MPFR support is not available.
@cindex @option{--disable-nls} configuration option
-@cindex configuration option, @code{--disable-nls}
+@cindex configuration option @subentry @code{--disable-nls}
@item --disable-nls
Disable all message-translation facilities.
This is usually not desirable, but it may bring you some slight performance
improvement.
@cindex @option{--enable-versioned-extension-dir} configuration option
-@cindex configuration option, @code{--enable-versioned-extension-dir}
+@cindex configuration option @subentry @code{--enable-versioned-extension-dir}
@item --enable-versioned-extension-dir
Use a versioned directory for extensions. The directory name will
include the major and minor API versions in it. This makes it possible
@@ -39629,7 +39769,7 @@ options supplied by @command{configure}.
@node Configuration Philosophy
@appendixsubsec The Configuration Process
-@cindex @command{gawk}, configuring
+@cindex @command{gawk} @subentry configuring
This @value{SECTION} is of interest only if you know something about using the
C language and Unix-like operating systems.
@@ -39690,8 +39830,8 @@ various non-Unix systems.
@node PC Installation
@appendixsubsec Installation on MS-Windows
-@cindex PC operating systems@comma{} @command{gawk} on, installing
-@cindex operating systems, PC@comma{} @command{gawk} on, installing
+@cindex PC operating systems, @command{gawk} on @subentry installing
+@cindex operating systems @subentry PC, @command{gawk} on @subentry installing
This @value{SECTION} covers installation and usage of @command{gawk}
on Intel architecture machines running any version of MS-Windows.
In this @value{SECTION}, the term ``Windows32''
@@ -39710,6 +39850,7 @@ See also the @file{README_d/README.pc} file in the
distribution.
@node PC Binary Installation
@appendixsubsubsec Installing a Prepared Distribution for MS-Windows Systems
+@cindex installing @command{gawk} @subentry MS-Windows
The only supported binary distribution for MS-Windows systems
is that provided by Eli Zaretskii's
@uref{https://sourceforge.net/projects/ezwinports/,
@@ -39723,7 +39864,7 @@ The file @file{README_d/README.pc} in the
@command{gawk} distribution
contains additional notes, and @file{pc/Makefile} contains important
information on compilation options.
-@cindex compiling @command{gawk} for MS-Windows
+@cindex compiling @command{gawk} @subentry for MS-Windows
To build @command{gawk} for Windows32, copy the files in
the @file{pc} directory (@emph{except} for @file{ChangeLog}) to the
directory with the rest of the @command{gawk} sources, then invoke
@@ -39740,7 +39881,7 @@ type @samp{make mingw32}.
@node PC Using
@appendixsubsubsec Using @command{gawk} on PC Operating Systems
-@cindex operating systems, PC, @command{gawk} on
+@cindex operating systems @subentry PC, @command{gawk} on
@cindex PC operating systems, @command{gawk} on
Information in this section applies to the MinGW and
@@ -39753,20 +39894,21 @@ both the @samp{|&} operator and TCP/IP networking
The DJGPP environment does not support @samp{|&}.
@cindex search paths
-@cindex search paths, for source files
-@cindex @command{gawk}, MS-Windows version of
-@cindex @code{;} (semicolon), @env{AWKPATH} variable and
-@cindex semicolon (@code{;}), @env{AWKPATH} variable and
+@cindex search paths @subentry for source files
+@cindex @command{gawk} @subentry MS-Windows version of
+@cindex @code{;} (semicolon) @subentry @env{AWKPATH} variable and
+@cindex semicolon (@code{;}) @subentry @env{AWKPATH} variable and
@cindex @env{AWKPATH} environment variable
+@cindex environment variables @subentry @env{AWKPATH}
The MS-Windows version of @command{gawk} searches for
program files as described in @ref{AWKPATH Variable}. However,
semicolons (rather than colons) separate elements in the @env{AWKPATH}
variable. If @env{AWKPATH} is not set or is empty, then the default
search path is @samp{@w{.;c:/lib/awk;c:/gnu/lib/awk}}.
-@cindex common extensions, @code{BINMODE} variable
-@cindex extensions, common@comma{} @code{BINMODE} variable
-@cindex differences in @command{awk} and @command{gawk}, @code{BINMODE}
variable
+@cindex common extensions @subentry @code{BINMODE} variable
+@cindex extensions @subentry common @subentry @code{BINMODE} variable
+@cindex differences in @command{awk} and @command{gawk} @subentry
@code{BINMODE} variable
@cindex @code{BINMODE} variable
Under MS-Windows,
@command{gawk} (and many other text programs) silently
@@ -39862,7 +40004,7 @@ moved into the @code{BEGIN} rule.
@node Cygwin
@appendixsubsubsec Using @command{gawk} In The Cygwin Environment
-@cindex compiling @command{gawk} for Cygwin
+@cindex compiling @command{gawk} @subentry for Cygwin
@command{gawk} can be built and used ``out of the box'' under MS-Windows
if you are using the @uref{http://www.cygwin.com, Cygwin environment}.
@@ -39882,6 +40024,10 @@ When compared to GNU/Linux on the same system, the
@samp{configure}
step on Cygwin takes considerably longer. However, it does finish,
and then the @samp{make} proceeds as usual.
+@cindex installing @command{gawk} @subentry Cygwin
+You may also install @command{gawk} using the regular Cygwin installer.
+In general Cygwin supplies the latest released version.
+
Recent versions of Cygwin open all files in binary mode. This means
that you should use @samp{RS = "\r?\n"} in order to be able to
handle standard MS-Windows text files with carriage-return plus
@@ -39909,8 +40055,8 @@ translation of @code{"\r\n"}, because it won't.
@c now address@hidden
@c now address@hidden
-@cindex @command{gawk}, VMS version of
-@cindex installation, VMS
+@cindex @command{gawk} @subentry VMS version of
+@cindex installing @command{gawk} @subentry VMS
This @value{SUBSECTION} describes how to compile and install @command{gawk}
under VMS.
The older designation ``VMS'' is used throughout to refer to OpenVMS.
@@ -39926,7 +40072,7 @@ The older designation ``VMS'' is used throughout to
refer to OpenVMS.
@node VMS Compilation
@appendixsubsubsec Compiling @command{gawk} on VMS
-@cindex compiling @command{gawk} for VMS
+@cindex compiling @command{gawk} @subentry for VMS
To compile @command{gawk} under VMS, there is a @code{DCL} command procedure
that issues all the necessary @code{CC} and @code{LINK} commands. There is
@@ -40124,7 +40270,7 @@ flag is required to force Unix-style parsing rather
than @code{DCL} parsing.
If any other dash-type options (or multiple parameters such as @value{DF}s to
process) are present, there is no ambiguity and @option{--} can be omitted.
-@cindex exit status, of @command{gawk}, on VMS
+@cindex exit status, of @command{gawk} @subentry on VMS
The @code{exit} value is a Unix-style value and is encoded into a VMS exit
status value when the program exits.
@@ -40150,7 +40296,7 @@ Older versions of @command{gawk} for VMS treated a Unix
exit code 0 as 1,
a failure as 2, a fatal error as 4, and passed all the other numbers through.
This violated the VMS exit status coding requirements.
-@cindex floating-point, VAX/VMS
+@cindex floating-point @subentry numbers @subentry VAX/VMS
VAX/VMS floating point uses unbiased rounding. @xref{Round Function}.
VMS reports time values in GMT unless one of the @code{SYS$TIMEZONE_RULE}
@@ -40160,7 +40306,7 @@ or @code{TZ} logical names is set. Older versions of
VMS, such as VAX/VMS
@c @cindex directory search
@c @cindex path, search
@cindex search paths
-@cindex search paths, for source files
+@cindex search paths @subentry for source files
The default search path, when looking for @command{awk} program files specified
by the @option{-f} option, is @code{"SYS$DISK:[],AWK_LIBRARY:"}. The logical
name @env{AWKPATH} can be used to override this default. The format
@@ -40168,7 +40314,7 @@ of @env{AWKPATH} is a comma-separated list of directory
specifications.
When defining it, the value should be quoted so that it retains a single
translation and not a multitranslation @code{RMS} searchlist.
-@cindex redirection on VMS
+@cindex redirection @subentry on VMS
This restriction also applies to running @command{gawk} under GNV,
as redirection is always to a DCL command.
@@ -40289,7 +40435,7 @@ recommend compiling and using the current version.
@c the radio show, not the book. :-)
@cindex debugging @command{gawk}, bug reports
-@cindex troubleshooting, @command{gawk}, bug reports
+@cindex troubleshooting @subentry @command{gawk} @subentry bug reports
If you have problems with @command{gawk} or think that you have found a bug,
report it to the developers; we cannot promise to do anything,
but we might well want to fix it.
@@ -40423,7 +40569,7 @@ The people maintaining the various @command{gawk} ports
are:
@cindex Malmberg, John
@cindex Pitts, Dave
@cindex G., Daniel Richard
-@cindex Robbins, Arnold
+@cindex Robbins @subentry Arnold
@cindex Zaretskii, Eli
@cindex Guerrero, Juan Manuel
@multitable {MS-Windows with MinGW}
{123456789012345678901234567890123456789001234567890}
@@ -40448,7 +40594,7 @@ report to the @EMAIL{bug-gawk@@gnu.org,bug-gawk at gnu
dot org} email list as we
@node Other Versions
@appendixsec Other Freely Available @command{awk} Implementations
-@cindex @command{awk}, implementations
+@cindex @command{awk} @subentry implementations
@ignore
From: emory!amc.com!brennan (Michael Brennan)
Subject: C++ comments in awk programs
@@ -40477,9 +40623,9 @@ This @value{SECTION} briefly describes where to get
them:
@table @asis
@cindex Kernighan, Brian
-@cindex source code, Brian Kernighan's @command{awk}
-@cindex @command{awk}, versions of, See Also Brian Kernighan's @command{awk}
-@cindex Brian Kernighan's @command{awk}, source code
+@cindex source code @subentry Brian Kernighan's @command{awk}
+@cindex @command{awk} @subentry versions of @seealso{Brian Kernighan's
@command{awk}}
+@cindex Brian Kernighan's @command{awk} @subentry source code
@item Unix @command{awk}
Brian Kernighan, one of the original designers of Unix @command{awk},
has made his implementation of
@@ -40513,7 +40659,7 @@ available at
@uref{git://github.com/danfuzz/one-true-awk}.
@cindex Brennan, Michael
@cindex @command{mawk} utility
-@cindex source code, @command{mawk}
+@cindex source code @subentry @command{mawk}
@item @command{mawk}
Michael Brennan wrote an independent implementation of @command{awk},
called @command{mawk}. It is available under the
@@ -40550,7 +40696,7 @@ His development snapshots are available via Git from
the project's
@cindex Sumner, Andrew
@cindex @command{awka} compiler for @command{awk}
-@cindex source code, @command{awka}
+@cindex source code @subentry @command{awka}
@item @command{awka}
Written by Andrew Sumner,
@command{awka} translates @command{awk} programs into C, compiles them,
@@ -40570,7 +40716,7 @@ since approximately 2001.
@cindex Beebe, Nelson H.F.@:
@cindex @command{pawk} (profiling version of Brian Kernighan's @command{awk})
-@cindex source code, @command{pawk}
+@cindex source code @subentry @command{pawk} (profiling version of Brian
Kernighan's @command{awk})
@item @command{pawk}
Nelson H.F.@: Beebe at the University of Utah has modified
BWK @command{awk} to provide timing and profiling information.
@@ -40584,7 +40730,7 @@ or
@item BusyBox @command{awk}
@cindex BusyBox Awk
-@cindex source code, BusyBox Awk
+@cindex source code @subentry BusyBox Awk
BusyBox is a GPL-licensed program providing small versions of many
applications within a single executable. It is aimed at embedded systems.
It includes a full implementation of POSIX @command{awk}. When building
@@ -40594,7 +40740,7 @@ information, see the @uref{https://busybox.net,
project's home page}.
@cindex OpenSolaris
@cindex Solaris, POSIX-compliant @command{awk}
-@cindex source code, Solaris @command{awk}
+@cindex source code @subentry Solaris @command{awk}
@item The OpenSolaris POSIX @command{awk}
The versions of @command{awk} in @file{/usr/xpg4/bin} and
@file{/usr/xpg6/bin} on Solaris are more or less POSIX-compliant.
@@ -40604,9 +40750,8 @@ with 1--2 hours of work. Making it more generally
portable (using
GNU Autoconf and/or Automake) would take more work, and this
has not been done, at least to our knowledge.
-@cindex Illumos
@cindex Illumos, POSIX-compliant @command{awk}
-@cindex source code, Illumos @command{awk}
+@cindex source code @subentry Illumos @command{awk}
The source code used to be available from the OpenSolaris website.
However, that project was ended and the website shut down. Fortunately, the
@uref{https://wiki.illumos.org/display/illumos/illumos+Home, Illumos project}
@@ -40615,8 +40760,8 @@ makes this implementation available. You can view the
files one at a time from
@cindex @command{goawk}
@cindex Go implementation of @command{awk}
-@cindex source code, @command{goawk}
-@cindex programming languages, Go
+@cindex source code @subentry @command{goawk}
+@cindex programming languages @subentry Go
@item @command{goawk}
This is an @command{awk} interpreter written in the
@uref{https://golang.org/, Go programming language}.
@@ -40628,7 +40773,7 @@ describing the implementation.
@cindex @command{jawk}
@cindex Java implementation of @command{awk}
-@cindex source code, @command{jawk}
+@cindex source code @subentry @command{jawk}
@item @command{jawk}
This is an interpreter for @command{awk} written in Java. It claims
to be a full interpreter, although because it uses Java facilities
@@ -40638,12 +40783,12 @@ from POSIX @command{awk}. More information is
available on the
@item Libmawk
@cindex libmawk
-@cindex source code, libmawk
+@cindex source code @subentry libmawk
This is an embeddable @command{awk} interpreter derived from
@command{mawk}. For more information, see
@uref{http://repo.hu/projects/libmawk/}.
-@cindex source code, embeddable @command{awk} interpreter
+@cindex source code @subentry embeddable @command{awk} interpreter
@cindex Neacsu, Mircea
@item Mircea Neacsu's Embeddable @command{awk}
Mircea Neacsu has created an embeddable @command{awk}
@@ -40651,7 +40796,7 @@ interpreter, based on BWK awk. It's available
at @uref{https://github.com/neacsum/awk}.
@item @code{pawk}
-@cindex source code, @command{pawk} (Python version)
+@cindex source code @subentry @command{pawk} (Python version)
@cindex @code{pawk}, @command{awk}-like facilities for Python
This is a Python module that claims to bring @command{awk}-like
features to Python. See @uref{https://github.com/alecthomas/pawk}
@@ -40660,13 +40805,13 @@ modified version of BWK @command{awk}, described
earlier.)
@item @w{QSE @command{awk}}
@cindex QSE @command{awk}
-@cindex source code, QSE @command{awk}
+@cindex source code @subentry QSE @command{awk}
This is an embeddable @command{awk} interpreter. For more information,
see @uref{https://code.google.com/p/qse/}. @c and
@uref{http://awk.info/?tools/qse}.
@item @command{QTawk}
@cindex QuikTrim Awk
-@cindex source code, QuikTrim Awk
+@cindex source code @subentry QuikTrim Awk
This is an independent implementation of @command{awk} distributed
under the GPL. It has a large number of extensions over standard
@command{awk} and may not be 100% syntactically compatible with it.
@@ -40730,7 +40875,7 @@ implementations. Many are POSIX-compliant; others are
less so.
@ifclear FOR_PRINT
@node Notes
@appendix Implementation Notes
-@cindex @command{gawk}, implementation issues
+@cindex @command{gawk} @subentry implementation issues
@cindex implementation issues, @command{gawk}
This appendix contains information mainly of interest to implementers and
@@ -40749,10 +40894,10 @@ maintainers of @command{gawk}. Everything in it
applies specifically to
@node Compatibility Mode
@appendixsec Downward Compatibility and Debugging
-@cindex @command{gawk}, implementation issues, downward compatibility
-@cindex @command{gawk}, implementation issues, debugging
-@cindex troubleshooting, @command{gawk}
-@cindex implementation issues@comma{} @command{gawk}, debugging
+@cindex @command{gawk} @subentry implementation issues @subentry downward
compatibility
+@cindex @command{gawk} @subentry implementation issues @subentry debugging
+@cindex troubleshooting @subentry @command{gawk}
+@cindex implementation issues, @command{gawk} @subentry debugging
@xref{POSIX/GNU},
for a summary of the GNU extensions to the @command{awk} language and program.
@@ -40834,9 +40979,9 @@ that has a Git plug-in for working with Git
repositories.
@node Adding Code
@appendixsubsec Adding New Features
-@cindex adding, features to @command{gawk}
-@cindex features, adding to @command{gawk}
-@cindex @command{gawk}, features, adding
+@cindex adding @subentry features to @command{gawk}
+@cindex features @subentry adding to @command{gawk}
+@cindex @command{gawk} @subentry features @subentry adding
You are free to add any new features you like to @command{gawk}.
However, if you want your changes to be incorporated into the @command{gawk}
distribution, there are several steps that you need to take in order to
@@ -40882,7 +41027,7 @@ the GNU Project's
@uref{https://www.gnu.org/prep/standards/, website}.
Texinfo, Info, and DVI versions are also available.)
-@cindex @command{gawk}, coding style in
+@cindex @command{gawk} @subentry coding style in
@item
Use the @command{gawk} coding style.
The C code for @command{gawk} follows the instructions in the
@@ -41008,8 +41153,8 @@ probably will not.
@node New Ports
@appendixsubsec Porting @command{gawk} to a New Operating System
-@cindex portability, @command{gawk}
-@cindex operating systems, porting @command{gawk} to
+@cindex portability @subentry @command{gawk}
+@cindex operating systems @subentry porting @command{gawk} to
@cindex porting @command{gawk}
If you want to port @command{gawk} to a new operating system, there are
@@ -41358,7 +41503,7 @@ Larry
@end ignore
@cindex Perl
@cindex Wall, Larry
-@cindex Robbins, Arnold
+@cindex Robbins @subentry Arnold
@quotation
@i{AWK is a language similar to PERL, only considerably more elegant.}
@author Arnold Robbins
@@ -41666,8 +41811,8 @@ removed from the code base with the 4.2 release.
@node Basic Concepts
@appendix Basic Programming Concepts
-@cindex programming, concepts
-@cindex programming, concepts
+@cindex programming @subentry concepts
+@cindex programming @subentry concepts
This @value{APPENDIX} attempts to define some of the basic concepts
and terms that are used throughout the rest of this @value{DOCUMENT}.
@@ -41723,7 +41868,7 @@ or it may be @dfn{interpreted}. In the latter case, a
machine-executable
program such as @command{awk} reads your program, and then uses the
instructions in your program to process the data.
-@cindex programming, basic steps
+@cindex programming @subentry basic steps
When you write a program, it usually consists
of the following, very basic set of steps,
@ifnotdocbook
@@ -41808,7 +41953,7 @@ and even more often, as ``I/O'' for short.
(You will also see ``input'' and ``output'' used as verbs.)
@cindex data-driven languages
-@cindex languages@comma{} data-driven
+@cindex languages, data-driven
@command{awk} manages the reading of data for you, as well as the
breaking it up into records and fields. Your program's job is to
tell @command{awk} what to do with the data. You do this by describing
@@ -41831,8 +41976,8 @@ and the fields of the record.
You may also group multiple
associated values under one name, as an array.
-@cindex values, numeric
-@cindex values, string
+@cindex values @subentry numeric
+@cindex values @subentry string
@cindex scalar values
Data, particularly in @command{awk}, consists of either numeric
values, such as 42 or 3.1415927, or string values.
@@ -41916,7 +42061,7 @@ rule's action. Actions are always enclosed in braces.
(@xref{Action Overview}.)
@cindex Ada programming language
-@cindex programming languages, Ada
+@cindex programming languages @subentry Ada
@item Ada
A programming language originally defined by the U.S.@: Department of
Defense for embedded programming. It was designed to enforce good
@@ -41925,6 +42070,7 @@ Software Engineering practices.
@cindex Spencer, Henry
@cindex @command{sed} utility
@cindex amazing @command{awk} assembler (@command{aaa})
+@cindex @command{aaa} (amazing @command{awk} assembler) program
@item Amazing @command{awk} Assembler
Henry Spencer at the University of Toronto wrote a retargetable assembler
completely as @command{sed} and @command{awk} scripts. It is thousands
@@ -42151,8 +42297,8 @@ See ``Bracket Expression.''
See ``Bracket Expression.''
@cindex ASCII
-@cindex ISO 8859-1
-@cindex ISO Latin-1
+@cindex ISO @subentry ISO 8859-1 character set
+@cindex ISO @subentry ISO Latin-1 character set
@cindex character sets (machine character encodings)
@cindex Unicode
@item Character Set
@@ -42340,6 +42486,7 @@ The epoch on Unix and POSIX systems is 1970-01-01
00:00:00 UTC.
See also ``GMT'' and ``UTC.''
@item Escape Sequences
+@cindex ASCII
A special sequence of characters used for describing nonprinting
characters, such as @samp{\n} for newline or @samp{\033} for the ASCII
ESC (Escape) character. (@xref{Escape Sequences}.)
@@ -42423,8 +42570,6 @@ The @command{gawk} extension API provides constructor
functions
The GNU implementation of @command{awk}.
@cindex GPL (General Public License)
-@cindex General Public License (GPL)
-@cindex GNU General Public License
@item General Public License
This document describes the terms under which @command{gawk} and its source
code may be distributed. (@xref{Copying}.)
@@ -42511,7 +42656,7 @@ information about the name of the organization and its
language-independent
three-letter acronym.
@cindex Java programming language
-@cindex programming languages, Java
+@cindex programming languages @subentry Java
@item Java
A modern programming language originally developed by Sun Microsystems
(now Oracle) supporting Object-Oriented programming. Although usually
@@ -42818,7 +42963,6 @@ and POSIX systems. Used for the @command{gawk}
functions
@code{mktime()}, @code{strftime()}, and @code{systime()}.
See also ``Epoch,'' ``GMT,'' and ``UTC.''
-@cindex Linux
@cindex GNU/Linux
@cindex Unix
@cindex BSD-based operating systems
diff --git a/doc/sidebar.awk b/doc/sidebar.awk
index d1f3efc..ca485fa 100644
--- a/doc/sidebar.awk
+++ b/doc/sidebar.awk
@@ -37,7 +37,7 @@ BEGIN {
/^@end[ \t]+sidebar[ \t]*$/ {
collecting = 0
- printf "@cindex sidebar, %s\n", title
+ printf "@cindex sidebar @subentry %s\n", title
printf "@ifdocbook\n"
printf "@docbook\n"
printf "<sidebar><title>%s</title>\n", title
diff --git a/doc/texinfo.tex b/doc/texinfo.tex
index e540acd..af857cb 100644
--- a/doc/texinfo.tex
+++ b/doc/texinfo.tex
@@ -3,7 +3,7 @@
% Load plain if necessary, i.e., if running under initex.
\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
%
-\def\texinfoversion{2019-08-18.20}
+\def\texinfoversion{2019-09-20.22}
%
% Copyright 1985, 1986, 1988, 1990-2019 Free Software Foundation, Inc.
%
@@ -1052,7 +1052,7 @@ where each line of input produces a line of output.}
tex.sprint(
string.format(string.char(0x5c) .. string.char(0x25) .. '03o' ..
string.char(0x5c) .. string.char(0x25) .. '03o',
- (c / 256), (c % 256)))
+ math.floor(c / 256), math.floor(c % 256)))
else
c = c - 0x10000
local c_hi = c / 1024 + 0xd800
@@ -1062,8 +1062,8 @@ where each line of input produces a line of output.}
string.char(0x5c) .. string.char(0x25) .. '03o' ..
string.char(0x5c) .. string.char(0x25) .. '03o' ..
string.char(0x5c) .. string.char(0x25) .. '03o',
- (c_hi / 256), (c_hi % 256),
- (c_lo / 256), (c_lo % 256)))
+ math.floor(c_hi / 256), math.floor(c_hi % 256),
+ math.floor(c_lo / 256), math.floor(c_lo % 256)))
end
end
end
@@ -1076,15 +1076,19 @@ where each line of input produces a line of output.}
function PDFescstr(str)
for c in string.bytes(str) do
if c <= 0x20 or c >= 0x80 or c == 0x28 or c == 0x29 or c == 0x5c then
- tex.sprint(
+ tex.sprint(-2,
string.format(string.char(0x5c) .. string.char(0x25) .. '03o',
c))
else
- tex.sprint(string.char(c))
+ tex.sprint(-2, string.char(c))
end
end
end
}
+ % The -2 in the arguments here gives all the input to TeX catcode 12
+ % (other) or 10 (space), preventing undefined control sequence errors. See
+ % https://lists.gnu.org/archive/html/bug-texinfo/2019-08/msg00031.html
+ %
\endgroup
\def\pdfescapestring#1{\directlua{PDFescstr('\luaescapestring{#1}')}}
\ifnum\luatexversion>84
@@ -4843,6 +4847,7 @@ end
\definedummyletter\ %
\definedummyletter\{%
\definedummyletter\}%
+ \definedummyletter\&%
%
% Do the redefinitions.
\definedummies
@@ -4913,6 +4918,7 @@ end
\definedummyword\TeX
%
% Assorted special characters.
+ \definedummyword\ampchar
\definedummyword\atchar
\definedummyword\arrow
\definedummyword\backslashchar
-----------------------------------------------------------------------
Summary of changes:
NEWS | 8 +-
README | 4 +-
doc/ChangeLog | 7 +
doc/gawk.info | 3798 +++++++++++++++++++++++++++++--------------------------
doc/gawk.texi | 3576 ++++++++++++++++++++++++++-------------------------
doc/gawktexi.in | 3426 +++++++++++++++++++++++++------------------------
doc/sidebar.awk | 2 +-
doc/texinfo.tex | 18 +-
8 files changed, 5645 insertions(+), 5194 deletions(-)
hooks/post-receive
--
gawk
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [gawk-diffs] [SCM] gawk branch, master, updated. gawk-4.1.0-3827-g4a034ab,
Arnold Robbins <=