aboutsummaryrefslogtreecommitdiffstats
path: root/doc/gawk.info
diff options
context:
space:
mode:
Diffstat (limited to 'doc/gawk.info')
-rw-r--r--doc/gawk.info1523
1 files changed, 774 insertions, 749 deletions
diff --git a/doc/gawk.info b/doc/gawk.info
index 70c63046..67e5f0f1 100644
--- a/doc/gawk.info
+++ b/doc/gawk.info
@@ -184,7 +184,6 @@ texts being (a) (see below), and with the Back-Cover Texts being (b)
* Getline Notes:: Important things to know about
`getline'.
* Getline Summary:: Summary of `getline' Variants.
-* BEGINFILE/ENDFILE:: Two special patterns for advanced control.
* Command line directories:: What happens if you put a directory on the
command line.
* Print:: The `print' statement.
@@ -256,6 +255,7 @@ texts being (a) (see below), and with the Back-Cover Texts being (b)
* I/O And BEGIN/END:: I/O issues in BEGIN/END rules.
* Empty:: The empty pattern, which matches every
record.
+* BEGINFILE/ENDFILE:: Two special patterns for advanced control.
* Using Shell Variables:: How to use shell variables with
`awk'.
* Action Overview:: What goes into an action.
@@ -2927,7 +2927,6 @@ have to be named on the `awk' command line (*note Getline::).
* Multiple Line:: Reading multi-line records.
* Getline:: Reading files under explicit program control
using the `getline' function.
-* BEGINFILE/ENDFILE:: Two special patterns for advanced control.
* Command line directories:: What happens if you put a directory on the
command line.
@@ -4091,7 +4090,7 @@ feature of `RS' does not apply. It does apply to the default field
separator of a single space: `FS = " "'.

-File: gawk.info, Node: Getline, Next: BEGINFILE/ENDFILE, Prev: Multiple Line, Up: Reading Files
+File: gawk.info, Node: Getline, Next: Command line directories, Prev: Multiple Line, Up: Reading Files
3.9 Explicit Input with `getline'
=================================
@@ -4515,70 +4514,9 @@ VAR
Table 3.1: getline Variants and What They Set

-File: gawk.info, Node: BEGINFILE/ENDFILE, Next: Command line directories, Prev: Getline, Up: Reading Files
-
-3.10 The `BEGINFILE' and `ENDFILE' Special Patterns
-===================================================
-
- NOTE: This minor node describes a `gawk'-specific feature.
-
- Two special kinds of rule, `BEGINFILE' and `ENDFILE', give you
-"hooks" into `gawk''s command-line file processing loop. As with the
-`BEGIN' and `END' rules (*note BEGIN/END::), all `BEGINFILE' rules in a
-program are merged, in the order they are read by `gawk', and all
-`ENDFILE' rules are merged as well.
+File: gawk.info, Node: Command line directories, Prev: Getline, Up: Reading Files
- The body of the `BEGINFILE' rules is executed just before `gawk'
-reads the first record from a file. `FILENAME' is set to the name of
-the current file, and `FNR' is set to zero.
-
- The `BEGINFILE' rule provides you the opportunity for two tasks that
-would otherwise be difficult or impossible to perform:
-
- 1. You can test if the file is readable. Normally, it is a fatal
- error if a 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.
-
- You do this by checking if the `ERRNO' variable is not the empty
- string; if so, then `gawk' was not able to open the file. In this
- case, your program can execute the `nextfile' statement (*note
- Nextfile Statement::). This casuses `gawk' to skip the file
- entirely. Otherwise, `gawk' exits with the usual fatal error.
-
- 2. If you have written extensions that modify the record handling (by
- inserting an "open hook"), you can invoke them at this point,
- before `gawk' has started processing the file. (This is a _very_
- advanced feature, currently used only by the XMLgawk project
- (http://xgawk.sourceforge.net).)
-
- The `ENDFILE' rule is called when `gawk' has finished processing the
-last record in an input file. For the last input file, it will be
-called before any `END' rules.
-
- Normally, when an error occurs when reading input in the normal input
-processing loop, the error is fatal. However, if an `ENDFILE' rule is
-present, the error becomes non-fatal, and instead `ERRNO' is set. This
-makes it possible to catch and process I/O errors at the level of the
-`awk' program.
-
- The `next' statement (*note Next Statement::) is not allowed inside
-either a `BEGINFILE' or and `ENDFILE' rule. The `nextfile' statement
-(*note Nextfile Statement::) is allowed only inside a `BEGINFILE' rule,
-but not inside an `ENDFILE' rule.
-
- The `getline' statement (*note Getline::) is restricted inside both
-`BEGINFILE' and `ENDFILE'. Only the `getline VARIABLE < FILE' form is
-allowed.
-
- `BEGINFILE' and `ENDFILE' are `gawk' extensions. In most other
-`awk' implementations, or if `gawk' is in compatibility mode (*note
-Options::), they are not special.
-
-
-File: gawk.info, Node: Command line directories, Prev: BEGINFILE/ENDFILE, Up: Reading Files
-
-3.11 Directories On The Command Line
+3.10 Directories On The Command Line
====================================
According to the POSIX standard, files named on the `awk' command line
@@ -7270,6 +7208,7 @@ File: gawk.info, Node: Pattern Overview, Next: Using Shell Variables, Up: Pat
* Ranges:: Pairs of patterns specify record ranges.
* BEGIN/END:: Specifying initialization and cleanup rules.
* Empty:: The empty pattern, which matches every record.
+* BEGINFILE/ENDFILE:: Two special patterns for advanced control.
Patterns in `awk' control the execution of rules--a rule is executed
when its pattern matches the current input record. The following is a
@@ -7296,6 +7235,11 @@ summary of the types of `awk' patterns:
`EMPTY'
The empty pattern matches every input record. (*Note Empty::.)
+`BEGINFILE'
+`ENDFILE'
+ Special patterns for you to supply startup or cleanup actions to
+ done on a per file basis. (*Note BEGINFILE/ENDFILE::.)
+

File: gawk.info, Node: Regexp Patterns, Next: Expression Patterns, Up: Pattern Overview
@@ -7386,9 +7330,9 @@ contain the string `foo':
The subexpressions of a Boolean operator in a pattern can be
constant regular expressions, comparisons, or any other `awk'
expressions. Range patterns are not expressions, so they cannot appear
-inside Boolean patterns. Likewise, the special patterns `BEGIN' and
-`END', which never match any input record, are not expressions and
-cannot appear inside Boolean patterns.
+inside Boolean patterns. Likewise, the special patterns `BEGIN', `END',
+`BEGINFILE' and `ENDFILE', which never match any input record, are not
+expressions and cannot appear inside Boolean patterns.

File: gawk.info, Node: Ranges, Next: BEGIN/END, Prev: Expression Patterns, Up: Pattern Overview
@@ -7453,9 +7397,7 @@ worked around; range patterns do not combine with other patterns:
$ echo Yes | gawk '(/1/,/2/) || /Yes/'
error--> gawk: cmd. line:1: (/1/,/2/) || /Yes/
- error--> gawk: cmd. line:1: ^ parse error
- error--> gawk: cmd. line:2: (/1/,/2/) || /Yes/
- error--> gawk: cmd. line:2: ^ unexpected newline
+ error--> gawk: cmd. line:1: ^ syntax error

File: gawk.info, Node: BEGIN/END, Next: Empty, Prev: Ranges, Up: Pattern Overview
@@ -7563,7 +7505,7 @@ however, that Unix `awk', and possibly other implementations, do not.
The third point follows from the first two. The meaning of `print'
inside a `BEGIN' or `END' rule is the same as always: `print $0'. If
-`$0' is the null string, then this prints an empty line. Many long
+`$0' is the null string, then this prints an empty record. Many long
time `awk' programmers use an unadorned `print' in `BEGIN' and `END'
rules, to mean `print ""', relying on `$0' being null. Although one
might generally get away with this in `BEGIN' rules, it is a very bad
@@ -7579,7 +7521,7 @@ the input has been read. (*Note Next Statement::, and see *note
Nextfile Statement::.)

-File: gawk.info, Node: Empty, Prev: BEGIN/END, Up: Pattern Overview
+File: gawk.info, Node: Empty, Next: BEGINFILE/ENDFILE, Prev: BEGIN/END, Up: Pattern Overview
6.1.5 The Empty Pattern
-----------------------
@@ -7592,6 +7534,67 @@ input record. For example, the program:
prints the first field of every record.

+File: gawk.info, Node: BEGINFILE/ENDFILE, Prev: Empty, Up: Pattern Overview
+
+6.1.6 The `BEGINFILE' and `ENDFILE' Special Patterns
+----------------------------------------------------
+
+ NOTE: This minor node describes a `gawk'-specific feature.
+
+ Two special kinds of rule, `BEGINFILE' and `ENDFILE', give you
+"hooks" into `gawk''s command-line file processing loop. As with the
+`BEGIN' and `END' rules (*note BEGIN/END::), all `BEGINFILE' rules in a
+program are merged, in the order they are read by `gawk', and all
+`ENDFILE' rules are merged as well.
+
+ The body of the `BEGINFILE' rules is executed just before `gawk'
+reads the first record from a file. `FILENAME' is set to the name of
+the current file, and `FNR' is set to zero.
+
+ The `BEGINFILE' rule provides you the opportunity for two tasks that
+would otherwise be difficult or impossible to perform:
+
+ 1. You can test if the file is readable. Normally, it is a fatal
+ error if a 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.
+
+ You do this by checking if the `ERRNO' variable is not the empty
+ string; if so, then `gawk' was not able to open the file. In this
+ case, your program can execute the `nextfile' statement (*note
+ Nextfile Statement::). This casuses `gawk' to skip the file
+ entirely. Otherwise, `gawk' exits with the usual fatal error.
+
+ 2. If you have written extensions that modify the record handling (by
+ inserting an "open hook"), you can invoke them at this point,
+ before `gawk' has started processing the file. (This is a _very_
+ advanced feature, currently used only by the XMLgawk project
+ (http://xgawk.sourceforge.net).)
+
+ The `ENDFILE' rule is called when `gawk' has finished processing the
+last record in an input file. For the last input file, it will be
+called before any `END' rules.
+
+ Normally, when an error occurs when reading input in the normal input
+processing loop, the error is fatal. However, if an `ENDFILE' rule is
+present, the error becomes non-fatal, and instead `ERRNO' is set. This
+makes it possible to catch and process I/O errors at the level of the
+`awk' program.
+
+ The `next' statement (*note Next Statement::) is not allowed inside
+either a `BEGINFILE' or and `ENDFILE' rule. The `nextfile' statement
+(*note Nextfile Statement::) is allowed only inside a `BEGINFILE' rule,
+but not inside an `ENDFILE' rule.
+
+ The `getline' statement (*note Getline::) is restricted inside both
+`BEGINFILE' and `ENDFILE'. Only the `getline VARIABLE < FILE' form is
+allowed.
+
+ `BEGINFILE' and `ENDFILE' are `gawk' extensions. In most other
+`awk' implementations, or if `gawk' is in compatibility mode (*note
+Options::), they are not special.
+
+
File: gawk.info, Node: Using Shell Variables, Next: Action Overview, Prev: Pattern Overview, Up: Patterns and Actions
6.2 Using Shell Variables in Programs
@@ -7607,7 +7610,7 @@ program.
variable's value into the program inside the script. For example, in
the following program:
- echo -n "Enter search pattern: "
+ printf "Enter search pattern: "
read pattern
awk "/$pattern/ "'{ nmatches++ }
END { print nmatches, "found" }' /path/to/data
@@ -7628,7 +7631,7 @@ variable's value. Then use dynamic regexps to match the pattern (*note
Computed Regexps::). The following shows how to redo the previous
example using this technique:
- echo -n "Enter search pattern: "
+ printf "Enter search pattern: "
read pattern
awk -v pat="$pattern" '$0 ~ pat { nmatches++ }
END { print nmatches, "found" }' /path/to/data
@@ -7655,8 +7658,8 @@ which (but not both) may be omitted. The purpose of the "action" is to
tell `awk' what to do once a match for the pattern is found. Thus, in
outline, an `awk' program generally looks like this:
- [PATTERN] [{ ACTION }]
- [PATTERN] [{ ACTION }]
+ [PATTERN] { ACTION }
+ PATTERN [{ ACTION }]
...
function NAME(ARGS) { ... }
...
@@ -7709,7 +7712,7 @@ File: gawk.info, Node: Statements, Next: Built-in Variables, Prev: Action Ove
"Control statements", such as `if', `while', and so on, control the
flow of execution in `awk' programs. Most of the control statements in
-`awk' are patterned on similar statements in C.
+`awk' are patterned after similar statements in C.
All the control statements start with special keywords, such as `if'
and `while', to distinguish them from simple expressions. Many control
@@ -7802,7 +7805,8 @@ is never executed and `awk' continues with the statement following the
loop. This example prints the first three fields of each record, one
per line:
- awk '{ i = 1
+ awk '{
+ i = 1
while (i <= 3) {
print $i
i++
@@ -7847,7 +7851,8 @@ Contrast this with the corresponding `while' statement:
This statement does not execute BODY even once if the CONDITION is
false to begin with. The following is an example of a `do' statement:
- { i = 1
+ {
+ i = 1
do {
print $0
i++
@@ -7880,7 +7885,8 @@ INCREMENT. Typically, INITIALIZATION sets a variable to either zero or
one, INCREMENT adds one to it, and CONDITION compares it against the
desired number of iterations. For example:
- awk '{ for (i = 1; i <= 3; i++)
+ awk '{
+ for (i = 1; i <= 3; i++)
print $i
}' inventory-shipped
@@ -7969,7 +7975,7 @@ statement looks like this:
}
Control flow in the `switch' statement works as it does in C. Once a
-match to a given case is made, case statement bodies are executed until
+match to a given case is made, the case statement bodies execute until
a `break', `continue', `next', `nextfile' or `exit' is encountered, or
the end of the `switch' statement itself. For example:
@@ -7997,8 +8003,8 @@ is executed and then falls through into the `default' section,
executing its `print' statement. In turn, the -1 case will also be
executed since the `default' does not halt execution.
- This feature is a `gawk' extension, and is not available in POSIX
-`awk'.
+ This `switch' statement is a `gawk' extension. If `gawk' is in
+compatibility mode (*note Options::), it is not available.

File: gawk.info, Node: Break Statement, Next: Continue Statement, Prev: Switch Statement, Up: Statements
@@ -8013,9 +8019,10 @@ divisor of any integer, and also identifies prime numbers:
# find smallest divisor of num
{
num = $1
- for (div = 2; div*div <= num; div++)
+ for (div = 2; div * div <= num; div++) {
if (num % div == 0)
break
+ }
if (num % div == 0)
printf "Smallest divisor of %d is %d\n", num, div
else
@@ -8040,19 +8047,22 @@ Statement::.)
printf "Smallest divisor of %d is %d\n", num, div
break
}
- if (div*div > num) {
+ if (div * div > num) {
printf "%d is prime\n", num
break
}
}
}
+ The `break' statement is also used to break out of the `switch'
+statement. This is discussed in *note Switch Statement::.
+
The `break' statement has no meaning when used outside the body of a
-loop. However, although it was never documented, historical
-implementations of `awk' treated the `break' statement outside of a
-loop as if it were a `next' statement (*note Next Statement::). Recent
-versions of Unix `awk' no longer allow this usage, nor does `gawk'.
-(d.c.)
+loop or `switch'. However, although it was never documented,
+historical implementations of `awk' treated the `break' statement
+outside of a loop as if it were a `next' statement (*note Next
+Statement::). Recent versions of Unix `awk' no longer allow this usage,
+nor does `gawk'. (d.c.)

File: gawk.info, Node: Continue Statement, Next: Next Statement, Prev: Break Statement, Up: Statements
@@ -8060,7 +8070,7 @@ File: gawk.info, Node: Continue Statement, Next: Next Statement, Prev: Break
6.4.7 The `continue' Statement
------------------------------
-As with `break', the `continue' statement is used only inside `for',
+Similar to `break', the `continue' statement is used only inside `for',
`while', and `do' loops. It skips over the rest of the loop body,
causing the next cycle around the loop to begin immediately. Contrast
this with `break', which jumps out of the loop altogether.
@@ -8143,15 +8153,19 @@ see the bad record. The error message is redirected to the standard
error output stream, as error messages should be. For more detail see
*note Special Files::.
+ If the `next' statement causes the end of the input to be reached,
+then the code in any `END' rules is executed. *Note BEGIN/END::.
+
+ The `next' statement is not inside `BEGINFILE' and `ENDFILE' rules.
+*Note BEGINFILE/ENDFILE::.
+
According to the POSIX standard, the behavior is undefined if the
`next' statement is used in a `BEGIN' or `END' rule. `gawk' treats it
as a syntax error. Although POSIX permits it, some other `awk'
implementations don't allow the `next' statement inside function bodies
(*note User-defined::). Just as with any other `next' statement, a
`next' statement inside a function body reads the next record and
-starts processing it with the first rule in the program. If the `next'
-statement causes the end of the input to be reached, then the code in
-any `END' rules is executed. *Note BEGIN/END::.
+starts processing it with the first rule in the program.

