aboutsummaryrefslogtreecommitdiffstats
path: root/doc/gawk.info
diff options
context:
space:
mode:
Diffstat (limited to 'doc/gawk.info')
-rw-r--r--doc/gawk.info663
1 files changed, 409 insertions, 254 deletions
diff --git a/doc/gawk.info b/doc/gawk.info
index 06d2dbb9..09828f4a 100644
--- a/doc/gawk.info
+++ b/doc/gawk.info
@@ -10036,6 +10036,154 @@ value, regardless of what the subarray itself contains, and all
subarrays are treated as being equal to each other. Their order
relative to each other is determined by their index strings.
+8.1.5.2 Controlling Array Scanning Order With a User-defined Function
+.....................................................................
+
+The value of `PROCINFO["sorted_in"]' can also be a function name that
+will let you traverse an array based on any custom criterion. The
+array elements are ordered according to the return value of this
+function. This comparison function should be defined with at least
+four arguments:
+
+ function comp_func(i1, v1, i2, v2)
+ {
+ COMPARE ELEMENTS 1 AND 2 IN SOME FASHION
+ RETURN < 0; 0; OR > 0
+ }
+
+ Here, I1 and I2 are the indices, and V1 and V2 are the corresponding
+values of the two elements being compared. Either V1 or V2, or both,
+can be arrays if the array being traversed contains subarrays as
+values. The three possible return values are interpreted this way:
+
+ * If the return value of `comp_func(i1, v1, i2, v2)' is less than
+ 0, index I1 comes before index I2 during loop traversal.
+
+ * If `comp_func(i1, v1, i2, v2)' returns 0, I1 and I2 come
+ together but relative order with respect to each other is
+ undefined.
+
+ * If the return value of `comp_func(i1, v1, i2, v2)' is greater
+ than 0, I1 comes after I2.
+
+ The following comparison function can be used to scan an array in
+numerical order of the indices:
+
+ function cmp_num_idx(i1, v1, i2, v2)
+ {
+ # numerical index comparison, ascending order
+ return (i1 - i2)
+ }
+
+ This function will traverse an array based on an order by element
+values rather than by indices:
+
+ function cmp_str_val(i1, v1, i2, v2)
+ {
+ # string value comparison, ascending order
+ v1 = v1 ""
+ v2 = v2 ""
+ if (v1 < v2) return -1
+ return (v1 != v2)
+ }
+
+ A comparison function to make all numbers, and numeric strings
+without any leading or trailing spaces come out first during loop
+traversal:
+
+ function cmp_num_str_val(i1, v1, i2, v2, n1, n2)
+ {
+ # numbers before string value comparison, ascending order
+ n1 = v1 + 0
+ n2 = v2 + 0
+ if (n1 == v1)
+ return (n2 == v2) ? (n1 - n2) : -1
+ else if (n2 == v2)
+ return 1
+ return (v1 < v2) ? -1 : (v1 != v2)
+ }
+
+ Consider sorting the entries of a GNU/Linux system password file
+according to login names. The following program which sorts records by
+a specific field position can be used for this purpose:
+
+ # sort.awk --- simple program to sort by field position
+ # field position is specified by POS
+
+ function cmp_field(i1, v1, i2, v2)
+ {
+ # comparison by value, as string, and ascending order
+ return v1[POS] < v2[POS] ? -1 : (v1[POS] != v2[POS])
+ }
+
+ {
+ for (i = 1; i <= NF; i++)
+ a[NR][i] = $i
+ }
+
+ END {
+ PROCINFO["sorted_in"] = "cmp_field"
+ if (POS < 1 || POS > NF)
+ POS = 1
+ for (i in a) {
+ for (j = 1; j <= NF; j++)
+ printf("%s%c", a[i][j], j < NF ? ":" : "")
+ print ""
+ }
+ }
+
+ The first field in each entry of the password file is the user's
+login name, and the fields are seperated by colons. Running the
+program produces the following output:
+
+ $ gawk -vPOS=1 -F: -f sort.awk /etc/passwd
+ -| adm:x:3:4:adm:/var/adm:/sbin/nologin
+ -| apache:x:48:48:Apache:/var/www:/sbin/nologin
+ -| avahi:x:70:70:Avahi daemon:/:/sbin/nologin
+ ...
+
+ The comparison normally should always return the same value when
+given a specific pair of array elements as its arguments. If
+inconsistent results are returned then the order is undefined. This
+behavior is sometimes exploited to introduce random order in otherwise
+seemingly ordered data:
+
+ function cmp_randomize(i1, v1, i2, v2)
+ {
+ # random order
+ return (2 - 4 * rand())
+ }
+
+ As mentioned above, the order of the indices is arbitrary if two
+elements compare equal. This is usually not a problem, but letting the
+tied elements come out in arbitrary order can be an issue, specially
+when comparing item values. The partial ordering of the equal elements
+may change during next loop traversal, if other elements are added or
+removed from the array. One way to resolve ties when comparing elements
+with otherwise equal values is to include the indices in the comparison
+rules. Note that doing this may make the loop traversal less efficient,
+so consider it only if necessary. The following comparison functions
+will force a deterministic order, and are based on the fact that the
+indices of two elements are never equal:
+
+ function cmp_numeric(i1, v1, i2, v2)
+ {
+ # numerical value (and index) comparison, descending order
+ return (v1 != v2) ? (v2 - v1) : (i2 - i1)
+ }
+
+ function cmp_string(i1, v1, i2, v2)
+ {
+ # string value (and index) comparison, descending order
+ v1 = v1 i1
+ v2 = v2 i2
+ return (v1 > v2) ? -1 : (v1 != v2)
+ }
+
+ A custom comparison function can often simplify ordered loop
+traversal, and the the sky is really the limit when it comes to
+designing such a function.
+
When string comparisons are made during a sort, either for element
values where one or both aren't numbers or for element indices handled
as strings, the value of `IGNORECASE' (*note Built-in Variables::)
@@ -10399,6 +10547,10 @@ the call to asort in the above example can be replaced with:
asort(source, dest, "descending number")
+ The third argument to `asort()' can also be a user-defined function
+name which is used to order the array elements before constructing the
+result array. *Note Scanning an Array::, for more information.
+
Often, what's needed is to sort on the values of the _indices_
instead of the values of the elements. To do that, use the `asorti()'
function. The interface is identical to that of `asort()', except that
@@ -10813,7 +10965,10 @@ pound sign (`#'):
value of HOW. If the `source' array contains subarrays as values,
they will come out last(first) in the `dest' array for
`ascending'(`descending') order specification. The value of
- `IGNORECASE' affects the sorting. *Note Scanning an Array::, for
+ `IGNORECASE' affects the sorting. The third argument can also be
+ a user-defined function name in which case the value returned by
+ the function is used to order the array elements before
+ constructing the result array. *Note Scanning an Array::, for
more information.
For example, if the contents of `a' are as follows:
@@ -24550,7 +24705,7 @@ Index
* 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 81)
+* arrays, sorting, IGNORECASE variable and: Array Sorting. (line 85)
* arrays, sparse: Array Intro. (line 71)
* arrays, subscripts: Numeric Array Subscripts.
(line 6)
@@ -24563,7 +24718,7 @@ Index
* asort() function (gawk) <1>: String Functions. (line 29)
* asort() function (gawk): Array Sorting. (line 6)
* asort() function (gawk), arrays, sorting: Array Sorting. (line 6)
-* asorti() function (gawk): String Functions. (line 74)
+* asorti() function (gawk): String Functions. (line 77)
* assert() function (C library): Assert Function. (line 6)
* assert() user-defined function: Assert Function. (line 28)
* assertions: Assert Function. (line 6)
@@ -24807,7 +24962,7 @@ Index
* caret (^), in bracket expressions: Bracket Expressions. (line 16)
* case keyword: Switch Statement. (line 6)
* case sensitivity, array indices and: Array Intro. (line 92)
-* case sensitivity, converting case: String Functions. (line 519)
+* case sensitivity, converting case: String Functions. (line 522)
* case sensitivity, example programs: Library Functions. (line 42)
* case sensitivity, gawk: Case-sensitivity. (line 26)
* case sensitivity, regexps and <1>: User-modified. (line 82)
@@ -24882,7 +25037,7 @@ Index
* common extensions, fflush() function: I/O Functions. (line 25)
* common extensions, func keyword: Definition Syntax. (line 83)
* common extensions, length() applied to an array: String Functions.
- (line 193)
+ (line 196)
* common extensions, nextfile statement: Nextfile Statement. (line 6)
* common extensions, RS as a regexp: Records. (line 115)
* common extensions, single character fields: Single Character Fields.
@@ -24924,7 +25079,7 @@ Index
* constants, types of: Constants. (line 6)
* continue statement: Continue Statement. (line 6)
* control statements: Statements. (line 6)
-* converting, case: String Functions. (line 519)
+* converting, case: String Functions. (line 522)
* converting, dates to timestamps: Time Functions. (line 74)
* converting, during subscripting: Numeric Array Subscripts.
(line 31)
@@ -24982,7 +25137,7 @@ Index
(line 20)
* dark corner, input files: Records. (line 98)
* dark corner, invoking awk: Command Line. (line 16)
-* dark corner, length() function: String Functions. (line 179)
+* dark corner, length() function: String Functions. (line 182)
* dark corner, multiline records: Multiple Line. (line 35)
* dark corner, NF variable, decrementing: Changing Fields. (line 107)
* dark corner, OFMT variable: OFMT. (line 27)
@@ -24992,7 +25147,7 @@ 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 358)
+* dark corner, split() function: String Functions. (line 361)
* dark corner, strings, storing: Records. (line 191)
* dark corner, value of ARGV[0]: Auto-set. (line 35)
* data, fixed-width: Constant Size. (line 9)
@@ -25123,7 +25278,7 @@ 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 193)
+* differences between gawk and awk: String Functions. (line 196)
* differences in awk and gawk, ARGC/ARGV variables: ARGC and ARGV.
(line 88)
* differences in awk and gawk, ARGIND variable: Auto-set. (line 40)
@@ -25163,7 +25318,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 256)
+ (line 259)
* differences in awk and gawk, next/nextfile statements: Nextfile Statement.
(line 6)
* differences in awk and gawk, print/printf statements: Format Modifiers.
@@ -25179,11 +25334,11 @@ Index
* differences in awk and gawk, single-character fields: Single Character Fields.
(line 6)
* differences in awk and gawk, split() function: String Functions.
- (line 346)
+ (line 349)
* differences in awk and gawk, strings: Scalar Constants. (line 20)
* differences in awk and gawk, strings, storing: Records. (line 187)
* differences in awk and gawk, strtonum() function (gawk): String Functions.
- (line 401)
+ (line 404)
* differences in awk and gawk, TEXTDOMAIN variable: User-modified.
(line 153)
* differences in awk and gawk, trunc-mod operation: Arithmetic Ops.
@@ -25331,7 +25486,7 @@ Index
* extensions, common, fflush() function: I/O Functions. (line 25)
* extensions, common, func keyword: Definition Syntax. (line 83)
* extensions, common, length() applied to an array: String Functions.
- (line 193)
+ (line 196)
* extensions, common, nextfile statement: Nextfile Statement. (line 6)
* extensions, common, RS as a regexp: Records. (line 115)
* extensions, common, single character fields: Single Character Fields.
@@ -25593,7 +25748,7 @@ Index
* gawk, functions, adding: Dynamic Extensions. (line 10)
* gawk, hexadecimal numbers and: Nondecimal-numbers. (line 42)
* gawk, IGNORECASE variable in <1>: String Functions. (line 29)
-* gawk, IGNORECASE variable in <2>: Array Sorting. (line 81)
+* gawk, IGNORECASE variable in <2>: Array Sorting. (line 85)
* gawk, IGNORECASE variable in <3>: Array Intro. (line 92)
* gawk, IGNORECASE variable in <4>: User-modified. (line 82)
* gawk, IGNORECASE variable in: Case-sensitivity. (line 26)
@@ -25646,7 +25801,7 @@ Index
(line 63)
* General Public License (GPL): Glossary. (line 306)
* General Public License, See GPL: Manual History. (line 11)
-* gensub() function (gawk) <1>: String Functions. (line 83)
+* gensub() function (gawk) <1>: String Functions. (line 86)
* gensub() function (gawk): Using Constant Regexps.
(line 43)
* gensub() function (gawk), escape processing: Gory Details. (line 6)
@@ -25715,10 +25870,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 136)
+* gsub() function <1>: String Functions. (line 139)
* gsub() function: Using Constant Regexps.
(line 43)
-* gsub() function, arguments of: String Functions. (line 459)
+* gsub() function, arguments of: String Functions. (line 462)
* gsub() function, escape processing: Gory Details. (line 6)
* h debugger command (alias for help): Miscellaneous Dgawk Commands.
(line 68)
@@ -25752,11 +25907,11 @@ Index
* igawk.sh program: Igawk Program. (line 124)
* ignore debugger command: Breakpoint Control. (line 86)
* IGNORECASE variable <1>: String Functions. (line 29)
-* IGNORECASE variable <2>: Array Sorting. (line 81)
+* IGNORECASE variable <2>: Array Sorting. (line 85)
* IGNORECASE variable <3>: Array Intro. (line 92)
* IGNORECASE variable <4>: User-modified. (line 82)
* IGNORECASE variable: Case-sensitivity. (line 26)
-* IGNORECASE variable, array sorting and: Array Sorting. (line 81)
+* IGNORECASE variable, array sorting and: Array Sorting. (line 85)
* IGNORECASE variable, array subscripts and: Array Intro. (line 92)
* IGNORECASE variable, in example programs: Library Functions.
(line 42)
@@ -25773,7 +25928,7 @@ Index
* in operator, arrays and: Reference to Elements.
(line 37)
* increment operators: Increment Ops. (line 6)
-* index() function: String Functions. (line 152)
+* index() function: String Functions. (line 155)
* indexing arrays: Array Intro. (line 50)
* indirect function calls: Indirect Calls. (line 6)
* info debugger command: Dgawk Info. (line 12)
@@ -25909,7 +26064,7 @@ Index
(line 11)
* left shift, bitwise: Bitwise Functions. (line 32)
* leftmost longest match: Multiple Line. (line 26)
-* length() function: String Functions. (line 163)
+* length() function: String Functions. (line 166)
* Lesser General Public License (LGPL): Glossary. (line 385)
* LGPL (Lesser General Public License): Glossary. (line 385)
* libmawk: Other Versions. (line 104)
@@ -25993,9 +26148,9 @@ Index
(line 6)
* marked strings, extracting: String Extraction. (line 6)
* Marx, Groucho: Increment Ops. (line 61)
-* match() function: String Functions. (line 203)
+* match() function: String Functions. (line 206)
* match() function, RSTART/RLENGTH variables: String Functions.
- (line 220)
+ (line 223)
* matching, expressions, See comparison expressions: Typing and Comparison.
(line 9)
* matching, leftmost longest: Multiple Line. (line 26)
@@ -26194,7 +26349,7 @@ Index
* parentheses (): Regexp Operators. (line 79)
* parentheses (), pgawk program: Profiling. (line 141)
* password file: Passwd Functions. (line 16)
-* patsplit() function: String Functions. (line 290)
+* patsplit() function: String Functions. (line 293)
* patterns: Patterns and Actions.
(line 6)
* patterns, comparison expressions as: Expression Patterns. (line 14)
@@ -26252,7 +26407,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 172)
+* portability, length() function: String Functions. (line 175)
* portability, new awk vs. old awk: Conversion. (line 55)
* portability, next statement in user-defined functions: Pass By Value/Reference.
(line 91)
@@ -26260,7 +26415,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 509)
+* portability, substr() function: String Functions. (line 512)
* 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.
@@ -26296,7 +26451,7 @@ Index
* POSIX awk, field separators and: Fields. (line 6)
* POSIX awk, FS variable and: User-modified. (line 66)
* POSIX awk, function keyword in: Definition Syntax. (line 83)
-* POSIX awk, functions and, length(): String Functions. (line 172)
+* POSIX awk, functions and, length(): String Functions. (line 175)
* POSIX awk, GNU long options and: Options. (line 15)
* POSIX awk, interval expressions in: Regexp Operators. (line 135)
* POSIX awk, next/nextfile statements and: Next Statement. (line 45)
@@ -26434,7 +26589,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 75)
+* reference counting, sorting arrays: Array Sorting. (line 79)
* regexp constants <1>: Comparison Operators.
(line 103)
* regexp constants <2>: Regexp Constants. (line 6)
@@ -26501,7 +26656,7 @@ Index
* right shift, bitwise: Bitwise Functions. (line 32)
* Ritchie, Dennis: Basic Data Typing. (line 74)
* RLENGTH variable: Auto-set. (line 205)
-* RLENGTH variable, match() function and: String Functions. (line 220)
+* RLENGTH variable, match() function and: String Functions. (line 223)
* Robbins, Arnold <1>: Future Extensions. (line 6)
* Robbins, Arnold <2>: Bugs. (line 32)
* Robbins, Arnold <3>: Contributors. (line 106)
@@ -26526,7 +26681,7 @@ Index
* RS variable, multiline records and: Multiple Line. (line 17)
* rshift() function (gawk): Bitwise Functions. (line 51)
* RSTART variable: Auto-set. (line 211)
-* RSTART variable, match() function and: String Functions. (line 220)
+* RSTART variable, match() function and: String Functions. (line 223)
* RT variable <1>: Auto-set. (line 218)
* RT variable <2>: Getline/Variable/File.
(line 10)
@@ -26553,7 +26708,7 @@ Index
* search paths, for source files <2>: PC Using. (line 11)
* search paths, for source files <3>: Igawk Program. (line 364)
* search paths, for source files: AWKPATH Variable. (line 6)
-* searching: String Functions. (line 152)
+* searching: String Functions. (line 155)
* searching, files for regular expressions: Egrep Program. (line 6)
* searching, for words: Dupword Program. (line 6)
* sed utility <1>: Glossary. (line 12)
@@ -26644,10 +26799,10 @@ Index
* sparse arrays: Array Intro. (line 71)
* Spencer, Henry: Glossary. (line 12)
* split utility: Split Program. (line 6)
-* split() function: String Functions. (line 312)
+* split() function: String Functions. (line 315)
* split() function, array elements, deleting: Delete. (line 57)
* split.awk program: Split Program. (line 30)
-* sprintf() function <1>: String Functions. (line 377)
+* sprintf() function <1>: String Functions. (line 380)
* sprintf() function: OFMT. (line 15)
* sprintf() function, OFMT variable and: User-modified. (line 124)
* sprintf() function, print/printf statements and: Round Function.
@@ -26696,14 +26851,14 @@ Index
* strings, null: Regexp Field Splitting.
(line 43)
* strings, numeric: Variable Typing. (line 6)
-* strings, splitting: String Functions. (line 332)
-* strtonum() function (gawk): String Functions. (line 384)
+* strings, splitting: String Functions. (line 335)
+* strtonum() function (gawk): String Functions. (line 387)
* strtonum() function (gawk), --non-decimal-data option and: Nondecimal Data.
(line 36)
-* sub() function <1>: String Functions. (line 405)
+* sub() function <1>: String Functions. (line 408)
* sub() function: Using Constant Regexps.
(line 43)
-* sub() function, arguments of: String Functions. (line 459)
+* sub() function, arguments of: String Functions. (line 462)
* sub() function, escape processing: Gory Details. (line 6)
* subscript separators: User-modified. (line 147)
* subscripts in arrays, multidimensional: Multi-dimensional. (line 10)
@@ -26716,7 +26871,7 @@ Index
* SUBSEP variable: User-modified. (line 147)
* SUBSEP variable, multidimensional arrays: Multi-dimensional.
(line 16)
-* substr() function: String Functions. (line 478)
+* substr() function: String Functions. (line 481)
* Sumner, Andrew: Other Versions. (line 55)
* switch statement: Switch Statement. (line 6)
* syntactic ambiguity: /= operator vs. /=.../ regexp constant: Assignment Ops.
@@ -26767,8 +26922,8 @@ Index
* timestamps, converting dates to: Time Functions. (line 74)
* timestamps, formatted: Gettimeofday Function.
(line 6)
-* tolower() function: String Functions. (line 520)
-* toupper() function: String Functions. (line 526)
+* tolower() function: String Functions. (line 523)
+* toupper() function: String Functions. (line 529)
* tr utility: Translate Program. (line 6)
* trace debugger command: Miscellaneous Dgawk Commands.
(line 110)
@@ -26791,9 +26946,9 @@ Index
* troubleshooting, gawk, fatal errors, function arguments: Calling Built-in.
(line 16)
* troubleshooting, getline function: File Checking. (line 25)
-* troubleshooting, gsub()/sub() functions: String Functions. (line 469)
-* troubleshooting, match() function: String Functions. (line 285)
-* troubleshooting, patsplit() function: String Functions. (line 308)
+* troubleshooting, gsub()/sub() functions: String Functions. (line 472)
+* troubleshooting, match() function: String Functions. (line 288)
+* troubleshooting, patsplit() function: String Functions. (line 311)
* troubleshooting, print statement, omitting commas: Print Examples.
(line 31)
* troubleshooting, printing: Redirection. (line 118)
@@ -26802,7 +26957,7 @@ Index
* troubleshooting, regexp constants vs. string constants: Computed Regexps.
(line 38)
* troubleshooting, string concatenation: Concatenation. (line 27)
-* troubleshooting, substr() function: String Functions. (line 496)
+* troubleshooting, substr() function: String Functions. (line 499)
* troubleshooting, system() function: I/O Functions. (line 85)
* troubleshooting, typographical errors, global variables: Options.
(line 94)
@@ -27164,215 +27319,215 @@ Node: Assigning Elements416450
Node: Array Example416941
Node: Scanning an Array418673
Node: Controlling Scanning421049
-Node: Delete424695
-Ref: Delete-Footnote-1427130
-Node: Numeric Array Subscripts427187
-Node: Uninitialized Subscripts429370
-Node: Multi-dimensional430998
-Node: Multi-scanning434089
-Node: Array Sorting435673
-Ref: Array Sorting-Footnote-1439452
-Node: Arrays of Arrays439646
-Node: Functions444219
-Node: Built-in445041
-Node: Calling Built-in446119
-Node: Numeric Functions448107
-Ref: Numeric Functions-Footnote-1451872
-Ref: Numeric Functions-Footnote-2452229
-Ref: Numeric Functions-Footnote-3452277
-Node: String Functions452546
-Ref: String Functions-Footnote-1475818
-Ref: String Functions-Footnote-2475947
-Ref: String Functions-Footnote-3476195
-Node: Gory Details476282
-Ref: table-sub-escapes477961
-Ref: table-posix-sub479275
-Ref: table-gensub-escapes480188
-Node: I/O Functions481359
-Ref: I/O Functions-Footnote-1488014
-Node: Time Functions488161
-Ref: Time Functions-Footnote-1499053
-Ref: Time Functions-Footnote-2499121
-Ref: Time Functions-Footnote-3499279
-Ref: Time Functions-Footnote-4499390
-Ref: Time Functions-Footnote-5499502
-Ref: Time Functions-Footnote-6499729
-Node: Bitwise Functions499995
-Ref: table-bitwise-ops500553
-Ref: Bitwise Functions-Footnote-1504713
-Node: Type Functions504897
-Node: I18N Functions505367
-Node: User-defined506994
-Node: Definition Syntax507798
-Ref: Definition Syntax-Footnote-1512708
-Node: Function Example512777
-Node: Function Caveats515371
-Node: Calling A Function515792
-Node: Variable Scope516907
-Node: Pass By Value/Reference518882
-Node: Return Statement522322
-Node: Dynamic Typing525303
-Node: Indirect Calls526038
-Node: Internationalization535723
-Node: I18N and L10N537149
-Node: Explaining gettext537835
-Ref: Explaining gettext-Footnote-1542901
-Ref: Explaining gettext-Footnote-2543085
-Node: Programmer i18n543250
-Node: Translator i18n547450
-Node: String Extraction548243
-Ref: String Extraction-Footnote-1549204
-Node: Printf Ordering549290
-Ref: Printf Ordering-Footnote-1552074
-Node: I18N Portability552138
-Ref: I18N Portability-Footnote-1554587
-Node: I18N Example554650
-Ref: I18N Example-Footnote-1557285
-Node: Gawk I18N557357
-Node: Advanced Features557974
-Node: Nondecimal Data559293
-Node: Two-way I/O560874
-Ref: Two-way I/O-Footnote-1566308
-Node: TCP/IP Networking566378
-Node: Profiling569222
-Node: Library Functions576696
-Ref: Library Functions-Footnote-1579703
-Node: Library Names579874
-Ref: Library Names-Footnote-1583345
-Ref: Library Names-Footnote-2583565
-Node: General Functions583651
-Node: Strtonum Function584604
-Node: Assert Function587534
-Node: Round Function590860
-Node: Cliff Random Function592403
-Node: Ordinal Functions593419
-Ref: Ordinal Functions-Footnote-1596489
-Ref: Ordinal Functions-Footnote-2596741
-Node: Join Function596950
-Ref: Join Function-Footnote-1598721
-Node: Gettimeofday Function598921
-Node: Data File Management602636
-Node: Filetrans Function603268
-Node: Rewind Function607407
-Node: File Checking608794
-Node: Empty Files609888
-Node: Ignoring Assigns612118
-Node: Getopt Function613671
-Ref: Getopt Function-Footnote-1624975
-Node: Passwd Functions625178
-Ref: Passwd Functions-Footnote-1634153
-Node: Group Functions634241
-Node: Walking Arrays642325
-Node: Sample Programs643894
-Node: Running Examples644559
-Node: Clones645287
-Node: Cut Program646511
-Node: Egrep Program656356
-Ref: Egrep Program-Footnote-1664129
-Node: Id Program664239
-Node: Split Program667855
-Ref: Split Program-Footnote-1671374
-Node: Tee Program671502
-Node: Uniq Program674305
-Node: Wc Program681734
-Ref: Wc Program-Footnote-1686000
-Ref: Wc Program-Footnote-2686200
-Node: Miscellaneous Programs686292
-Node: Dupword Program687480
-Node: Alarm Program689511
-Node: Translate Program694260
-Ref: Translate Program-Footnote-1698647
-Ref: Translate Program-Footnote-2698875
-Node: Labels Program699009
-Ref: Labels Program-Footnote-1702380
-Node: Word Sorting702464
-Node: History Sorting706348
-Node: Extract Program708187
-Ref: Extract Program-Footnote-1715670
-Node: Simple Sed715798
-Node: Igawk Program718860
-Ref: Igawk Program-Footnote-1733893
-Ref: Igawk Program-Footnote-2734094
-Node: Anagram Program734232
-Node: Signature Program737300
-Node: Debugger738400
-Node: Debugging739311
-Node: Debugging Concepts739724
-Node: Debugging Terms741580
-Node: Awk Debugging744202
-Node: Sample dgawk session745094
-Node: dgawk invocation745586
-Node: Finding The Bug746768
-Node: List of Debugger Commands753254
-Node: Breakpoint Control754565
-Node: Dgawk Execution Control758201
-Node: Viewing And Changing Data761552
-Node: Dgawk Stack764889
-Node: Dgawk Info766349
-Node: Miscellaneous Dgawk Commands770297
-Node: Readline Support775725
-Node: Dgawk Limitations776563
-Node: Language History778752
-Node: V7/SVR3.1780190
-Node: SVR4782511
-Node: POSIX783953
-Node: BTL784961
-Node: POSIX/GNU785695
-Node: Common Extensions790796
-Node: Contributors791897
-Node: Installation796036
-Node: Gawk Distribution796930
-Node: Getting797414
-Node: Extracting798240
-Node: Distribution contents799932
-Node: Unix Installation805154
-Node: Quick Installation805771
-Node: Additional Configuration Options807733
-Node: Configuration Philosophy809210
-Node: Non-Unix Installation811552
-Node: PC Installation812010
-Node: PC Binary Installation813309
-Node: PC Compiling815157
-Node: PC Testing818101
-Node: PC Using819277
-Node: Cygwin823462
-Node: MSYS824462
-Node: VMS Installation824976
-Node: VMS Compilation825579
-Ref: VMS Compilation-Footnote-1826586
-Node: VMS Installation Details826644
-Node: VMS Running828279
-Node: VMS Old Gawk829886
-Node: Bugs830360
-Node: Other Versions834270
-Node: Notes839549
-Node: Compatibility Mode840241
-Node: Additions841024
-Node: Accessing The Source841836
-Node: Adding Code843261
-Node: New Ports849228
-Node: Dynamic Extensions853341
-Node: Internals854717
-Node: Plugin License863820
-Node: Sample Library864454
-Node: Internal File Description865140
-Node: Internal File Ops868855
-Ref: Internal File Ops-Footnote-1873636
-Node: Using Internal File Ops873776
-Node: Future Extensions876153
-Node: Basic Concepts878657
-Node: Basic High Level879414
-Ref: Basic High Level-Footnote-1883449
-Node: Basic Data Typing883634
-Node: Floating Point Issues888159
-Node: String Conversion Precision889242
-Ref: String Conversion Precision-Footnote-1890936
-Node: Unexpected Results891045
-Node: POSIX Floating Point Problems892871
-Ref: POSIX Floating Point Problems-Footnote-1896573
-Node: Glossary896611
-Node: Copying920754
-Node: GNU Free Documentation License958311
-Node: Index983448
+Node: Delete429855
+Ref: Delete-Footnote-1432290
+Node: Numeric Array Subscripts432347
+Node: Uninitialized Subscripts434530
+Node: Multi-dimensional436158
+Node: Multi-scanning439249
+Node: Array Sorting440833
+Ref: Array Sorting-Footnote-1444819
+Node: Arrays of Arrays445013
+Node: Functions449586
+Node: Built-in450408
+Node: Calling Built-in451486
+Node: Numeric Functions453474
+Ref: Numeric Functions-Footnote-1457239
+Ref: Numeric Functions-Footnote-2457596
+Ref: Numeric Functions-Footnote-3457644
+Node: String Functions457913
+Ref: String Functions-Footnote-1481384
+Ref: String Functions-Footnote-2481513
+Ref: String Functions-Footnote-3481761
+Node: Gory Details481848
+Ref: table-sub-escapes483527
+Ref: table-posix-sub484841
+Ref: table-gensub-escapes485754
+Node: I/O Functions486925
+Ref: I/O Functions-Footnote-1493580
+Node: Time Functions493727
+Ref: Time Functions-Footnote-1504619
+Ref: Time Functions-Footnote-2504687
+Ref: Time Functions-Footnote-3504845
+Ref: Time Functions-Footnote-4504956
+Ref: Time Functions-Footnote-5505068
+Ref: Time Functions-Footnote-6505295
+Node: Bitwise Functions505561
+Ref: table-bitwise-ops506119
+Ref: Bitwise Functions-Footnote-1510279
+Node: Type Functions510463
+Node: I18N Functions510933
+Node: User-defined512560
+Node: Definition Syntax513364
+Ref: Definition Syntax-Footnote-1518274
+Node: Function Example518343
+Node: Function Caveats520937
+Node: Calling A Function521358
+Node: Variable Scope522473
+Node: Pass By Value/Reference524448
+Node: Return Statement527888
+Node: Dynamic Typing530869
+Node: Indirect Calls531604
+Node: Internationalization541289
+Node: I18N and L10N542715
+Node: Explaining gettext543401
+Ref: Explaining gettext-Footnote-1548467
+Ref: Explaining gettext-Footnote-2548651
+Node: Programmer i18n548816
+Node: Translator i18n553016
+Node: String Extraction553809
+Ref: String Extraction-Footnote-1554770
+Node: Printf Ordering554856
+Ref: Printf Ordering-Footnote-1557640
+Node: I18N Portability557704
+Ref: I18N Portability-Footnote-1560153
+Node: I18N Example560216
+Ref: I18N Example-Footnote-1562851
+Node: Gawk I18N562923
+Node: Advanced Features563540
+Node: Nondecimal Data564859
+Node: Two-way I/O566440
+Ref: Two-way I/O-Footnote-1571874
+Node: TCP/IP Networking571944
+Node: Profiling574788
+Node: Library Functions582262
+Ref: Library Functions-Footnote-1585269
+Node: Library Names585440
+Ref: Library Names-Footnote-1588911
+Ref: Library Names-Footnote-2589131
+Node: General Functions589217
+Node: Strtonum Function590170
+Node: Assert Function593100
+Node: Round Function596426
+Node: Cliff Random Function597969
+Node: Ordinal Functions598985
+Ref: Ordinal Functions-Footnote-1602055
+Ref: Ordinal Functions-Footnote-2602307
+Node: Join Function602516
+Ref: Join Function-Footnote-1604287
+Node: Gettimeofday Function604487
+Node: Data File Management608202
+Node: Filetrans Function608834
+Node: Rewind Function612973
+Node: File Checking614360
+Node: Empty Files615454
+Node: Ignoring Assigns617684
+Node: Getopt Function619237
+Ref: Getopt Function-Footnote-1630541
+Node: Passwd Functions630744
+Ref: Passwd Functions-Footnote-1639719
+Node: Group Functions639807
+Node: Walking Arrays647891
+Node: Sample Programs649460
+Node: Running Examples650125
+Node: Clones650853
+Node: Cut Program652077
+Node: Egrep Program661922
+Ref: Egrep Program-Footnote-1669695
+Node: Id Program669805
+Node: Split Program673421
+Ref: Split Program-Footnote-1676940
+Node: Tee Program677068
+Node: Uniq Program679871
+Node: Wc Program687300
+Ref: Wc Program-Footnote-1691566
+Ref: Wc Program-Footnote-2691766
+Node: Miscellaneous Programs691858
+Node: Dupword Program693046
+Node: Alarm Program695077
+Node: Translate Program699826
+Ref: Translate Program-Footnote-1704213
+Ref: Translate Program-Footnote-2704441
+Node: Labels Program704575
+Ref: Labels Program-Footnote-1707946
+Node: Word Sorting708030
+Node: History Sorting711914
+Node: Extract Program713753
+Ref: Extract Program-Footnote-1721236
+Node: Simple Sed721364
+Node: Igawk Program724426
+Ref: Igawk Program-Footnote-1739459
+Ref: Igawk Program-Footnote-2739660
+Node: Anagram Program739798
+Node: Signature Program742866
+Node: Debugger743966
+Node: Debugging744877
+Node: Debugging Concepts745290
+Node: Debugging Terms747146
+Node: Awk Debugging749768
+Node: Sample dgawk session750660
+Node: dgawk invocation751152
+Node: Finding The Bug752334
+Node: List of Debugger Commands758820
+Node: Breakpoint Control760131
+Node: Dgawk Execution Control763767
+Node: Viewing And Changing Data767118
+Node: Dgawk Stack770455
+Node: Dgawk Info771915
+Node: Miscellaneous Dgawk Commands775863
+Node: Readline Support781291
+Node: Dgawk Limitations782129
+Node: Language History784318
+Node: V7/SVR3.1785756
+Node: SVR4788077
+Node: POSIX789519
+Node: BTL790527
+Node: POSIX/GNU791261
+Node: Common Extensions796362
+Node: Contributors797463
+Node: Installation801602
+Node: Gawk Distribution802496
+Node: Getting802980
+Node: Extracting803806
+Node: Distribution contents805498
+Node: Unix Installation810720
+Node: Quick Installation811337
+Node: Additional Configuration Options813299
+Node: Configuration Philosophy814776
+Node: Non-Unix Installation817118
+Node: PC Installation817576
+Node: PC Binary Installation818875
+Node: PC Compiling820723
+Node: PC Testing823667
+Node: PC Using824843
+Node: Cygwin829028
+Node: MSYS830028
+Node: VMS Installation830542
+Node: VMS Compilation831145
+Ref: VMS Compilation-Footnote-1832152
+Node: VMS Installation Details832210
+Node: VMS Running833845
+Node: VMS Old Gawk835452
+Node: Bugs835926
+Node: Other Versions839836
+Node: Notes845115
+Node: Compatibility Mode845807
+Node: Additions846590
+Node: Accessing The Source847402
+Node: Adding Code848827
+Node: New Ports854794
+Node: Dynamic Extensions858907
+Node: Internals860283
+Node: Plugin License869386
+Node: Sample Library870020
+Node: Internal File Description870706
+Node: Internal File Ops874421
+Ref: Internal File Ops-Footnote-1879202
+Node: Using Internal File Ops879342
+Node: Future Extensions881719
+Node: Basic Concepts884223
+Node: Basic High Level884980
+Ref: Basic High Level-Footnote-1889015
+Node: Basic Data Typing889200
+Node: Floating Point Issues893725
+Node: String Conversion Precision894808
+Ref: String Conversion Precision-Footnote-1896502
+Node: Unexpected Results896611
+Node: POSIX Floating Point Problems898437
+Ref: POSIX Floating Point Problems-Footnote-1902139
+Node: Glossary902177
+Node: Copying926320
+Node: GNU Free Documentation License963877
+Node: Index989014

End Tag Table