File: gawk.info, Node: Nextfile Statement, Next: Exit Statement, Prev: Next Statement, Up: Statements
@@ -8182,6 +8196,10 @@ Normally, in order to move on to the next data file, a program has to
continue scanning the unwanted records. The `nextfile' statement
accomplishes this much more efficiently.
+ In addition, `nextfile' is useful inside a `BEGINFILE' rule to skip
+over a file that would otherwise cause `gawk' to exit with a fatal
+error. *Note BEGINFILE/ENDFILE::.
+
While one might think that `close(FILENAME)' would accomplish the
same as `nextfile', this isn't true. `close()' is reserved for closing
files, pipes, and coprocesses that are opened with redirections. It is
@@ -8199,13 +8217,6 @@ Versions::) also supports `nextfile'. However, it doesn't allow the
and starts processing it with the first rule in the program, just as
any other `nextfile' statement.
- *Caution:* Versions of `gawk' prior to 3.0 used two words (`next
-file') for the `nextfile' statement. In version 3.0, this was changed
-to one word, because the treatment of `file' was inconsistent. When it
-appeared after `next', `file' was a keyword; otherwise, it was a
-regular identifier. The old usage is no longer accepted; `next file'
-generates a syntax error.
-
The `nextfile' statement has a special purpose when used inside a
`BEGINFILE' rule; see *note BEGINFILE/ENDFILE::.
@@ -8225,8 +8236,8 @@ ignored. The `exit' statement is written as follows:
program stops processing everything immediately. No input records are
read. However, if an `END' rule is present, as part of executing the
`exit' statement, the `END' rule is executed (*note BEGIN/END::). If
-`exit' is used as part of an `END' rule, it causes the program to stop
-immediately.
+`exit' is used in the body of an `END' rule, it causes the program to
+stop immediately.
An `exit' statement that is not part of a `BEGIN' or `END' rule
stops the execution of any further automatic rules for the current
@@ -8352,8 +8363,8 @@ specific to `gawk' are marked with a pound sign (`#').
record. If the value is the null string (`""'), then each
character in the record becomes a separate field. (This behavior
is a `gawk' extension. POSIX `awk' does not specify the behavior
- when `FS' is the null string.) *FIXME: NEXT ED:* Mark as common
- extension.
+ when `FS' is the null string. Nonetheless, some other versions of
+ `awk' also treat `""' specially.)
The default value is `" "', a string consisting of a single space.
As a special exception, this value means that any sequence of
@@ -8366,10 +8377,10 @@ specific to `gawk' are marked with a pound sign (`#').
awk -F, 'PROGRAM' INPUT-FILES
- If `gawk' is using `FIELDWIDTHS' for field splitting, assigning a
- value to `FS' causes `gawk' to return to the normal, `FS'-based
- field splitting. An easy way to do this is to simply say `FS =
- FS', perhaps with an explanatory comment.
+ If `gawk' is using `FIELDWIDTHS' or `FPAT' for field splitting,
+ assigning a value to `FS' causes `gawk' to return to the normal,
+ `FS'-based field splitting. An easy way to do this is to simply
+ say `FS = FS', perhaps with an explanatory comment.
`IGNORECASE #'
If `IGNORECASE' is nonzero or non-null, then all string comparisons
@@ -8496,7 +8507,7 @@ with a pound sign (`#').
The value of `ARGV[0]' can vary from system to system. Also, you
should note that the program text is _not_ included in `ARGV', nor
are any of `awk''s command-line options. *Note ARGC and ARGV::,
- for information about how `awk' uses these variables.
+ for information about how `awk' uses these variables. (d.c.)
`ARGIND #'
The index in `ARGV' of the current file being processed. Every
@@ -8519,7 +8530,7 @@ with a pound sign (`#').
Options::), it is not special.
`ENVIRON'
- An associative array that contains the values of the environment.
+ An associative array containing the values of the environment.
The array indices are the environment variable names; the elements
are the values of the particular environment variables. For
example, `ENVIRON["HOME"]' might be `/home/arnold'. Changing this
@@ -8562,7 +8573,7 @@ with a pound sign (`#').
`FNR'
The current record number in the current file. `FNR' is
- incremented each time a new record is read (*note Getline::). It
+ incremented each time a new record is read (*note Records::). It
is reinitialized to zero each time a new input file is started.
`NF'
@@ -8587,10 +8598,10 @@ with a pound sign (`#').
alphabetically) are guaranteed to be available:
`PROCINFO["egid"]'
- The value of the `getegid' system call.
+ The value of the `getegid()' system call.
`PROCINFO["euid"]'
- The value of the `geteuid' system call.
+ The value of the `geteuid()' system call.
`PROCINFO["FS"]'
This is `"FS"' if field splitting with `FS' is in effect,
@@ -8599,7 +8610,7 @@ with a pound sign (`#').
effect.
`PROCINFO["gid"]'
- The value of the `getgid' system call.
+ The value of the `getgid()' system call.
`PROCINFO["pgrpid"]'
The process group ID of the current process.
@@ -8611,17 +8622,20 @@ with a pound sign (`#').
The parent process ID of the current process.
`PROCINFO["uid"]'
- The value of the `getuid' system call.
+ The value of the `getuid()' system call.
`PROCINFO["version"]'
- The version of `gawk'. This is available from version 3.1.4
- and later.
+ The version of `gawk'.
On some systems, there may be elements in the array, `"group1"'
through `"groupN"' for some N. N is the number of supplementary
groups that the process has. Use the `in' operator to test for
these elements (*note Reference to Elements::).
+ The `PROCINFO' array is also used to cause coprocesses to
+ communicate over pseudo-ttys instead of through two-way pipes;
+ this is discussed further in *note Two-way I/O::.
+
This array is a `gawk' extension. In other `awk' implementations,
or if `gawk' is in compatibility mode (*note Options::), it is not
special.
@@ -8653,8 +8667,8 @@ Advanced Notes: Changing `NR' and `FNR'
`awk' increments `NR' and `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 change these variables and their new values
-are incremented for each record. (d.c.) This is demonstrated in the
-following example:
+are incremented for each record. (d.c.) The following example shows
+this:
$ echo '1
> 2
@@ -8695,19 +8709,22 @@ information contained in `ARGC' and `ARGV':
In this example, `ARGV[0]' contains `awk', `ARGV[1]' contains
`inventory-shipped', and `ARGV[2]' contains `BBS-list'. Notice that
-the `awk' program is not entered in `ARGV'. The other special
-command-line options, with their arguments, are also not entered. This
-includes variable assignments done with the `-v' option (*note
-Options::). Normal variable assignments on the command line _are_
-treated as arguments and do show up in the `ARGV' array:
-
- $ cat showargs.awk
- -| BEGIN {
- -| printf "A=%d, B=%d\n", A, B
- -| for (i = 0; i < ARGC; i++)
- -| printf "\tARGV[%d] = %s\n", i, ARGV[i]
- -| }
- -| END { printf "A=%d, B=%d\n", A, B }
+the `awk' program is not entered in `ARGV'. The other command-line
+options, with their arguments, are also not entered. This includes
+variable assignments done with the `-v' option (*note Options::).
+Normal variable assignments on the command line _are_ treated as
+arguments and do show up in the `ARGV' array. Given the following
+program in a file named `showargs.awk':
+
+ BEGIN {
+ printf "A=%d, B=%d\n", A, B
+ for (i = 0; i < ARGC; i++)
+ printf "\tARGV[%d] = %s\n", i, ARGV[i]
+ }
+ END { printf "A=%d, B=%d\n", A, B }
+
+Running it produces the following:
+
$ awk -v A=1 -f showargs.awk B=2 /dev/null
-| A=1, B=0
-| ARGV[0] = awk
@@ -8737,8 +8754,7 @@ elements from `ARGV' (*note Delete::).
actual processing of the input begins. *Note Split Program::, and see
*note Tee Program::, for examples of each way of removing elements from
`ARGV'. The following fragment processes `ARGV' in order to examine,
-and then remove, command-line options: *FIXME: NEXT ED:* Add xref to
-rewind() function.
+and then remove, command-line options:
BEGIN {
for (i = 1; i < ARGC; i++) {
@@ -8780,15 +8796,16 @@ File: gawk.info, Node: Arrays, Next: Functions, Prev: Patterns and Actions,
*****************
An "array" is a table of values called "elements". The elements of an
-array are distinguished by their indices. "Indices" may be either
+array are distinguished by their "indices". Indices may be either
numbers or strings.
This major node describes how arrays work in `awk', how to use array
elements, how to scan through every element in an array, and how to
remove array elements. It also describes how `awk' simulates
multidimensional arrays, as well as some of the less obvious points
-about array usage. The major node finishes with a discussion of
-`gawk''s facility for sorting an array based on its indices.
+about array usage. The major node moves on to discuss `gawk''s facility
+for sorting arrays, and ends with a brief description of `gawk''s
+ability to support true multidimensional arrays.
`awk' maintains a single set of names that may be used for naming
variables, arrays, and functions (*note User-defined::). Thus, you
@@ -8833,7 +8850,7 @@ File: gawk.info, Node: Array Intro, Next: Reference to Elements, Up: Array Ba
7.1.1 Introduction to Arrays
----------------------------
- Doing linear scans over an associative array is like tryinng to
+ Doing linear scans over an associative array is like trying to
club someone to death with a loaded Uzi.
Larry Wall
@@ -8868,7 +8885,6 @@ declared.)
example, conceptually, if the element values are 8, `"foo"', `""', and
30:
- *FIXME: NEXT ED:* Use real images here
+---------+---------+--------+---------+
| 8 | "foo" | "" | 30 | Value
+---------+---------+--------+---------+
@@ -8882,10 +8898,10 @@ position with zero elements before it.
that each array is a collection of pairs: an index and its corresponding
array element value:
- Element 3 Value 30
- Element 1 Value "foo"
- Element 0 Value 8
- Element 2 Value ""
+ Index 3 Value 30
+ Index 1 Value "foo"
+ Index 0 Value 8
+ Index 2 Value ""
The pairs are shown in jumbled order because their order is irrelevant.
@@ -8893,11 +8909,11 @@ The pairs are shown in jumbled order because their order is irrelevant.
at any time. For example, suppose a tenth element is added to the array
whose value is `"number ten"'. The result is:
- Element 10 Value "number ten"
- Element 3 Value 30
- Element 1 Value "foo"
- Element 0 Value 8
- Element 2 Value ""
+ Index 10 Value "number ten"
+ Index 3 Value 30
+ Index 1 Value "foo"
+ Index 0 Value 8
+ Index 2 Value ""
Now the array is "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
@@ -8908,10 +8924,10 @@ have to be positive integers. Any number, or even a string, can be an
index. For example, the following is an array that translates words
from English to French:
- Element "dog" Value "chien"
- Element "cat" Value "chat"
- Element "one" Value "un"
- Element 1 Value "un"
+ Index "dog" Value "chien"
+ Index "cat" Value "chat"
+ Index "one" Value "un"
+ Index 1 Value "un"
Here we decided to translate the number one in both spelled-out and
numeric form--thus illustrating that a single array can have both
@@ -8950,9 +8966,21 @@ array `foo' at index `4.3'.
A reference to an array element that has no recorded value yields a
value of `""', the null string. This includes elements that have not
been assigned any value as well as elements that have been deleted
-(*note Delete::). Such a reference automatically creates that array
-element, with the null string as its value. (In some cases, this is
-unfortunate, because it might waste memory inside `awk'.)
+(*note Delete::).
+
+ NOTE: A reference to an element that does not exist
+ _automatically_ creates that array element, with the null string
+ as its value. (In some cases, this is unfortunate, because it
+ might waste memory inside `awk'.)
+
+ Novice `awk' programmers often make the mistake of checking if an
+ element exists by checking if the value is empty:
+
+ # Check if "foo" exists in a: Incorrect!
+ if (a["foo"] != "") ...
+
+ This is incorrect, since this will _create_ `a["foo"]' if it
+ didn't exist before!
To determine whether an element exists in an array at a certain
index, use the following expression:
@@ -9167,7 +9195,9 @@ array and then returns.
delete an array and then use the array's name as a scalar (i.e., a
regular variable). For example, the following does not work:
- a[1] = 3; delete a; a = 3
+ a[1] = 3
+ delete a
+ a = 3
---------- Footnotes ----------
@@ -9179,7 +9209,7 @@ File: gawk.info, Node: Numeric Array Subscripts, Next: Uninitialized Subscript
7.3 Using Numbers to Subscript Arrays
=====================================
-An important aspect about arrays to remember is that _array subscripts
+An important aspect to remember about arrays is that _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
(*note Conversion::). This means that the value of the built-in
@@ -9201,8 +9231,8 @@ string value `"12.153"' (using the default conversion value of
assigned the value one. The program then changes the value of
`CONVFMT'. The test `(xyz in data)' generates a new string value from
`xyz'--this time `"12.15"'--because the value of `CONVFMT' only allows
-two significant digits. This test fails, since `"12.15"' is a
-different string from `"12.153"'.
+two significant digits. This test fails, since `"12.15"' is different
+from `"12.153"'.
According to the rules for conversions (*note Conversion::), integer
values are always converted to strings as integers, no matter what the
@@ -9221,8 +9251,8 @@ the same element!
As with many things in `awk', the majority of the time things work
as one would expect them to. But it is useful to have a precise
-knowledge of the actual rules which sometimes can have a subtle effect
-on your programs.
+knowledge of the actual rules since they can sometimes have a subtle
+effect on your programs.

File: gawk.info, Node: Uninitialized Subscripts, Next: Multi-dimensional, Prev: Numeric Array Subscripts, Up: Arrays
@@ -9247,9 +9277,10 @@ might look like this:
Unfortunately, the very first line of input data did not come out in
the output!
- At first glance, this program should have worked. The variable
-`lines' is uninitialized, and uninitialized variables have the numeric
-value zero. So, `awk' should have printed the value of `l[0]'.
+ Upon first glance, we would think that this program should have
+worked. The variable `lines' is uninitialized, and uninitialized
+variables have the numeric value zero. So, `awk' should have printed
+the value of `l[0]'.
The issue here is that subscripts for `awk' arrays are _always_
strings. Uninitialized variables, when used as strings, have the value
@@ -9436,41 +9467,24 @@ and then sorts `dest', destroying its indices. However, the `source'
array is not affected.
Often, what's needed is to sort on the values of the _indices_
-instead of the values of the elements. To do that, starting with
-`gawk' 3.1.2, use the `asorti()' function. The interface is identical
-to that of `asort()', except that the index values are used for
-sorting, and become the values of the result array:
+instead of the values of the elements. To do that, use the `asorti()'
+function. The interface is identical to that of `asort()', except that
+the index values are used for sorting, and become the values of the
+result array:
{ source[$0] = some_func($0) }
END {
n = asorti(source, dest)
for (i = 1; i <= n; i++) {
- DO SOMETHING WITH dest[i] Work with sorted indices directly
+ Work with sorted indices directly:
+ DO SOMETHING WITH dest[i]
...
- DO SOMETHING WITH source[dest[i]] Access original array via sorted indices
+ Access original array via sorted indices:
+ DO SOMETHING WITH source[dest[i]]
}
}
- If your version of `gawk' is 3.1.0 or 3.1.1, you don't have
-`asorti()'. Instead, use a helper array to hold the sorted index
-values, and then access the original array's elements. It works in the
-following way:
-
- POPULATE THE ARRAY data
- # copy indices
- j = 1
- for (i in data) {
- ind[j] = i # index value becomes element value
- j++
- }
- n = asort(ind) # index values are now sorted
- for (i = 1; i <= n; i++) {
- DO SOMETHING WITH ind[i] Work with sorted indices directly
- ...
- DO SOMETHING WITH data[ind[i]] Access original array via sorted indices
- }
-
Sorting the array by replacing the indices provides maximal
flexibility. To traverse the elements in decreasing order, use a loop
that goes from N down to 1, either over the elements or over the
@@ -9487,9 +9501,15 @@ to `ind', there is only one copy of the actual index strings.
comparison rules." Because `IGNORECASE' affects string comparisons,
the value of `IGNORECASE' also affects sorting for both `asort()' and
`asorti()'. Note also that the locale's sorting order does _not_ come
-into play; comparisons are based on character values only. Caveat
+into play; comparisons are based on character values only.(1) Caveat
Emptor.
+ ---------- Footnotes ----------
+
+ (1) This is true because locale-based comparison occurs only when in
+POSIX compatibility mode, and since `asort()' and `asorti()' are `gawk'
+extensions, they are not available in that case.
+

File: gawk.info, Node: Arrays of Arrays, Prev: Array Sorting, Up: Arrays
@@ -9605,7 +9625,7 @@ File: gawk.info, Node: Functions, Next: Internationalization, Prev: Arrays,
This major node describes `awk''s built-in functions, which fall into
three categories: numeric, string, and I/O. `gawk' provides additional
groups of functions to work with values that represent time, do bit
-manipulation, and internationalize and localize programs.
+manipulation, sort arrays, and internationalize and localize programs.
Besides the built-in functions, `awk' has provisions for writing new
functions that the rest of a program can use. The second half of this
@@ -9695,39 +9715,32 @@ The following list describes all of the built-in functions that work
with numbers. Optional parameters are enclosed in square
brackets ([ ]):
-`int(X)'
- This returns the nearest integer to X, located between X and zero
- and truncated toward zero.
-
- For example, `int(3)' is 3, `int(3.9)' is 3, `int(-3.9)' is -3,
- and `int(-3)' is -3 as well.
+`atan2(Y, X)'
+ Return the arctangent of `Y / X' in radians.
-`sqrt(X)'
- This returns the positive square root of X. `gawk' reports an
- error if X is negative. Thus, `sqrt(4)' is 2.
+`cos(X)'
+ Return the cosine of X, with X in radians.
`exp(X)'
- This returns the exponential of X (`e ^ X') or reports an error if
- X is out of range. The range of values X can have depends on your
+ Return the exponential of X (`e ^ X') or report an error if X is
+ out of range. The range of values X can have depends on your
machine's floating-point representation.
-`log(X)'
- This returns the natural logarithm of X, if X is positive;
- otherwise, it reports an error.
-
-`sin(X)'
- This returns the sine of X, with X in radians.
+`int(X)'
+ Return the nearest integer to X, located between X and zero and
+ truncated toward zero.
-`cos(X)'
- This returns the cosine of X, with X in radians.
+ For example, `int(3)' is 3, `int(3.9)' is 3, `int(-3.9)' is -3,
+ and `int(-3)' is -3 as well.
-`atan2(Y, X)'
- This returns the arctangent of `Y / X' in radians.
+`log(X)'
+ Return the natural logarithm of X, if X is positive; otherwise,
+ report an error.
`rand()'
- This returns a random number. The values of `rand()' are
- uniformly distributed between zero and one. The value could be
- zero but is never one.(1)
+ Return a random number. The values of `rand()' are uniformly
+ distributed between zero and one. The value could be zero but is
+ never one.(1)
Often random integers are needed instead. Following is a
user-defined function that can be used to obtain a random
@@ -9757,25 +9770,32 @@ brackets ([ ]):
*Caution:* In most `awk' implementations, including `gawk',
`rand()' starts generating numbers from the same starting number,
- or "seed", each time you run `awk'. Thus, a program generates the
- same results each time you run it. The numbers are random within
- one `awk' run but predictable from run to run. This is convenient
- for debugging, but if you want a program to do different things
- each time it is used, you must change the seed to a value that is
- different in each run. To do this, use `srand()'.
+ or "seed", each time you run `awk'.(2) Thus, a program generates
+ the same results each time you run it. The numbers are random
+ within one `awk' run but predictable from run to run. This is
+ convenient for debugging, but if you want a program to do
+ different things each time it is used, you must change the seed to
+ a value that is different in each run. To do this, use `srand()'.
+
+`sin(X)'
+ Return the sine of X, with X in radians.
+
+`sqrt(X)'
+ Return the positive square root of X. `gawk' reports an error if
+ X is negative. Thus, `sqrt(4)' is 2.
`srand([X])'
- The function `srand()' sets the starting point, or seed, for
- generating random numbers to the value X.
+ Set the starting point, or seed, for generating random numbers to
+ the value X.
Each seed value leads to a particular sequence of random
- numbers.(2) Thus, if the seed is set to the same value a second
+ numbers.(3) Thus, if the seed is set to the same value a second
time, the same sequence of random numbers is produced again.
- Different `awk' implementations use different random-number
- generators internally. Don't expect the same `awk' program to
- produce the same series of random numbers when executed by
- different versions of `awk'.
+ CAUTION: Different `awk' implementations use different
+ random-number generators internally. Don't expect the same
+ `awk' program to produce the same series of random numbers
+ when executed by different versions of `awk'.
If the argument X is omitted, as in `srand()', then the current
date and time of day are used for a seed. This is the way to get
@@ -9790,10 +9810,12 @@ brackets ([ ]):
(1) The C version of `rand()' is known to produce fairly poor
sequences of random numbers. However, nothing requires that an `awk'
implementation use the C `rand()' to implement the `awk' version of
-`rand()'. In fact, `gawk' uses the BSD `random' function, which is
+`rand()'. In fact, `gawk' uses the BSD `random()' function, which is
considerably better than `rand()', to produce random numbers.
- (2) Computer-generated random numbers really are not truly random.
+ (2) `mawk' uses a different seed each time.
+
+ (3) Computer-generated random numbers really are not truly random.
They are technically known as "pseudorandom." This means that while
the numbers in a sequence appear to be random, you can in fact generate
the same sequence of random numbers over and over again.
@@ -9816,15 +9838,14 @@ with a pound sign (`#'):
`gensub()'.
`asort(SOURCE [, DEST]) #'
- `asort()' is a `gawk'-specific extension, returning the number of
- elements in the array SOURCE. The contents of SOURCE are sorted
- using `gawk''s normal rules for comparing values (in particular,
- `IGNORECASE' affects the sorting) and the indices of the sorted
- values of SOURCE are replaced with sequential integers starting
- with one. If the optional array DEST is specified, then SOURCE is
- duplicated into DEST. DEST is then sorted, leaving the indices of
- SOURCE unchanged. For example, if the contents of `a' are as
- follows:
+ Return the number of elements in the array SOURCE. `gawk' sorts
+ the contents of SOURCE using the normal rules for comparing values
+ (in particular, `IGNORECASE' affects the sorting) and replaces the
+ indices of the sorted values of SOURCE with sequential integers
+ starting with one. If the optional array DEST is specified, then
+ SOURCE is duplicated into DEST. DEST is then sorted, leaving the
+ indices of SOURCE unchanged. For example, if the contents of `a'
+ are as follows:
a["last"] = "de"
a["first"] = "sac"
@@ -9845,22 +9866,20 @@ with a pound sign (`#'):
in compatibility mode (*note Options::).
`asorti(SOURCE [, DEST]) #'
- `asorti()' is a `gawk'-specific extension, returning the number of
- elements in the array SOURCE. It works similarly to `asort()',
- however, the _indices_ are sorted, instead of the values. As
- array indices are always strings, the comparison performed is
- always a string comparison. (Here too, `IGNORECASE' affects the
- sorting.)
+ Return the number of elements in the array SOURCE. It works
+ similarly to `asort()', however, the _indices_ are sorted, instead
+ of the values. As array indices are always strings, the
+ comparison performed is always a string comparison. (Here too,
+ `IGNORECASE' affects the sorting.)
The `asorti()' function is described in more detail in *note Array
- Sorting::. It was added in `gawk' 3.1.2. `asorti()' is a `gawk'
- extension; it is not available in compatibility mode (*note
- Options::).
+ Sorting::. `asorti()' is a `gawk' extension; it is not available
+ in compatibility mode (*note Options::).
`index(IN, FIND)'
- This searches the string IN for the first occurrence of the string
- FIND, and returns the position in characters where that occurrence
- begins in the string IN. Consider the following example:
+ Search the string IN for the first occurrence of the string FIND,
+ and return the position in characters where that occurrence begins
+ in the string IN. Consider the following example:
$ awk 'BEGIN { print index("peanut", "an") }'
-| 3
@@ -9869,8 +9888,8 @@ with a pound sign (`#'):
string indices in `awk' start at one.)
`length([STRING])'
- This returns the number of characters in STRING. If STRING is a
- number, the length of the digit string representing that number is
+ Return the number of characters in STRING. If STRING is a number,
+ the length of the digit string representing that number is
returned. For example, `length("abcde")' is 5. By contrast,
`length(15 * 35)' works out to 3. In this example, 15 * 35 = 525,
and 525 is then converted to the string `"525"', which has three
@@ -9899,25 +9918,24 @@ with a pound sign (`#'):
If `--lint' has been specified on the command line, `gawk' issues a
warning about this.
- Beginning with `gawk' version 3.1.5, when supplied an array
- argument, the `length()' function returns the number of elements
- in the array. This is less useful than it might seem at first, as
- the array is not guaranteed to be indexed from one to the number
- of elements in it. If `--lint' is provided on the command line
- (*note Options::), `gawk' warns that passing an array argument is
- not portable. If `--posix' is supplied, using an array argument
- is a fatal error (*note Arrays::).
+ With `gawk' and several other `awk' implementations, when supplied
+ an array argument, the `length()' function returns the number of
+ elements in the array. This is less useful than it might seem at
+ first, as the array is not guaranteed to be indexed from one to
+ the number of elements in it. If `--lint' is provided on the
+ command line (*note Options::), `gawk' warns that passing an array
+ argument is not portable. If `--posix' is supplied, using an
+ array argument is a fatal error (*note Arrays::).
`match(STRING, REGEXP [, ARRAY])'
- The `match()' function searches STRING for the longest, leftmost
- substring matched by the regular expression, REGEXP. It returns
- the character position, or "index", at which that substring begins
- (one, if it starts at the beginning of STRING). If no match is
- found, it returns zero.
+ Search STRING for the longest, leftmost substring matched by the
+ regular expression, REGEXP and return the character position, or
+ "index", at which that substring begins (one, if it starts at the
+ beginning of STRING). If no match is found, return zero.
The REGEXP argument may be either a regexp constant (`/.../') or a
string constant (`"..."'). In the latter case, the string is
- treated as a regexp to be matched. *note Computed Regexps::, for a
+ treated as a regexp to be matched. *Note Computed Regexps::, for a
discussion of the difference between the two forms, and the
implications for writing your program correctly.
@@ -9971,12 +9989,11 @@ with a pound sign (`#'):
$ echo foooobazbarrrrr |
> gawk '{ match($0, /(fo+).+(bar*)/, arr)
- > print arr[1], arr[2] }'
+ > print arr[1], arr[2] }'
-| foooo barrrrr
- In addition, beginning with `gawk' 3.1.2, multidimensional
- subscripts are available providing the start index and length of
- each matched subexpression:
+ In addition, multidimensional subscripts are available providing
+ the start index and length of each matched subexpression:
$ echo foooobazbarrrrr |
> gawk '{ match($0, /(fo+).+(bar*)/, arr)
@@ -9997,14 +10014,14 @@ with a pound sign (`#'):
compatibility mode (*note Options::), using a third argument is a
fatal error.
-`patsplit(STRING, ARRAY [, FIELDPAT [, SEPS ] ])'
- This function divides STRING into pieces defined by FIELDPAT and
- stores the pieces in ARRAY and the separator strings in the SEPS
- array. The first piece is stored in `ARRAY[1]', the second piece
- in `ARRAY[2]', and so forth. The string value of the third
- argument, FIELDPAT, is a regexp describing the fields in STRING
- (just as `FPAT' is a regexp describing the fields in input
- records). If FIELDPAT is omitted, the value of `FPAT' is used.
+`patsplit(STRING, ARRAY [, FIELDPAT [, SEPS ] ]) #'
+ Divide STRING into pieces defined by FIELDPAT and store the pieces
+ in ARRAY and the separator strings in the SEPS array. The first
+ piece is stored in `ARRAY[1]', the second piece in `ARRAY[2]', and
+ so forth. The third argument, FIELDPAT, is a regexp describing
+ the fields in STRING (just as `FPAT' is a regexp describing the
+ fields in input records). It may be either a regexp constant or a
+ string. If FIELDPAT is omitted, the value of `FPAT' is used.
`patsplit()' returns the number of elements created. `SEPS[I]' is
the separator string between `ARRAY[I]' and `ARRAY[I+1]'. Any
leading separator will be in `SEPS[0]'.
@@ -10012,6 +10029,12 @@ with a pound sign (`#'):
The `patsplit()' function splits strings into pieces in a manner
similar to the way input lines are split into fields using `FPAT'.
+ Before splitting the string, `patsplit()' deletes any previously
+ existing elements in the arrays ARRAY and SEPS.
+
+ The `patsplit()' function is a `gawk' extension. In compatibility
+ mode (*note Options::), it is not available.
+
`split(STRING, ARRAY [, FIELDSEP [, SEPS ] ])'
This function divides STRING into pieces separated by FIELDSEP and
stores the pieces in ARRAY and the separator strings in the SEPS
@@ -11678,17 +11701,17 @@ to force it to be a string value.)
Here is the result of running the program:
$ gawk -f indirectcall.awk class_data1
- => Biology 101:
- => sum: <352.8>
- => average: <88.2>
- =>
- => Chemistry 305:
- => sum: <356.4>
- => average: <89.1>
- =>
- => English 401:
- => sum: <376.1>
- => average: <94.025>
+ -| Biology 101:
+ -| sum: <352.8>
+ -| average: <88.2>
+ -|
+ -| Chemistry 305:
+ -| sum: <356.4>
+ -| average: <89.1>
+ -|
+ -| English 401:
+ -| sum: <376.1>
+ -| average: <94.025>
The ability to use indirect function calls is more powerful than you
may think at first. The C and C++ languages provide "function
@@ -11808,23 +11831,23 @@ names of the two comparison functions:
Finally, here are the results when the enhanced program is run:
$ gawk -f quicksort.awk -f indirectcall.awk class_data2
- => Biology 101:
- => sum: <352.8>
- => average: <88.2>
- => sort: <78.5 87.0 92.4 94.9>
- => rsort: <94.9 92.4 87.0 78.5>
- =>
- => Chemistry 305:
- => sum: <356.4>
- => average: <89.1>
- => sort: <75.2 88.2 94.7 98.3>
- => rsort: <98.3 94.7 88.2 75.2>
- =>
- => English 401:
- => sum: <376.1>
- => average: <94.025>
- => sort: <87.1 93.4 95.6 100.0>
- => rsort: <100.0 95.6 93.4 87.1>
+ -| Biology 101:
+ -| sum: <352.8>
+ -| average: <88.2>
+ -| sort: <78.5 87.0 92.4 94.9>
+ -| rsort: <94.9 92.4 87.0 78.5>
+ -|
+ -| Chemistry 305:
+ -| sum: <356.4>
+ -| average: <89.1>
+ -| sort: <75.2 88.2 94.7 98.3>
+ -| rsort: <98.3 94.7 88.2 75.2>
+ -|
+ -| English 401:
+ -| sum: <376.1>
+ -| average: <94.025>
+ -| sort: <87.1 93.4 95.6 100.0>
+ -| rsort: <100.0 95.6 93.4 87.1>
Remember that you must supply a leading `@' in front of an indirect
function call.
@@ -24493,7 +24516,7 @@ Index
(line 67)
* advanced features, data files as single record: Records. (line 172)
* advanced features, fixed-width data: Constant Size. (line 9)
-* advanced features, FNR/NR variables: Auto-set. (line 192)
+* advanced features, FNR/NR variables: Auto-set. (line 195)
* advanced features, gawk: Advanced Features. (line 6)
* advanced features, gawk, network programming: TCP/IP Networking.
(line 6)
@@ -24545,7 +24568,7 @@ Index
* arithmetic operators: Arithmetic Ops. (line 6)
* arrays: Arrays. (line 6)
* arrays, as parameters to functions: Function Caveats. (line 55)
-* arrays, associative: Array Intro. (line 51)
+* arrays, associative: Array Intro. (line 50)
* arrays, associative, clearing: Internals. (line 66)
* arrays, associative, library functions and: Library Names. (line 57)
* arrays, deleting entire contents: Delete. (line 39)
@@ -24557,16 +24580,16 @@ Index
(line 6)
* arrays, elements, retrieving number of: String Functions. (line 18)
* arrays, for statement and: Scanning an Array. (line 20)
-* arrays, IGNORECASE variable and: Array Intro. (line 93)
-* arrays, indexing: Array Intro. (line 51)
+* arrays, IGNORECASE variable and: Array Intro. (line 92)
+* arrays, indexing: Array Intro. (line 50)
* arrays, merging into strings: Join Function. (line 6)
* arrays, multidimensional: Multi-dimensional. (line 10)
* arrays, multidimensional, scanning: Multi-scanning. (line 11)
-* arrays, names of: Arrays. (line 17)
+* arrays, names of: Arrays. (line 18)
* arrays, scanning: Scanning an Array. (line 6)
* arrays, sorting: Array Sorting. (line 6)
-* arrays, sorting, IGNORECASE variable and: Array Sorting. (line 86)
-* arrays, sparse: Array Intro. (line 72)
+* arrays, sorting, IGNORECASE variable and: Array Sorting. (line 69)
+* arrays, sparse: Array Intro. (line 71)
* arrays, subscripts: Numeric Array Subscripts.
(line 6)
* arrays, subscripts, uninitialized variables as: Uninitialized Subscripts.
@@ -24577,7 +24600,7 @@ Index
* asort() function (gawk) <1>: String Functions. (line 18)
* asort() function (gawk): Array Sorting. (line 6)
* asort() function (gawk), arrays, sorting: Array Sorting. (line 6)
-* asorti() function (gawk): String Functions. (line 47)
+* asorti() function (gawk): String Functions. (line 46)
* assert function (C library): Assert Function. (line 6)
* assert user-defined function: Assert Function. (line 28)
* assertions: Assert Function. (line 6)
@@ -24587,7 +24610,7 @@ Index
* assignments as filenames: Ignoring Assigns. (line 6)
* assoc_clear internal function: Internals. (line 66)
* assoc_lookup internal function: Internals. (line 70)
-* associative arrays: Array Intro. (line 51)
+* associative arrays: Array Intro. (line 50)
* asterisk (*), * operator, as multiplication operator: Precedence.
(line 55)
* asterisk (*), * operator, as regexp operator: Regexp Operators.
@@ -24602,7 +24625,7 @@ Index
* asterisk (*), **= operator: Assignment Ops. (line 129)
* asterisk (*), *= operator <1>: Precedence. (line 95)
* asterisk (*), *= operator: Assignment Ops. (line 129)
-* atan2() function: Numeric Functions. (line 37)
+* atan2() function: Numeric Functions. (line 11)
* atari: Atari Installation. (line 9)
* awf (amazingly workable formatter) program: Glossary. (line 20)
* awk language, POSIX version: Assignment Ops. (line 136)
@@ -24727,7 +24750,7 @@ Index
* BEGIN pattern, getline and: Getline Notes. (line 19)
* BEGIN pattern, headings, adding: Print Examples. (line 43)
* BEGIN pattern, next/nextfile statements and <1>: Next Statement.
- (line 39)
+ (line 45)
* BEGIN pattern, next/nextfile statements and: I/O And BEGIN/END.
(line 36)
* BEGIN pattern, OFS/ORS variables, assigning values to: Output Separators.
@@ -24738,6 +24761,8 @@ Index
* BEGIN pattern, pwcat program: Passwd Functions. (line 128)
* BEGIN pattern, running awk programs and: Cut Program. (line 66)
* BEGIN pattern, TEXTDOMAIN variable and: Programmer i18n. (line 58)
+* BEGINFILE pattern, Boolean patterns and: Expression Patterns.
+ (line 73)
* BEGINFILE special pattern: BEGINFILE/ENDFILE. (line 6)
* beginfile user-defined function: Filetrans Function. (line 60)
* Bell Laboratories awk extensions: BTL. (line 6)
@@ -24805,8 +24830,8 @@ Index
* caret (^), ^= operator: Assignment Ops. (line 129)
* caret (^), in character lists: Character Lists. (line 16)
* case keyword: Switch Statement. (line 6)
-* case sensitivity, array indices and: Array Intro. (line 93)
-* case sensitivity, converting case: String Functions. (line 492)
+* case sensitivity, array indices and: Array Intro. (line 92)
+* case sensitivity, converting case: String Functions. (line 493)
* case sensitivity, example programs: Library Functions. (line 43)
* case sensitivity, gawk: Case-sensitivity. (line 26)
* case sensitivity, regexps and <1>: User-modified. (line 82)
@@ -24911,7 +24936,7 @@ Index
* constants, types of: Constants. (line 6)
* continue statement: Continue Statement. (line 6)
* control statements: Statements. (line 6)
-* converting, case: String Functions. (line 492)
+* converting, case: String Functions. (line 493)
* converting, dates to timestamps: Time Functions. (line 72)
* converting, during subscripting: Numeric Array Subscripts.
(line 31)
@@ -24927,7 +24952,7 @@ Index
* coprocesses, closing: Close Files And Pipes.
(line 6)
* coprocesses, getline from: Getline/Coprocess. (line 6)
-* cos() function: Numeric Functions. (line 34)
+* cos() function: Numeric Functions. (line 14)
* counting: Wc Program. (line 6)
* csh utility: Statements/Lines. (line 44)
* csh utility, POSIXLY_CORRECT environment variable: Options. (line 300)
@@ -24947,8 +24972,8 @@ Index
* dark corner, ^, in FS: Regexp Field Splitting.
(line 59)
* dark corner, array subscripts: Uninitialized Subscripts.
- (line 42)
-* dark corner, break statement: Break Statement. (line 47)
+ (line 43)
+* dark corner, break statement: Break Statement. (line 51)
* dark corner, close() function: Close Files And Pipes.
(line 131)
* dark corner, command-line arguments: Assignment Options. (line 43)
@@ -24962,13 +24987,13 @@ Index
(line 47)
* dark corner, FILENAME variable <1>: Auto-set. (line 92)
* dark corner, FILENAME variable: Getline Notes. (line 19)
-* dark corner, FNR/NR variables: Auto-set. (line 192)
+* dark corner, FNR/NR variables: Auto-set. (line 195)
* dark corner, format-control characters: Control Letters. (line 18)
* dark corner, FS as null string: Single Character Fields.
(line 20)
* dark corner, input files: Records. (line 98)
* dark corner, invoking awk: Command Line. (line 16)
-* dark corner, length() function: String Functions. (line 87)
+* dark corner, length() function: String Functions. (line 84)
* dark corner, multiline records: Multiple Line. (line 35)
* dark corner, NF variable, decrementing: Changing Fields. (line 107)
* dark corner, OFMT variable: OFMT. (line 27)
@@ -24978,8 +25003,9 @@ Index
(line 148)
* dark corner, regexp constants, as arguments to user-defined functions: Using Constant Regexps.
(line 43)
-* dark corner, split() function: String Functions. (line 259)
+* dark corner, split() function: String Functions. (line 260)
* dark corner, strings, storing: Records. (line 188)
+* dark corner, value of ARGV[0]: Auto-set. (line 35)
* data, fixed-width: Constant Size. (line 9)
* data-driven languages: Basic High Level. (line 85)
* database, group, reading: Group Functions. (line 6)
@@ -25109,9 +25135,9 @@ Index
* deleting elements in arrays: Delete. (line 6)
* deleting entire arrays: Delete. (line 39)
* dgawk: Debugger. (line 6)
-* differences between gawk and awk: String Functions. (line 101)
+* differences between gawk and awk: String Functions. (line 98)
* differences in awk and gawk, ARGC/ARGV variables: ARGC and ARGV.
- (line 86)
+ (line 88)
* differences in awk and gawk, ARGIND variable: Auto-set. (line 40)
* differences in awk and gawk, array elements, deleting: Delete.
(line 39)
@@ -25149,7 +25175,7 @@ Index
(line 34)
* differences in awk and gawk, LINT variable: User-modified. (line 98)
* differences in awk and gawk, match() function: String Functions.
- (line 165)
+ (line 161)
* differences in awk and gawk, next/nextfile statements: Nextfile Statement.
(line 6)
* differences in awk and gawk, print/printf statements: Format Modifiers.
@@ -25161,15 +25187,15 @@ Index
* differences in awk and gawk, regular expressions: Case-sensitivity.
(line 26)
* differences in awk and gawk, RS/RT variables: Records. (line 164)
-* differences in awk and gawk, RT variable: Auto-set. (line 181)
+* differences in awk and gawk, RT variable: Auto-set. (line 184)
* differences in awk and gawk, single-character fields: Single Character Fields.
(line 6)
* differences in awk and gawk, split() function: String Functions.
- (line 248)
+ (line 249)
* differences in awk and gawk, strings: Scalar Constants. (line 20)
* differences in awk and gawk, strings, storing: Records. (line 184)
* differences in awk and gawk, strtonum() function (gawk): String Functions.
- (line 286)
+ (line 287)
* differences in awk and gawk, TEXTDOMAIN variable: User-modified.
(line 153)
* differences in awk and gawk, trunc-mod operation: Arithmetic Ops.
@@ -25230,12 +25256,13 @@ Index
* END pattern, Boolean patterns and: Expression Patterns. (line 73)
* END pattern, exit statement and: Exit Statement. (line 12)
* END pattern, next/nextfile statements and <1>: Next Statement.
- (line 39)
+ (line 45)
* END pattern, next/nextfile statements and: I/O And BEGIN/END.
(line 36)
* END pattern, operators and: Using BEGIN/END. (line 17)
* END pattern, pgawk program: Profiling. (line 69)
* END pattern, print statement and: I/O And BEGIN/END. (line 16)
+* ENDFILE pattern, Boolean patterns and: Expression Patterns. (line 73)
* ENDFILE special pattern: BEGINFILE/ENDFILE. (line 6)
* endfile user-defined function: Filetrans Function. (line 60)
* endgrent function (C library): Group Functions. (line 215)
@@ -25284,7 +25311,7 @@ Index
* exclamation point (!), !~ operator: Regexp Usage. (line 19)
* exit statement: Exit Statement. (line 6)
* exit status, of gawk: Exit Status. (line 6)
-* exp() function: Numeric Functions. (line 22)
+* exp() function: Numeric Functions. (line 17)
* expand utility: Very Simple. (line 69)
* expressions: Expressions. (line 6)
* expressions, as patterns: Expression Patterns. (line 6)
@@ -25421,7 +25448,7 @@ Index
* floating-point, numbers, AWKNUM internal type: Internals. (line 19)
* FNR variable <1>: Auto-set. (line 102)
* FNR variable: Records. (line 6)
-* FNR variable, changing: Auto-set. (line 192)
+* FNR variable, changing: Auto-set. (line 195)
* for statement: For Statement. (line 6)
* for statement, in arrays: Scanning an Array. (line 20)
* force_number internal function: Internals. (line 27)
@@ -25498,7 +25525,7 @@ Index
* functions, library, user database, reading: Passwd Functions.
(line 6)
* functions, names of <1>: Definition Syntax. (line 21)
-* functions, names of: Arrays. (line 17)
+* functions, names of: Arrays. (line 18)
* functions, recursive: Definition Syntax. (line 73)
* functions, return values, setting: Internals. (line 136)
* functions, string-translation: I18N Functions. (line 6)
@@ -25508,15 +25535,15 @@ Index
* functions, user-defined, counts: Profiling. (line 135)
* functions, user-defined, library of: Library Functions. (line 6)
* functions, user-defined, next/nextfile statements and <1>: Nextfile Statement.
- (line 39)
+ (line 43)
* functions, user-defined, next/nextfile statements and: Next Statement.
- (line 39)
+ (line 45)
* G-d: Acknowledgments. (line 79)
* Garfinkle, Scott: Contributors. (line 37)
* gawk, awk and <1>: This Manual. (line 14)
* gawk, awk and: Preface. (line 22)
* gawk, bitwise operations in: Bitwise Functions. (line 39)
-* gawk, break statement in: Break Statement. (line 47)
+* gawk, break statement in: Break Statement. (line 51)
* gawk, built-in variables and: Built-in Variables. (line 14)
* gawk, character classes and: Character Lists. (line 91)
* gawk, coding style in: Adding Code. (line 32)
@@ -25565,9 +25592,7 @@ Index
* gawk, list of contributors to: Contributors. (line 6)
* gawk, MS-DOS version of: PC Using. (line 11)
* gawk, newlines in: Statements/Lines. (line 12)
-* gawk, next file statement in: Nextfile Statement. (line 46)
-* gawk, nextfile statement in <1>: Nextfile Function. (line 6)
-* gawk, nextfile statement in: Nextfile Statement. (line 46)
+* gawk, nextfile statement in: Nextfile Function. (line 6)
* gawk, octal numbers and: Nondecimal-numbers. (line 42)
* gawk, OS/2 version of: PC Using. (line 11)
* gawk, regexp constants and: Using Constant Regexps.
@@ -25588,7 +25613,7 @@ Index
(line 63)
* General Public License (GPL): Glossary. (line 295)
* General Public License, See GPL: Manual History. (line 11)
-* gensub() function (gawk) <1>: String Functions. (line 400)
+* gensub() function (gawk) <1>: String Functions. (line 401)
* gensub() function (gawk): Using Constant Regexps.
(line 43)
* gensub() function (gawk), escape processing: Gory Details. (line 6)
@@ -25656,10 +25681,10 @@ Index
* group database, reading: Group Functions. (line 6)
* group file: Group Functions. (line 6)
* groups, information about: Group Functions. (line 6)
-* gsub() function <1>: String Functions. (line 384)
+* gsub() function <1>: String Functions. (line 385)
* gsub() function: Using Constant Regexps.
(line 43)
-* gsub() function, arguments of: String Functions. (line 364)
+* gsub() function, arguments of: String Functions. (line 365)
* gsub() function, escape processing: Gory Details. (line 6)
* h debugger command (alias for help): Miscellaneous Dgawk Commands.
(line 71)
@@ -25693,8 +25718,8 @@ Index
* ignore debugger command: Breakpoint Control. (line 80)
* IGNORECASE variable <1>: User-modified. (line 82)
* IGNORECASE variable: Case-sensitivity. (line 26)
-* IGNORECASE variable, array sorting and: Array Sorting. (line 86)
-* IGNORECASE variable, array subscripts and: Array Intro. (line 93)
+* IGNORECASE variable, array sorting and: Array Sorting. (line 69)
+* IGNORECASE variable, array subscripts and: Array Intro. (line 92)
* IGNORECASE variable, in example programs: Library Functions.
(line 43)
* implementation issues, gawk: Notes. (line 6)
@@ -25702,16 +25727,16 @@ Index
* implementation issues, gawk, limits <1>: Redirection. (line 135)
* implementation issues, gawk, limits: Getline Notes. (line 14)
* in operator <1>: Id Program. (line 93)
-* in operator <2>: For Statement. (line 74)
+* in operator <2>: For Statement. (line 75)
* in operator <3>: Precedence. (line 83)
* in operator: Comparison Operators.
(line 11)
* in operator, arrays and <1>: Scanning an Array. (line 17)
* in operator, arrays and: Reference to Elements.
- (line 25)
+ (line 37)
* increment operators: Increment Ops. (line 6)
-* index() function: String Functions. (line 60)
-* indexing arrays: Array Intro. (line 51)
+* index() function: String Functions. (line 57)
+* indexing arrays: Array Intro. (line 50)
* indirect function calls: Indirect Calls. (line 6)
* info debugger command: Dgawk Info. (line 12)
* initialization, automatic: More Complex. (line 38)
@@ -25743,7 +25768,7 @@ Index
* installation, vms: VMS Installation. (line 6)
* installing gawk: Installation. (line 6)
* INT signal (MS-DOS): Profiling. (line 210)
-* int() function: Numeric Functions. (line 11)
+* int() function: Numeric Functions. (line 22)
* integers: Basic Data Typing. (line 21)
* integers, unsigned: Basic Data Typing. (line 28)
* interacting with other programs: I/O Functions. (line 64)
@@ -25817,7 +25842,7 @@ Index
(line 11)
* left shift, bitwise: Bitwise Functions. (line 32)
* leftmost longest match: Multiple Line. (line 26)
-* length() function: String Functions. (line 71)
+* length() function: String Functions. (line 68)
* Lesser General Public License (LGPL): Glossary. (line 373)
* LGPL (Lesser General Public License): Glossary. (line 373)
* libraries of awk functions: Library Functions. (line 6)
@@ -25857,7 +25882,7 @@ Index
* lint checking: User-modified. (line 98)
* lint checking, array elements: Delete. (line 34)
* lint checking, array subscripts: Uninitialized Subscripts.
- (line 42)
+ (line 43)
* lint checking, empty programs: Command Line. (line 16)
* lint checking, issuing warnings: Options. (line 141)
* lint checking, POSIXLY_CORRECT environment variable: Options.
@@ -25877,13 +25902,13 @@ Index
* localization, See internationalization, localization: I18N and L10N.
(line 6)
* log files, timestamps in: Time Functions. (line 6)
-* log() function: Numeric Functions. (line 27)
+* log() function: 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, continue statements and: For Statement. (line 63)
+* loops, continue statements and: For Statement. (line 64)
* loops, count for header: Profiling. (line 129)
* loops, exiting: Break Statement. (line 6)
* loops, See Also while statement: While Statement. (line 6)
@@ -25901,9 +25926,9 @@ Index
(line 6)
* marked strings, extracting: String Extraction. (line 6)
* Marx, Groucho: Increment Ops. (line 61)
-* match() function: String Functions. (line 111)
+* match() function: String Functions. (line 108)
* match() function, RSTART/RLENGTH variables: String Functions.
- (line 129)
+ (line 125)
* matching, expressions, See comparison expressions: Typing and Comparison.
(line 9)
* matching, leftmost longest: Multiple Line. (line 26)
@@ -25926,11 +25951,11 @@ Index
* n debugger command (alias for next): Dgawk Execution Control.
(line 43)
* names, arrays/variables <1>: Library Names. (line 6)
-* names, arrays/variables: Arrays. (line 17)
+* names, arrays/variables: Arrays. (line 18)
* names, functions <1>: Library Names. (line 6)
* names, functions: Definition Syntax. (line 21)
* namespace issues <1>: Library Names. (line 6)
-* namespace issues: Arrays. (line 17)
+* namespace issues: Arrays. (line 18)
* namespace issues, functions: Definition Syntax. (line 21)
* nargs internal variable: Internals. (line 46)
* nawk utility: Names. (line 17)
@@ -25953,18 +25978,16 @@ Index
* next debugger command: Dgawk Execution Control.
(line 43)
* next file statement: POSIX/GNU. (line 155)
-* next file statement, in gawk: Nextfile Statement. (line 46)
* next statement <1>: Next Statement. (line 6)
* next statement: Boolean Ops. (line 85)
* next statement, BEGIN/END patterns and: I/O And BEGIN/END. (line 36)
-* next statement, user-defined functions and: Next Statement. (line 39)
+* next statement, user-defined functions and: Next Statement. (line 45)
* nextfile statement: Nextfile Statement. (line 6)
* nextfile statement, BEGIN/END patterns and: I/O And BEGIN/END.
(line 36)
* nextfile statement, implementing: Nextfile Function. (line 6)
-* nextfile statement, in gawk: Nextfile Statement. (line 46)
* nextfile statement, user-defined functions and: Nextfile Statement.
- (line 39)
+ (line 43)
* nextfile user-defined function: Nextfile Function. (line 38)
* nexti debugger command: Dgawk Execution Control.
(line 49)
@@ -25979,7 +26002,7 @@ Index
* not Boolean-logic operator: Boolean Ops. (line 6)
* NR variable <1>: Auto-set. (line 118)
* NR variable: Records. (line 6)
-* NR variable, changing: Auto-set. (line 192)
+* NR variable, changing: Auto-set. (line 195)
* null strings <1>: Basic Data Typing. (line 47)
* null strings <2>: Truth Values. (line 6)
* null strings <3>: Regexp Field Splitting.
@@ -25987,7 +26010,7 @@ Index
* null strings: Records. (line 102)
* null strings, array elements and: Delete. (line 27)
* null strings, as array subscripts: Uninitialized Subscripts.
- (line 42)
+ (line 43)
* null strings, converting numbers to strings: Conversion. (line 21)
* null strings, matching: Gory Details. (line 159)
* null strings, quoting and: Quoting. (line 62)
@@ -26010,7 +26033,7 @@ Index
* numbers, hexadecimal: Nondecimal-numbers. (line 6)
* numbers, NODE internal type: Internals. (line 23)
* numbers, octal: Nondecimal-numbers. (line 6)
-* numbers, random: Numeric Functions. (line 70)
+* numbers, random: Numeric Functions. (line 63)
* numbers, rounding: Round Function. (line 6)
* numeric, constants: Scalar Constants. (line 6)
* numeric, output format: OFMT. (line 6)
@@ -26102,7 +26125,7 @@ Index
* parentheses (): Regexp Operators. (line 78)
* parentheses (), pgawk program: Profiling. (line 144)
* password file: Passwd Functions. (line 16)
-* patsplit() function: String Functions. (line 200)
+* patsplit() function: String Functions. (line 195)
* patterns: Patterns and Actions.
(line 6)
* patterns, comparison expressions as: Expression Patterns. (line 14)
@@ -26112,7 +26135,7 @@ Index
* patterns, expressions as: Regexp Patterns. (line 6)
* patterns, ranges in: Ranges. (line 6)
* patterns, regexp constants as: Expression Patterns. (line 36)
-* patterns, types of: Pattern Overview. (line 14)
+* patterns, types of: Pattern Overview. (line 15)
* pawk profiling Bell Labs awk: Other Versions. (line 93)
* PC operating systems, gawk on: PC Using. (line 6)
* PC operating systems, gawk on, installing: PC Installation. (line 6)
@@ -26159,7 +26182,7 @@ Index
* portability, gawk: New Ports. (line 6)
* portability, gettext library and: Explaining gettext. (line 10)
* portability, internationalization and: I18N Portability. (line 6)
-* portability, length() function: String Functions. (line 80)
+* portability, length() function: String Functions. (line 77)
* portability, new awk vs. old awk: Conversion. (line 54)
* portability, next statement in user-defined functions: Function Caveats.
(line 99)
@@ -26167,7 +26190,7 @@ Index
* portability, operators: Increment Ops. (line 61)
* portability, operators, not in POSIX awk: Precedence. (line 98)
* portability, POSIXLY_CORRECT environment variable: Options. (line 305)
-* portability, substr() function: String Functions. (line 482)
+* portability, substr() function: String Functions. (line 483)
* portable object files <1>: Translator i18n. (line 6)
* portable object files: Explaining gettext. (line 36)
* portable object files, converting to message object files: I18N Example.
@@ -26188,7 +26211,7 @@ Index
* POSIX awk, backslashes in string constants: Escape Sequences.
(line 113)
* POSIX awk, BEGIN/END patterns: I/O And BEGIN/END. (line 16)
-* POSIX awk, break statement and: Break Statement. (line 47)
+* POSIX awk, break statement and: Break Statement. (line 51)
* POSIX awk, changes in awk versions: POSIX. (line 6)
* POSIX awk, character lists and: Character Lists. (line 23)
* POSIX awk, character lists and, character classes: Character Lists.
@@ -26202,10 +26225,10 @@ Index
* POSIX awk, FS variable and: User-modified. (line 66)
* POSIX awk, function keyword in: Definition Syntax. (line 78)
* POSIX awk, functions and, gsub()/sub(): Gory Details. (line 53)
-* POSIX awk, functions and, length(): String Functions. (line 80)
+* POSIX awk, functions and, length(): String Functions. (line 77)
* POSIX awk, GNU long options and: Options. (line 15)
* POSIX awk, interval expressions in: Regexp Operators. (line 134)
-* POSIX awk, next/nextfile statements and: Next Statement. (line 39)
+* POSIX awk, next/nextfile statements and: Next Statement. (line 45)
* POSIX awk, numeric strings and: Variable Typing. (line 6)
* POSIX awk, OFMT variable and <1>: Conversion. (line 54)
* POSIX awk, OFMT variable and: OFMT. (line 27)
@@ -26308,12 +26331,12 @@ Index
* r debugger command (alias for run): Dgawk Execution Control.
(line 62)
* Rakitzis, Byron: History Sorting. (line 25)
-* rand() function: Numeric Functions. (line 40)
+* rand() function: Numeric Functions. (line 33)
* random numbers, Cliff: Cliff Random Function.
(line 6)
* random numbers, rand()/srand() functions: Numeric Functions.
- (line 40)
-* random numbers, seed of: Numeric Functions. (line 70)
+ (line 33)
+* random numbers, seed of: Numeric Functions. (line 63)
* range expressions: Character Lists. (line 6)
* range patterns: Ranges. (line 6)
* Rankin, Pat <1>: Bugs. (line 71)
@@ -26339,7 +26362,7 @@ Index
* recursive functions: Definition Syntax. (line 73)
* redirection of input: Getline/File. (line 6)
* redirection of output: Redirection. (line 6)
-* reference counting, sorting arrays: Array Sorting. (line 79)
+* reference counting, sorting arrays: Array Sorting. (line 62)
* regexp constants <1>: Comparison Operators.
(line 103)
* regexp constants <2>: Regexp Constants. (line 6)
@@ -26405,8 +26428,8 @@ Index
* right angle bracket (>), >> operator (I/O): Redirection. (line 50)
* right shift, bitwise: Bitwise Functions. (line 32)
* Ritchie, Dennis: Basic Data Typing. (line 71)
-* RLENGTH variable: Auto-set. (line 168)
-* RLENGTH variable, match() function and: String Functions. (line 129)
+* RLENGTH variable: Auto-set. (line 171)
+* RLENGTH variable, match() function and: String Functions. (line 125)
* Robbins, Arnold <1>: Future Extensions. (line 6)
* Robbins, Arnold <2>: Bugs. (line 29)
* Robbins, Arnold <3>: Contributors. (line 95)
@@ -26431,9 +26454,9 @@ Index
* RS variable: Records. (line 20)
* RS variable, multiline records and: Multiple Line. (line 17)
* rshift() function (gawk): Bitwise Functions. (line 46)
-* RSTART variable: Auto-set. (line 174)
-* RSTART variable, match() function and: String Functions. (line 129)
-* RT variable <1>: Auto-set. (line 181)
+* RSTART variable: Auto-set. (line 177)
+* RSTART variable, match() function and: String Functions. (line 125)
+* RT variable <1>: Auto-set. (line 184)
* RT variable <2>: Multiple Line. (line 129)
* RT variable: Records. (line 112)
* Rubin, Paul <1>: Contributors. (line 16)
@@ -26454,7 +26477,7 @@ Index
* search paths, for source files <1>: VMS Running. (line 28)
* search paths, for source files <2>: Igawk Program. (line 358)
* search paths, for source files: AWKPATH Variable. (line 6)
-* searching: String Functions. (line 60)
+* searching: String Functions. (line 57)
* searching, files for regular expressions: Egrep Program. (line 6)
* searching, for words: Dupword Program. (line 6)
* sed utility <1>: Glossary. (line 12)
@@ -26492,7 +26515,7 @@ Index
* side effects <1>: Increment Ops. (line 11)
* side effects: Concatenation. (line 42)
* side effects, array indexing: Reference to Elements.
- (line 30)
+ (line 42)
* side effects, asort() function: Array Sorting. (line 25)
* side effects, assignment expressions: Assignment Ops. (line 23)
* side effects, Boolean operators: Boolean Ops. (line 30)
@@ -26507,7 +26530,7 @@ Index
* signals, USR1/SIGUSR1: Profiling. (line 185)
* silent debugger command: Dgawk Execution Control.
(line 10)
-* sin() function: Numeric Functions. (line 31)
+* sin() function: Numeric Functions. (line 73)
* single quote (') <1>: Quoting. (line 31)
* single quote (') <2>: Long. (line 33)
* single quote ('): One-shot. (line 15)
@@ -26531,18 +26554,18 @@ Index
* source code, mawk: Other Versions. (line 34)
* source code, mixing: Options. (line 102)
* source files, search path for: Igawk Program. (line 358)
-* sparse arrays: Array Intro. (line 72)
+* sparse arrays: Array Intro. (line 71)
* Spencer, Henry: Glossary. (line 12)
* split utility: Split Program. (line 6)
-* split() function: String Functions. (line 215)
+* split() function: String Functions. (line 216)
* split() function, array elements, deleting: Delete. (line 56)
* split.awk program: Split Program. (line 30)
-* sprintf() function <1>: String Functions. (line 278)
+* sprintf() function <1>: String Functions. (line 279)
* sprintf() function: OFMT. (line 15)
* sprintf() function, OFMT variable and: User-modified. (line 124)
* sprintf() function, print/printf statements and: Round Function.
(line 6)
-* sqrt() function: Numeric Functions. (line 18)
+* sqrt() function: Numeric Functions. (line 76)
* square brackets ([]): Regexp Operators. (line 55)
* srand() function: Numeric Functions. (line 80)
* Stallman, Richard <1>: Glossary. (line 286)
@@ -26585,14 +26608,14 @@ Index
* strings, null: Regexp Field Splitting.
(line 43)
* strings, numeric: Variable Typing. (line 6)
-* strings, splitting: String Functions. (line 234)
-* strtonum() function (gawk): String Functions. (line 286)
+* strings, splitting: String Functions. (line 235)
+* strtonum() function (gawk): String Functions. (line 287)
* strtonum() function (gawk), --non-decimal-data option and: Nondecimal Data.
(line 36)
-* sub() function <1>: String Functions. (line 307)
+* sub() function <1>: String Functions. (line 308)
* sub() function: Using Constant Regexps.
(line 43)
-* sub() function, arguments of: String Functions. (line 364)
+* sub() function, arguments of: String Functions. (line 365)
* sub() function, escape processing: Gory Details. (line 6)
* subscript separators: User-modified. (line 147)
* subscripts in arrays, multidimensional: Multi-dimensional. (line 10)
@@ -26605,7 +26628,7 @@ Index
* SUBSEP variable: User-modified. (line 147)
* SUBSEP variable, multidimensional arrays: Multi-dimensional.
(line 16)
-* substr() function: String Functions. (line 451)
+* substr() function: String Functions. (line 452)
* Sumner, Andrew: Other Versions. (line 81)
* switch statement: Switch Statement. (line 6)
* syntactic ambiguity: /= operator vs. /=.../ regexp constant: Assignment Ops.
@@ -26657,8 +26680,8 @@ Index
* timestamps, converting dates to: Time Functions. (line 72)
* timestamps, formatted: Gettimeofday Function.
(line 6)
-* tolower() function: String Functions. (line 493)
-* toupper() function: String Functions. (line 499)
+* tolower() function: String Functions. (line 494)
+* toupper() function: String Functions. (line 500)
* tr utility: Translate Program. (line 6)
* trace debugger command: Miscellaneous Dgawk Commands.
(line 113)
@@ -26683,8 +26706,8 @@ Index
* troubleshooting, gawk, fatal errors, function arguments: Calling Built-in.
(line 16)
* troubleshooting, getline function: File Checking. (line 24)
-* troubleshooting, gsub()/sub() functions: String Functions. (line 374)
-* troubleshooting, match() function: String Functions. (line 195)
+* troubleshooting, gsub()/sub() functions: String Functions. (line 375)
+* troubleshooting, match() function: String Functions. (line 190)
* troubleshooting, print statement, omitting commas: Print Examples.
(line 31)
* troubleshooting, printing: Redirection. (line 118)
@@ -26693,7 +26716,7 @@ Index
* troubleshooting, regexp constants vs. string constants: Computed Regexps.
(line 38)
* troubleshooting, string concatenation: Concatenation. (line 27)
-* troubleshooting, substr() function: String Functions. (line 469)
+* troubleshooting, substr() function: String Functions. (line 470)
* troubleshooting, system() function: I/O Functions. (line 88)
* troubleshooting, typographical errors, global variables: Options.
(line 92)
@@ -26766,7 +26789,7 @@ Index
* variables, global, for library functions: Library Names. (line 11)
* variables, global, printing list of: Options. (line 88)
* variables, initializing: Using Variables. (line 20)
-* variables, names of: Arrays. (line 17)
+* variables, names of: Arrays. (line 18)
* variables, private: Library Names. (line 11)
* variables, setting: Options. (line 30)
* variables, shadowing: Definition Syntax. (line 61)
@@ -26908,349 +26931,351 @@ Node: Leftmost Longest123883
Node: Computed Regexps125084
Node: Locales128501
Node: Reading Files131591
-Node: Records133607
-Ref: Records-Footnote-1142173
-Node: Fields142210
-Ref: Fields-Footnote-1145242
-Node: Nonconstant Fields145328
-Node: Changing Fields147530
-Node: Field Separators152815
-Node: Default Field Splitting155444
-Node: Regexp Field Splitting156561
-Node: Single Character Fields159911
-Node: Command Line Field Separator160962
-Node: Field Splitting Summary164401
-Ref: Field Splitting Summary-Footnote-1167587
-Node: Constant Size167688
-Node: Splitting By Content172159
-Ref: Splitting By Content-Footnote-1175761
-Node: Multiple Line175801
-Ref: Multiple Line-Footnote-1181541
-Node: Getline181720
-Node: Plain Getline183941
-Node: Getline/Variable186030
-Node: Getline/File187171
-Node: Getline/Variable/File188493
-Ref: Getline/Variable/File-Footnote-1190092
-Node: Getline/Pipe190179
-Node: Getline/Variable/Pipe192727
-Node: Getline/Coprocess193834
-Node: Getline/Variable/Coprocess195077
-Node: Getline Notes195791
-Node: Getline Summary197733
-Ref: table-getline-variants198017
-Node: BEGINFILE/ENDFILE198922
-Node: Command line directories201777
-Node: Printing202412
-Node: Print204043
-Node: Print Examples205380
-Node: Output Separators208164
-Node: OFMT209923
-Node: Printf211281
-Node: Basic Printf212187
-Node: Control Letters213724
-Node: Format Modifiers217536
-Node: Printf Examples223547
-Node: Redirection226262
-Node: Special Files233240
-Node: Special FD233773
-Ref: Special FD-Footnote-1237348
-Node: Special Network237422
-Node: Special Caveats238277
-Node: Close Files And Pipes239071
-Ref: Close Files And Pipes-Footnote-1246015
-Ref: Close Files And Pipes-Footnote-2246163
-Node: Expressions246313
-Node: Values247382
-Node: Constants248058
-Node: Scalar Constants248738
-Ref: Scalar Constants-Footnote-1249597
-Node: Nondecimal-numbers249779
-Node: Regexp Constants252838
-Node: Using Constant Regexps253313
-Node: Variables256318
-Node: Using Variables256973
-Node: Assignment Options258700
-Node: Conversion260581
-Ref: table-locale-affects265955
-Ref: Conversion-Footnote-1266579
-Node: All Operators266688
-Node: Arithmetic Ops267318
-Node: Concatenation269817
-Ref: Concatenation-Footnote-1272610
-Node: Assignment Ops272729
-Ref: table-assign-ops277717
-Node: Increment Ops279118
-Node: Truth Values and Conditions282596
-Node: Truth Values283679
-Node: Typing and Comparison284727
-Node: Variable Typing285516
-Ref: Variable Typing-Footnote-1289413
-Node: Comparison Operators289535
-Ref: table-relational-ops289945
-Node: POSIX String Comparison293494
-Ref: POSIX String Comparison-Footnote-1294451
-Node: Boolean Ops294589
-Ref: Boolean Ops-Footnote-1298667
-Node: Conditional Exp298758
-Node: Function Calls300490
-Node: Precedence304049
-Node: Patterns and Actions307702
-Node: Pattern Overview308756
-Node: Regexp Patterns310193
-Node: Expression Patterns310736
-Node: Ranges314286
-Node: BEGIN/END317375
-Node: Using BEGIN/END318125
-Ref: Using BEGIN/END-Footnote-1320856
-Node: I/O And BEGIN/END320970
-Node: Empty323237
-Node: Using Shell Variables323545
-Node: Action Overview325826
-Node: Statements328184
-Node: If Statement330040
-Node: While Statement331539
-Node: Do Statement333571
-Node: For Statement334720
-Node: Switch Statement337860
-Node: Break Statement339908
-Node: Continue Statement341728
-Node: Next Statement343426
-Node: Nextfile Statement345706
-Node: Exit Statement348424
-Node: Built-in Variables350695
-Node: User-modified351790
-Ref: User-modified-Footnote-1359756
-Node: Auto-set359818
-Ref: Auto-set-Footnote-1368480
-Node: ARGC and ARGV368685
-Node: Arrays372446
-Node: Array Basics373955
-Node: Array Intro374666
-Node: Reference to Elements379053
-Node: Assigning Elements380952
-Node: Array Example381443
-Node: Scanning an Array383175
-Node: Delete385452
-Ref: Delete-Footnote-1387842
-Node: Numeric Array Subscripts387899
-Node: Uninitialized Subscripts390086
-Node: Multi-dimensional391692
-Node: Multi-scanning394783
-Node: Array Sorting396367
-Node: Arrays of Arrays400197
-Node: Functions404305
-Node: Built-in405114
-Node: Calling Built-in406128
-Node: Numeric Functions408104
-Ref: Numeric Functions-Footnote-1411858
-Ref: Numeric Functions-Footnote-2412192
-Node: String Functions412461
-Ref: String Functions-Footnote-1434295
-Ref: String Functions-Footnote-2434424
-Ref: String Functions-Footnote-3434672
-Node: Gory Details434759
-Ref: table-sub-escapes436416
-Ref: table-sub-posix-92437762
-Ref: table-sub-proposed439105
-Ref: table-posix-2001-sub440465
-Ref: table-gensub-escapes441740
-Ref: Gory Details-Footnote-1442943
-Node: I/O Functions442994
-Ref: I/O Functions-Footnote-1449782
-Node: Time Functions449873
-Ref: Time Functions-Footnote-1460685
-Ref: Time Functions-Footnote-2460753
-Ref: Time Functions-Footnote-3460911
-Ref: Time Functions-Footnote-4461022
-Ref: Time Functions-Footnote-5461149
-Ref: Time Functions-Footnote-6461376
-Node: Bitwise Functions461642
-Ref: table-bitwise-ops462220
-Ref: Bitwise Functions-Footnote-1466460
-Node: I18N Functions466644
-Node: User-defined468367
-Node: Definition Syntax469171
-Node: Function Example473869
-Node: Function Caveats476451
-Node: Return Statement480376
-Node: Dynamic Typing483033
-Node: Indirect Calls483770
-Node: Internationalization493405
-Node: I18N and L10N494824
-Node: Explaining gettext495508
-Ref: Explaining gettext-Footnote-1500419
-Ref: Explaining gettext-Footnote-2500658
-Node: Programmer i18n500827
-Node: Translator i18n505062
-Node: String Extraction505853
-Ref: String Extraction-Footnote-1506810
-Node: Printf Ordering506936
-Ref: Printf Ordering-Footnote-1509716
-Node: I18N Portability509780
-Ref: I18N Portability-Footnote-1512225
-Node: I18N Example512288
-Ref: I18N Example-Footnote-1514908
-Node: Gawk I18N514980
-Node: Advanced Features515558
-Node: Nondecimal Data516873
-Node: Two-way I/O518434
-Ref: Two-way I/O-Footnote-1523917
-Node: TCP/IP Networking523994
-Node: Profiling526784
-Node: Invoking Gawk534245
-Node: Command Line535552
-Node: Options536337
-Ref: Options-Footnote-1549425
-Node: Other Arguments549450
-Node: AWKPATH Variable552131
-Ref: AWKPATH Variable-Footnote-1554906
-Node: Exit Status555166
-Node: Include Files555838
-Node: Obsolete559439
-Node: Undocumented560240
-Node: Known Bugs560502
-Node: Library Functions561104
-Ref: Library Functions-Footnote-1564085
-Node: Library Names564256
-Ref: Library Names-Footnote-1567729
-Ref: Library Names-Footnote-2567948
-Node: General Functions568034
-Node: Nextfile Function569097
-Node: Strtonum Function573461
-Node: Assert Function576402
-Node: Round Function579706
-Node: Cliff Random Function581246
-Node: Ordinal Functions582261
-Ref: Ordinal Functions-Footnote-1585321
-Node: Join Function585537
-Ref: Join Function-Footnote-1587299
-Node: Gettimeofday Function587499
-Node: Data File Management591210
-Node: Filetrans Function591842
-Node: Rewind Function595268
-Node: File Checking596714
-Node: Empty Files597744
-Node: Ignoring Assigns599969
-Node: Getopt Function601517
-Ref: Getopt Function-Footnote-1612799
-Node: Passwd Functions613002
-Ref: Passwd Functions-Footnote-1621980
-Node: Group Functions622068
-Node: Sample Programs630165
-Node: Running Examples630834
-Node: Clones631562
-Node: Cut Program632694
-Node: Egrep Program642453
-Ref: Egrep Program-Footnote-1650203
-Node: Id Program650313
-Node: Split Program653920
-Node: Tee Program657388
-Node: Uniq Program660131
-Node: Wc Program667498
-Ref: Wc Program-Footnote-1671742
-Node: Miscellaneous Programs671938
-Node: Dupword Program673058
-Node: Alarm Program675089
-Node: Translate Program679631
-Ref: Translate Program-Footnote-1684010
-Ref: Translate Program-Footnote-2684247
-Node: Labels Program684381
-Ref: Labels Program-Footnote-1687672
-Node: Word Sorting687756
-Node: History Sorting692103
-Node: Extract Program693941
-Node: Simple Sed701299
-Node: Igawk Program704356
-Ref: Igawk Program-Footnote-1719087
-Ref: Igawk Program-Footnote-2719288
-Node: Signature Program719426
-Node: Debugger720506
-Node: Debugging721382
-Node: Debugging Concepts721696
-Node: Debugging Terms723549
-Node: Awk Debugging726097
-Node: Sample dgawk session726989
-Node: dgawk invocation727481
-Node: Finding The Bug728665
-Node: List of Debugger Commands735180
-Node: Breakpoint Control736495
-Node: Dgawk Execution Control739705
-Node: Viewing And Changing Data743054
-Node: Dgawk Stack746350
-Node: Dgawk Info747811
-Node: Miscellaneous Dgawk Commands751749
-Node: Readline Support757465
-Node: Dgawk Limitations758281
-Node: Language History760453
-Node: V7/SVR3.1761830
-Node: SVR4764125
-Node: POSIX765570
-Node: BTL767282
-Node: POSIX/GNU768972
-Node: Contributors778636
-Node: Installation782241
-Node: Gawk Distribution783212
-Node: Getting783696
-Node: Extracting784522
-Node: Distribution contents785910
-Node: Unix Installation790983
-Node: Quick Installation791574
-Node: Additional Configuration Options793276
-Node: Configuration Philosophy795039
-Node: Non-Unix Installation797403
-Node: PC Installation797868
-Node: PC Binary Installation799174
-Node: PC Compiling801017
-Node: PC Dynamic805522
-Node: PC Using807885
-Node: Cygwin812433
-Node: MSYS813417
-Node: VMS Installation813923
-Node: VMS Compilation814527
-Node: VMS Installation Details816104
-Node: VMS Running817734
-Node: VMS POSIX819331
-Node: VMS Old Gawk820629
-Node: Unsupported821098
-Node: Atari Installation821560
-Node: Atari Compiling822847
-Node: Atari Using824736
-Node: BeOS Installation827583
-Node: Tandem Installation828728
-Node: Bugs830407
-Node: Other Versions834239
-Node: Notes839461
-Node: Compatibility Mode840153
-Node: Additions840936
-Node: Adding Code841686
-Node: New Ports847738
-Node: Dynamic Extensions851870
-Node: Internals853251
-Node: Plugin License863656
-Node: Sample Library864290
-Node: Internal File Description864954
-Node: Internal File Ops868649
-Ref: Internal File Ops-Footnote-1873525
-Node: Using Internal File Ops873673
-Node: Future Extensions875698
-Node: Basic Concepts879735
-Node: Basic High Level880492
-Ref: Basic High Level-Footnote-1884608
-Node: Basic Data Typing884802
-Node: Floating Point Issues889239
-Node: String Conversion Precision890322
-Ref: String Conversion Precision-Footnote-1892016
-Node: Unexpected Results892125
-Node: POSIX Floating Point Problems893951
-Ref: POSIX Floating Point Problems-Footnote-1897650
-Node: Glossary897688
-Node: Copying921456
-Node: GNU Free Documentation License959013
-Node: next-edition984157
-Node: unresolved984509
-Node: revision985009
-Node: consistency985432
-Node: Index988785
+Node: Records133532
+Ref: Records-Footnote-1142098
+Node: Fields142135
+Ref: Fields-Footnote-1145167
+Node: Nonconstant Fields145253
+Node: Changing Fields147455
+Node: Field Separators152740
+Node: Default Field Splitting155369
+Node: Regexp Field Splitting156486
+Node: Single Character Fields159836
+Node: Command Line Field Separator160887
+Node: Field Splitting Summary164326
+Ref: Field Splitting Summary-Footnote-1167512
+Node: Constant Size167613
+Node: Splitting By Content172084
+Ref: Splitting By Content-Footnote-1175686
+Node: Multiple Line175726
+Ref: Multiple Line-Footnote-1181466
+Node: Getline181645
+Node: Plain Getline183873
+Node: Getline/Variable185962
+Node: Getline/File187103
+Node: Getline/Variable/File188425
+Ref: Getline/Variable/File-Footnote-1190024
+Node: Getline/Pipe190111
+Node: Getline/Variable/Pipe192659
+Node: Getline/Coprocess193766
+Node: Getline/Variable/Coprocess195009
+Node: Getline Notes195723
+Node: Getline Summary197665
+Ref: table-getline-variants197949
+Node: Command line directories198854
+Node: Printing199479
+Node: Print201110
+Node: Print Examples202447
+Node: Output Separators205231
+Node: OFMT206990
+Node: Printf208348
+Node: Basic Printf209254
+Node: Control Letters210791
+Node: Format Modifiers214603
+Node: Printf Examples220614
+Node: Redirection223329
+Node: Special Files230307
+Node: Special FD230840
+Ref: Special FD-Footnote-1234415
+Node: Special Network234489
+Node: Special Caveats235344
+Node: Close Files And Pipes236138
+Ref: Close Files And Pipes-Footnote-1243082
+Ref: Close Files And Pipes-Footnote-2243230
+Node: Expressions243380
+Node: Values244449
+Node: Constants245125
+Node: Scalar Constants245805
+Ref: Scalar Constants-Footnote-1246664
+Node: Nondecimal-numbers246846
+Node: Regexp Constants249905
+Node: Using Constant Regexps250380
+Node: Variables253385
+Node: Using Variables254040
+Node: Assignment Options255767
+Node: Conversion257648
+Ref: table-locale-affects263022
+Ref: Conversion-Footnote-1263646
+Node: All Operators263755
+Node: Arithmetic Ops264385
+Node: Concatenation266884
+Ref: Concatenation-Footnote-1269677
+Node: Assignment Ops269796
+Ref: table-assign-ops274784
+Node: Increment Ops276185
+Node: Truth Values and Conditions279663
+Node: Truth Values280746
+Node: Typing and Comparison281794
+Node: Variable Typing282583
+Ref: Variable Typing-Footnote-1286480
+Node: Comparison Operators286602
+Ref: table-relational-ops287012
+Node: POSIX String Comparison290561
+Ref: POSIX String Comparison-Footnote-1291518
+Node: Boolean Ops291656
+Ref: Boolean Ops-Footnote-1295734
+Node: Conditional Exp295825
+Node: Function Calls297557
+Node: Precedence301116
+Node: Patterns and Actions304769
+Node: Pattern Overview305823
+Node: Regexp Patterns307489
+Node: Expression Patterns308032
+Node: Ranges311606
+Node: BEGIN/END314572
+Node: Using BEGIN/END315322
+Ref: Using BEGIN/END-Footnote-1318053
+Node: I/O And BEGIN/END318167
+Node: Empty320436
+Node: BEGINFILE/ENDFILE320770
+Node: Using Shell Variables323595
+Node: Action Overview325874
+Node: Statements328231
+Node: If Statement330090
+Node: While Statement331589
+Node: Do Statement333633
+Node: For Statement334789
+Node: Switch Statement337941
+Node: Break Statement340038
+Node: Continue Statement342014
+Node: Next Statement343715
+Node: Nextfile Statement346097
+Node: Exit Statement348615
+Node: Built-in Variables350890
+Node: User-modified351985
+Ref: User-modified-Footnote-1359986
+Node: Auto-set360048
+Ref: Auto-set-Footnote-1368839
+Node: ARGC and ARGV369044
+Node: Arrays372803
+Node: Array Basics374374
+Node: Array Intro375085
+Node: Reference to Elements379403
+Node: Assigning Elements381673
+Node: Array Example382164
+Node: Scanning an Array383896
+Node: Delete386173
+Ref: Delete-Footnote-1388571
+Node: Numeric Array Subscripts388628
+Node: Uninitialized Subscripts390811
+Node: Multi-dimensional392439
+Node: Multi-scanning395530
+Node: Array Sorting397114
+Ref: Array Sorting-Footnote-1400312
+Node: Arrays of Arrays400506
+Node: Functions404614
+Node: Built-in405436
+Node: Calling Built-in406450
+Node: Numeric Functions408426
+Ref: Numeric Functions-Footnote-1412135
+Ref: Numeric Functions-Footnote-2412471
+Ref: Numeric Functions-Footnote-3412519
+Node: String Functions412788
+Ref: String Functions-Footnote-1434670
+Ref: String Functions-Footnote-2434799
+Ref: String Functions-Footnote-3435047
+Node: Gory Details435134
+Ref: table-sub-escapes436791
+Ref: table-sub-posix-92438137
+Ref: table-sub-proposed439480
+Ref: table-posix-2001-sub440840
+Ref: table-gensub-escapes442115
+Ref: Gory Details-Footnote-1443318
+Node: I/O Functions443369
+Ref: I/O Functions-Footnote-1450157
+Node: Time Functions450248
+Ref: Time Functions-Footnote-1461060
+Ref: Time Functions-Footnote-2461128
+Ref: Time Functions-Footnote-3461286
+Ref: Time Functions-Footnote-4461397
+Ref: Time Functions-Footnote-5461524
+Ref: Time Functions-Footnote-6461751
+Node: Bitwise Functions462017
+Ref: table-bitwise-ops462595
+Ref: Bitwise Functions-Footnote-1466835
+Node: I18N Functions467019
+Node: User-defined468742
+Node: Definition Syntax469546
+Node: Function Example474244
+Node: Function Caveats476826
+Node: Return Statement480751
+Node: Dynamic Typing483408
+Node: Indirect Calls484145
+Node: Internationalization493780
+Node: I18N and L10N495199
+Node: Explaining gettext495883
+Ref: Explaining gettext-Footnote-1500794
+Ref: Explaining gettext-Footnote-2501033
+Node: Programmer i18n501202
+Node: Translator i18n505437
+Node: String Extraction506228
+Ref: String Extraction-Footnote-1507185
+Node: Printf Ordering507311
+Ref: Printf Ordering-Footnote-1510091
+Node: I18N Portability510155
+Ref: I18N Portability-Footnote-1512600
+Node: I18N Example512663
+Ref: I18N Example-Footnote-1515283
+Node: Gawk I18N515355
+Node: Advanced Features515933
+Node: Nondecimal Data517248
+Node: Two-way I/O518809
+Ref: Two-way I/O-Footnote-1524292
+Node: TCP/IP Networking524369
+Node: Profiling527159
+Node: Invoking Gawk534620
+Node: Command Line535927
+Node: Options536712
+Ref: Options-Footnote-1549800
+Node: Other Arguments549825
+Node: AWKPATH Variable552506
+Ref: AWKPATH Variable-Footnote-1555281
+Node: Exit Status555541
+Node: Include Files556213
+Node: Obsolete559814
+Node: Undocumented560615
+Node: Known Bugs560877
+Node: Library Functions561479
+Ref: Library Functions-Footnote-1564460
+Node: Library Names564631
+Ref: Library Names-Footnote-1568104
+Ref: Library Names-Footnote-2568323
+Node: General Functions568409
+Node: Nextfile Function569472
+Node: Strtonum Function573836
+Node: Assert Function576777
+Node: Round Function580081
+Node: Cliff Random Function581621
+Node: Ordinal Functions582636
+Ref: Ordinal Functions-Footnote-1585696
+Node: Join Function585912
+Ref: Join Function-Footnote-1587674
+Node: Gettimeofday Function587874
+Node: Data File Management591585
+Node: Filetrans Function592217
+Node: Rewind Function595643
+Node: File Checking597089
+Node: Empty Files598119
+Node: Ignoring Assigns600344
+Node: Getopt Function601892
+Ref: Getopt Function-Footnote-1613174
+Node: Passwd Functions613377
+Ref: Passwd Functions-Footnote-1622355
+Node: Group Functions622443
+Node: Sample Programs630540
+Node: Running Examples631209
+Node: Clones631937
+Node: Cut Program633069
+Node: Egrep Program642828
+Ref: Egrep Program-Footnote-1650578
+Node: Id Program650688
+Node: Split Program654295
+Node: Tee Program657763
+Node: Uniq Program660506
+Node: Wc Program667873
+Ref: Wc Program-Footnote-1672117
+Node: Miscellaneous Programs672313
+Node: Dupword Program673433
+Node: Alarm Program675464
+Node: Translate Program680006
+Ref: Translate Program-Footnote-1684385
+Ref: Translate Program-Footnote-2684622
+Node: Labels Program684756
+Ref: Labels Program-Footnote-1688047
+Node: Word Sorting688131
+Node: History Sorting692478
+Node: Extract Program694316
+Node: Simple Sed701674
+Node: Igawk Program704731
+Ref: Igawk Program-Footnote-1719462
+Ref: Igawk Program-Footnote-2719663
+Node: Signature Program719801
+Node: Debugger720881
+Node: Debugging721757
+Node: Debugging Concepts722071
+Node: Debugging Terms723924
+Node: Awk Debugging726472
+Node: Sample dgawk session727364
+Node: dgawk invocation727856
+Node: Finding The Bug729040
+Node: List of Debugger Commands735555
+Node: Breakpoint Control736870
+Node: Dgawk Execution Control740080
+Node: Viewing And Changing Data743429
+Node: Dgawk Stack746725
+Node: Dgawk Info748186
+Node: Miscellaneous Dgawk Commands752124
+Node: Readline Support757840
+Node: Dgawk Limitations758656
+Node: Language History760828
+Node: V7/SVR3.1762205
+Node: SVR4764500
+Node: POSIX765945
+Node: BTL767657
+Node: POSIX/GNU769347
+Node: Contributors779011
+Node: Installation782616
+Node: Gawk Distribution783587
+Node: Getting784071
+Node: Extracting784897
+Node: Distribution contents786285
+Node: Unix Installation791358
+Node: Quick Installation791949
+Node: Additional Configuration Options793651
+Node: Configuration Philosophy795414
+Node: Non-Unix Installation797778
+Node: PC Installation798243
+Node: PC Binary Installation799549
+Node: PC Compiling801392
+Node: PC Dynamic805897
+Node: PC Using808260
+Node: Cygwin812808
+Node: MSYS813792
+Node: VMS Installation814298
+Node: VMS Compilation814902
+Node: VMS Installation Details816479
+Node: VMS Running818109
+Node: VMS POSIX819706
+Node: VMS Old Gawk821004
+Node: Unsupported821473
+Node: Atari Installation821935
+Node: Atari Compiling823222
+Node: Atari Using825111
+Node: BeOS Installation827958
+Node: Tandem Installation829103
+Node: Bugs830782
+Node: Other Versions834614
+Node: Notes839836
+Node: Compatibility Mode840528
+Node: Additions841311
+Node: Adding Code842061
+Node: New Ports848113
+Node: Dynamic Extensions852245
+Node: Internals853626
+Node: Plugin License864031
+Node: Sample Library864665
+Node: Internal File Description865329
+Node: Internal File Ops869024
+Ref: Internal File Ops-Footnote-1873900
+Node: Using Internal File Ops874048
+Node: Future Extensions876073
+Node: Basic Concepts880110
+Node: Basic High Level880867
+Ref: Basic High Level-Footnote-1884983
+Node: Basic Data Typing885177
+Node: Floating Point Issues889614
+Node: String Conversion Precision890697
+Ref: String Conversion Precision-Footnote-1892391
+Node: Unexpected Results892500
+Node: POSIX Floating Point Problems894326
+Ref: POSIX Floating Point Problems-Footnote-1898025
+Node: Glossary898063
+Node: Copying921831
+Node: GNU Free Documentation License959388
+Node: next-edition984532
+Node: unresolved984884
+Node: revision985384
+Node: consistency985807
+Node: Index989160

End Tag Table