diff options
author | Arnold D. Robbins <arnold@skeeve.com> | 2010-12-15 23:33:49 +0200 |
---|---|---|
committer | Arnold D. Robbins <arnold@skeeve.com> | 2010-12-15 23:33:49 +0200 |
commit | edfb721ac785219e9b881d8ac3a841cef8270a79 (patch) | |
tree | 896975ebdb9331b17157ea6e30f646d3e3c75df6 /doc/gawk.info | |
parent | 9d3481aa7472d05543df77e0b2da9077e5ab3795 (diff) | |
download | egawk-edfb721ac785219e9b881d8ac3a841cef8270a79.tar.gz egawk-edfb721ac785219e9b881d8ac3a841cef8270a79.tar.bz2 egawk-edfb721ac785219e9b881d8ac3a841cef8270a79.zip |
Doc fixes.
Diffstat (limited to 'doc/gawk.info')
-rw-r--r-- | doc/gawk.info | 515 |
1 files changed, 270 insertions, 245 deletions
diff --git a/doc/gawk.info b/doc/gawk.info index 3c648bf4..78385ba5 100644 --- a/doc/gawk.info +++ b/doc/gawk.info @@ -15560,7 +15560,7 @@ language contributes to learning that language. This major node continues that theme, presenting a potpourri of `awk' programs for your reading enjoyment. - Many of these programs use the library functions presented in *note + Many of these programs use library functions presented in *note Library Functions::. * Menu: @@ -15598,11 +15598,11 @@ File: gawk.info, Node: Clones, Next: Miscellaneous Programs, Prev: Running Ex 13.2 Reinventing Wheels for Fun and Profit ========================================== -This minor node presents a number of POSIX utilities that are -implemented in `awk'. Reinventing these programs in `awk' is often -enjoyable, because the algorithms can be very clearly expressed, and -the code is usually very concise and simple. This is true because -`awk' does so much for you. +This minor node presents a number of POSIX utilities implemented in +`awk'. Reinventing these programs in `awk' is often enjoyable, because +the algorithms can be very clearly expressed, and the code is usually +very concise and simple. This is true because `awk' does so much for +you. It should be noted that these programs are not necessarily intended to replace the installed versions on your system. Instead, their @@ -15651,7 +15651,7 @@ pipeline generates a sorted, unique list of the logged-on users: Use LIST as the list of fields to cut out. `-d DELIM' - Use DELIM as the field-separator character instead of the tab + Use DELIM as the field-separator character instead of the TAB character. `-s' @@ -15662,10 +15662,12 @@ function (*note Getopt Function::) and the `join()' library function (*note Join Function::). The program begins with a comment describing the options, the library -functions needed, and a `usage' function that prints out a usage -message and exits. `usage' is called if invalid arguments are supplied: +functions needed, and a `usage()' function that prints out a usage +message and exits. `usage()' is called if invalid arguments are +supplied: # cut.awk --- implement cut in awk + # Options: # -f list Cut fields # -d c Field delimiter character @@ -15689,12 +15691,12 @@ on the screen. Next comes a `BEGIN' rule that parses the command-line options. It sets `FS' to a single TAB character, because that is `cut''s default -field separator. The output field separator is also set to be the same -as the input field separator. Then `getopt()' is used to step through -the command-line options. Exactly one of the variables `by_fields' or -`by_chars' is set to true, to indicate that processing should be done -by fields or by characters, respectively. When cutting by characters, -the output field separator is set to the null string: +field separator. The rule then sets the output field separator to be the +same as the input field separator. A loop using `getopt()' steps +through the command-line options. Exactly one of the variables +`by_fields' or `by_chars' is set to true, to indicate that processing +should be done by fields or by characters, respectively. When cutting +by characters, the output field separator is set to the null string: BEGIN \ { @@ -15711,7 +15713,7 @@ the output field separator is set to the null string: } else if (c == "d") { if (length(Optarg) > 1) { printf("Using first character of %s" \ - " for delimiter\n", Optarg) > "/dev/stderr" + " for delimiter\n", Optarg) > "/dev/stderr" Optarg = substr(Optarg, 1, 1) } FS = Optarg @@ -15724,22 +15726,23 @@ the output field separator is set to the null string: usage() } + # Clear out options for (i = 1; i < Optind; i++) ARGV[i] = "" - Special care is taken when the field delimiter is a space. Using a -single space (`" "') for the value of `FS' is incorrect--`awk' would -separate fields with runs of spaces, tabs, and/or newlines, and we want -them to be separated with individual spaces. Also remember that after -`getopt()' is through (as described in *note Getopt Function::), we -have to clear out all the elements of `ARGV' from 1 to `Optind', so -that `awk' does not try to process the command-line options as file -names. + The code must take special care when the field delimiter is a space. +Using a single space (`" "') for the value of `FS' is incorrect--`awk' +would separate fields with runs of spaces, TABs, and/or newlines, and +we want them to be separated with individual spaces. Also remember +that after `getopt()' is through (as described in *note Getopt +Function::), we have to clear out all the elements of `ARGV' from 1 to +`Optind', so that `awk' does not try to process the command-line options +as file names. After dealing with the command-line options, the program verifies that the options make sense. Only one or the other of `-c' and `-f' should be used, and both require a field list. Then the program calls -either `set_fieldlist' or `set_charlist' to pull apart the list of +either `set_fieldlist()' or `set_charlist()' to pull apart the list of fields or characters: if (by_fields && by_chars) @@ -15759,13 +15762,14 @@ fields or characters: set_charlist() } - `set_fieldlist' is used to split the field list apart at the commas -and into an array. Then, for each element of the array, it looks to -see if it is actually a range, and if so, splits it apart. The range is -verified to make sure the first number is smaller than the second. -Each number in the list is added to the `flist' array, which simply -lists the fields that will be printed. Normal field splitting is used. -The program lets `awk' handle the job of doing the field splitting: + `set_fieldlist()' splits the field list apart at the commas into an +array. Then, for each element of the array, it looks to see if the +element is actually a range, and if so, splits it apart. The function +checks the range to make sure that the first number is smaller than the +second. Each number in the list is added to the `flist' array, which +simply lists the fields that will be printed. Normal field splitting +is used. The program lets `awk' handle the job of doing the field +splitting: function set_fieldlist( n, m, i, j, k, f, g) { @@ -15787,10 +15791,10 @@ The program lets `awk' handle the job of doing the field splitting: nfields = j - 1 } - The `set_charlist' function is more complicated than `set_fieldlist'. -The idea here is to use `gawk''s `FIELDWIDTHS' variable (*note Constant -Size::), which describes constant-width input. When using a character -list, that is exactly what we have. + The `set_charlist()' function is more complicated than +`set_fieldlist()'. The idea here is to use `gawk''s `FIELDWIDTHS' +variable (*note Constant Size::), which describes constant-width input. +When using a character list, that is exactly what we have. Setting up `FIELDWIDTHS' is more complicated than simply listing the fields that need to be printed. We have to keep track of the fields to @@ -15884,7 +15888,7 @@ File: gawk.info, Node: Egrep Program, Next: Id Program, Prev: Cut Program, U The `egrep' utility searches files for patterns. It uses regular expressions that are almost identical to those available in `awk' -(*note Regexp::). It is used in the following manner: +(*note Regexp::). You invoke it as follows: egrep [ OPTIONS ] 'PATTERN' FILES ... @@ -15931,6 +15935,7 @@ that processes the command-line arguments with `getopt()'. The `-i' `IGNORECASE' built-in variable (*note Built-in Variables::): # egrep.awk --- simulate egrep in awk + # # Options: # -c count of lines # -s silent - use exit value @@ -15996,9 +16001,9 @@ since it is not necessary with `gawk': # $0 = tolower($0) #} - The `beginfile' function is called by the rule in `ftrans.awk' when -each new file is processed. In this case, it is very simple; all it -does is initialize a variable `fcount' to zero. `fcount' tracks how + The `beginfile()' function is called by the rule in `ftrans.awk' +when each new file is processed. In this case, it is very simple; all +it does is initialize a variable `fcount' to zero. `fcount' tracks how many lines in the current file matched the pattern (naming the parameter `junk' shows we know that `beginfile' is called with a parameter, but that we're not interested in its value): @@ -16008,22 +16013,23 @@ parameter, but that we're not interested in its value): fcount = 0 } - The `endfile' function is called after each file has been processed. -It affects the output only when the user wants a count of the number of -lines that matched. `no_print' is true only if the exit status is -desired. `count_only' is true if line counts are desired. `egrep' -therefore only prints line counts if printing and counting are enabled. -The output format must be adjusted depending upon the number of files to -process. Finally, `fcount' is added to `total', so that we know the -total number of lines that matched the pattern: + The `endfile()' function is called after each file has been +processed. It affects the output only when the user wants a count of +the number of lines that matched. `no_print' is true only if the exit +status is desired. `count_only' is true if line counts are desired. +`egrep' therefore only prints line counts if printing and counting are +enabled. The output format must be adjusted depending upon the number +of files to process. Finally, `fcount' is added to `total', so that we +know the total number of lines that matched the pattern: function endfile(file) { - if (! no_print && count_only) + if (! no_print && count_only) { if (do_filenames) print file ":" fcount else print fcount + } total += fcount } @@ -16080,7 +16086,7 @@ there are no matches, the exit status is one; otherwise it is zero: exit 0 } - The `usage' function prints a usage message in case of invalid + The `usage()' function prints a usage message in case of invalid options, and then exits: function usage( e) @@ -16119,7 +16125,7 @@ different from the real ones. If possible, `id' also supplies the corresponding user and group names. The output might look like this: $ id - -| uid=2076(arnold) gid=10(staff) groups=10(staff),4(tty) + -| uid=500(arnold) gid=500(arnold) groups=6(disk),7(lp),19(floppy) This information is part of what is provided by `gawk''s `PROCINFO' array (*note Built-in Variables::). However, the `id' utility provides @@ -16220,7 +16226,7 @@ File: gawk.info, Node: Split Program, Next: Tee Program, Prev: Id Program, U ----------------------------------------- The `split' program splits large text files into smaller pieces. Usage -is as follows: +is as follows:(1) split [-COUNT] file [ PREFIX ] @@ -16245,7 +16251,7 @@ output file names: # split.awk --- do split in awk # - # Requires ord and chr library functions + # Requires ord() and chr() library functions # usage: split [-num] [file] [outname] BEGIN { @@ -16255,7 +16261,7 @@ output file names: usage() i = 1 - if (ARGV[i] ~ /^-[0-9]+$/) { + if (ARGV[i] ~ /^-[[:digit:]]+$/) { count = -ARGV[i] ARGV[i] = "" i++ @@ -16300,7 +16306,7 @@ moves to the next letter in the alphabet and `s2' starts over again at print > out } -The `usage' function simply prints an error message and exits: +The `usage()' function simply prints an error message and exits: function usage( e) { @@ -16316,6 +16322,11 @@ close the last file instead of doing it in an `END' rule. It also assumes that letters are contiguous in the character set, which isn't true for EBCDIC systems. + ---------- Footnotes ---------- + + (1) This is the traditional usage. The POSIX usage is different, but +not relevant for what the program aims to demonstrate. + File: gawk.info, Node: Tee Program, Next: Uniq Program, Prev: Split Program, Up: Clones @@ -16342,8 +16353,11 @@ less than two, then no file names were supplied and `tee' prints a usage message and exits. Finally, `awk' is forced to read the standard input by setting `ARGV[1]' to `"-"' and `ARGC' to two: - *FIXME: NEXT ED:* Add more leading commentary in this program # tee.awk --- tee in awk + # + # Copy standard input to all named output files. + # Append content if -a option is supplied. + # BEGIN \ { for (i = 1; i < ARGC; i++) @@ -16363,10 +16377,10 @@ input by setting `ARGV[1]' to `"-"' and `ARGC' to two: ARGC = 2 } - The single rule does all the work. Since there is no pattern, it is -executed for each line of input. The body of the rule simply prints the -line into each file on the command line, and then to the standard -output: + The following single rule does all the work. Since there is no +pattern, it is executed for each line of input. The body of the rule +simply prints the line into each file on the command line, and then to +the standard output: { # moving the if outside the loop makes it run faster @@ -16449,12 +16463,12 @@ provided. `uniq' uses the `getopt()' library function (*note Getopt Function::) and the `join()' library function (*note Join Function::). - The program begins with a `usage' function and then a brief outline -of the options and their meanings in a comment. The `BEGIN' rule deals -with the command-line arguments and options. It uses a trick to get -`getopt()' to handle options of the form `-25', treating such an option -as the option letter `2' with an argument of `5'. If indeed two or more -digits are supplied (`Optarg' looks like a number), `Optarg' is + The program begins with a `usage()' function and then a brief +outline of the options and their meanings in comments. The `BEGIN' +rule deals with the command-line arguments and options. It uses a trick +to get `getopt()' to handle options of the form `-25', treating such an +option as the option letter `2' with an argument of `5'. If indeed two +or more digits are supplied (`Optarg' looks like a number), `Optarg' is concatenated with the option digit and then the result is added to zero to make it into a number. If there is only one digit in the option, then `Optarg' is not needed. In this case, `Optind' must be decremented @@ -16468,7 +16482,8 @@ standard output, `/dev/stdout': # uniq.awk --- do uniq in awk # - # Requires getopt and join library functions + # Requires getopt() and join() library functions + # function usage( e) { e = "Usage: uniq [-udc [-n]] [+n] [ in [ out ]]" @@ -16478,7 +16493,7 @@ standard output, `/dev/stdout': # -c count lines. overrides -d and -u # -d only repeated lines - # -u only non-repeated lines + # -u only nonrepeated lines # -n skip n fields # +n skip n characters, skip fields first @@ -16524,10 +16539,10 @@ standard output, `/dev/stdout': } } - The following function, `are_equal', compares the current line, + The following function, `are_equal()', compares the current line, `$0', to the previous line, `last'. It handles skipping fields and characters. If no field count and no character count are specified, -`are_equal' simply returns one or zero depending upon the result of a +`are_equal()' simply returns one or zero depending upon the result of a simple string comparison of `last' and `$0'. Otherwise, things get more complicated. If fields have to be skipped, each line is broken into an array using `split()' (*note String Functions::); the desired fields @@ -16536,7 +16551,7 @@ stored in `clast' and `cline'. If no fields are skipped, `clast' and `cline' are set to `last' and `$0', respectively. Finally, if characters are skipped, `substr()' is used to strip off the leading `charcount' characters in `clast' and `cline'. The two strings are -then compared and `are_equal' returns the result: +then compared and `are_equal()' returns the result: function are_equal( n, m, clast, cline, alast, aline) { @@ -16566,7 +16581,7 @@ to `$0', so that subsequent lines of text have something to be compared to. The second rule does the work. The variable `equal' is one or zero, -depending upon the results of `are_equal''s comparison. If `uniq' is +depending upon the results of `are_equal()''s comparison. If `uniq' is counting repeated lines, and the lines are equal, then it increments the `count' variable. Otherwise, it prints the line and resets `count', since the two lines are not equal. @@ -16616,6 +16631,7 @@ line of input data: else if ((repeated_only && count > 1) || (non_repeated_only && count == 1)) print last > outputfile + close(outputfile) } @@ -16651,8 +16667,9 @@ a lot of the work for us; it splits lines into words (i.e., fields) and counts them, it counts lines (i.e., records), and it can easily tell us how long a line is. - This uses the `getopt()' library function (*note Getopt Function::) -and the file-transition functions (*note Filetrans Function::). + This program uses the `getopt()' library function (*note Getopt +Function::) and the file-transition functions (*note Filetrans +Function::). This version has one notable difference from traditional versions of `wc': it always prints the counts in the order lines, words, and @@ -16672,10 +16689,10 @@ line: # # Default is to count lines, words, characters # - # Requires getopt and file transition library functions + # Requires getopt() and file transition library functions BEGIN { - # let getopt print a message about + # let getopt() print a message about # invalid options. we ignore them while ((c = getopt(ARGC, ARGV, "lwc")) != -1) { if (c == "l") @@ -16695,7 +16712,7 @@ line: print_total = (ARGC - i > 2) } - The `beginfile' function is simple; it just resets the counts of + The `beginfile()' function is simple; it just resets the counts of lines, words, and characters to zero, and saves the current file name in `fname': @@ -16705,10 +16722,10 @@ lines, words, and characters to zero, and saves the current file name in fname = FILENAME } - The `endfile' function adds the current file's numbers to the running -totals of lines, words, and characters.(1) It then prints out those -numbers for the file that was just read. It relies on `beginfile' to -reset the numbers for the following data file: + The `endfile()' function adds the current file's numbers to the +running totals of lines, words, and characters.(1) It then prints out +those numbers for the file that was just read. It relies on +`beginfile()' to reset the numbers for the following data file: function endfile(file) { @@ -16755,9 +16772,9 @@ this line: ---------- Footnotes ---------- - (1) `wc' can't just use the value of `FNR' in `endfile'. If you + (1) `wc' can't just use the value of `FNR' in `endfile()'. If you examine the code in *note Filetrans Function::, you will see that `FNR' -has already been reset by the time `endfile' is called. +has already been reset by the time `endfile()' is called. File: gawk.info, Node: Miscellaneous Programs, Prev: Clones, Up: Sample Programs @@ -16857,12 +16874,14 @@ to print. If the user supplied a message without the ASCII BEL character (known as the "alert" character, `"\a"'), then it is added to the message. (On many systems, printing the ASCII BEL generates an audible alert. Thus when the alarm goes off, the system calls attention -to itself in case the user is not looking at the computer or terminal.) -Here is the program: +to itself in case the user is not looking at the computer.) Just for a +change, this program uses a `switch' statement (*note Switch +Statement::), but the processing could be done with a series of +`if'-`else' statements instead. Here is the program: # alarm.awk --- set an alarm # - # Requires gettimeofday library function + # Requires gettimeofday() library function # usage: alarm time [ "message" [ count [ delay ] ] ] BEGIN \ @@ -16875,19 +16894,24 @@ Here is the program: print usage1 > "/dev/stderr" print usage2 > "/dev/stderr" exit 1 - } else if (ARGC == 5) { + } + switch (ARGC) { + case 5: delay = ARGV[4] + 0 + # fall through + case 4: count = ARGV[3] + 0 + # fall through + case 3: message = ARGV[2] - } else if (ARGC == 4) { - count = ARGV[3] + 0 - message = ARGV[2] - } else if (ARGC == 3) { - message = ARGV[2] - } else if (ARGV[1] !~ /[0-9]?[0-9]:[0-9][0-9]/) { - print usage1 > "/dev/stderr" - print usage2 > "/dev/stderr" - exit 1 + break + default: + if (ARGV[1] !~ /[[:digit:]]?[[:digit:]]:[[:digit:]][[:digit:]]/) { + print usage1 > "/dev/stderr" + print usage2 > "/dev/stderr" + exit 1 + } + break } # set defaults for once we reach the desired time @@ -17077,9 +17101,9 @@ program. ---------- Footnotes ---------- - (1) On some older System V systems, `tr' may require that the lists -be written as range expressions enclosed in square brackets (`[a-z]') -and quoted, to prevent the shell from attempting a file name expansion. + (1) On some older systems, `tr' may require that the lists be +written as range expressions enclosed in square brackets (`[a-z]') and +quoted, to prevent the shell from attempting a file name expansion. This is not a feature. (2) This program was written before `gawk' acquired the ability to @@ -17607,12 +17631,12 @@ correct. However, if the file did not end in text that matches `RS', `printf' (*note Printf::). The `BEGIN' rule handles the setup, checking for the right number of -arguments and calling `usage' if there is a problem. Then it sets `RS' -and `ORS' from the command-line arguments and sets `ARGV[1]' and +arguments and calling `usage()' if there is a problem. Then it sets +`RS' and `ORS' from the command-line arguments and sets `ARGV[1]' and `ARGV[2]' to the null string, so that they are not treated as file names (*note ARGC and ARGV::). - The `usage' function prints an error message and exits. Finally, + The `usage()' function prints an error message and exits. Finally, the single rule handles the printing scheme outlined above, using `print' or `printf' as appropriate, depending upon the value of `RT'. @@ -18254,8 +18278,8 @@ we wrote: problem like this is to put a breakpoint in the program so that we can watch it at work and catch what it is doing wrong. A reasonable spot for a breakpoint in `uniq.awk' is at the beginning of the function -`are_equal', which compares the current line with the previous one. To -set the breakpoint, use the `b' (breakpoint) command: +`are_equal()', which compares the current line with the previous one. +To set the breakpoint, use the `b' (breakpoint) command: dgawk> b are_equal -| Breakpoint 1 set at file `awklib/eg/prog/uniq.awk', line 64 @@ -18280,15 +18304,15 @@ current stack frames: -| #0 are_equal(n, m, clast, cline, alast, aline) at `awklib/eg/prog/uniq.awk':69 -| #1 in main() at `awklib/eg/prog/uniq.awk':89 - This tells us that `are_equal' was called by the main program at + This tells us that `are_equal()' was called by the main program at line 89 of `uniq.awk'. (This is not a big surprise, since this is the -only call to `are_equal' in the program, but in more complex programs, -knowing who called a function and with what parameters can be the key -to finding the source of the problem.) +only call to `are_equal()' in the program, but in more complex +programs, knowing who called a function and with what parameters can be +the key to finding the source of the problem.) - Now that we're in `are_equal', we can start looking at the values of -some variables. Let's say we type `p n' (`p' is short for "print"). -We would expect to see the value of `n', a parameter to `are_equal'. + Now that we're in `are_equal()', we can start looking at the values +of some variables. Let's say we type `p n' (`p' is short for "print"). +We would expect to see the value of `n', a parameter to `are_equal()'. Actually, `dgawk' gives us: dgawk> p n @@ -18308,9 +18332,9 @@ our test input above. Let's look at `NR': dgawk> p NR -| NR = number (2) -So we can see that `are_equal' was only called for the second record of -the file. Of course, this is because our program contained a rule for -`NR == 1': +So we can see that `are_equal()' was only called for the second record +of the file. Of course, this is because our program contained a rule +for `NR == 1': NR == 1 { last = $0 @@ -18323,10 +18347,10 @@ the file. Of course, this is because our program contained a rule for -| last = string ("awk is a wonderful program!") Everything we have done so far has verified that the program has -worked as planned, up to and including the call to `are_equal', so the -problem must be inside this function. To investigate further, we have -to begin "stepping through" the lines of `are_equal'. We start by -typing `n' (for "next"): +worked as planned, up to and including the call to `are_equal()', so +the problem must be inside this function. To investigate further, we +have to begin "stepping through" the lines of `are_equal()'. We start +by typing `n' (for "next"): dgawk> n -| 67 if (fcount > 0) { @@ -24458,7 +24482,7 @@ Index * Menu: * ! (exclamation point), ! operator: Boolean Ops. (line 67) -* ! (exclamation point), ! operator <1>: Egrep Program. (line 160) +* ! (exclamation point), ! operator <1>: Egrep Program. (line 162) * ! (exclamation point), ! operator: Precedence. (line 52) * ! (exclamation point), != operator <1>: Precedence. (line 65) * ! (exclamation point), != operator: Comparison Operators. @@ -24472,7 +24496,7 @@ Index * ! (exclamation point), !~ operator <5>: Computed Regexps. (line 6) * ! (exclamation point), !~ operator <6>: Case-sensitivity. (line 26) * ! (exclamation point), !~ operator: Regexp Usage. (line 19) -* ! operator <1>: Egrep Program. (line 168) +* ! operator <1>: Egrep Program. (line 170) * ! operator: Ranges. (line 48) * " (double quote) <1>: Quoting. (line 37) * " (double quote): Read Terminal. (line 25) @@ -24689,7 +24713,7 @@ Index (line 38) * \ (backslash), as field separators: Command Line Field Separator. (line 27) -* \ (backslash), continuing lines and <1>: Egrep Program. (line 218) +* \ (backslash), continuing lines and <1>: Egrep Program. (line 220) * \ (backslash), continuing lines and: Statements/Lines. (line 19) * \ (backslash), continuing lines and, comments and: Statements/Lines. (line 75) @@ -24755,7 +24779,7 @@ Index * Aho, Alfred <1>: Contributors. (line 12) * Aho, Alfred: History. (line 17) * alarm clock example program: Alarm Program. (line 9) -* alarm.awk program: Alarm Program. (line 27) +* alarm.awk program: Alarm Program. (line 29) * algorithms: Basic High Level. (line 68) * Alpha (DEC): Manual History. (line 28) * amazing awk assembler (aaa): Glossary. (line 12) @@ -24944,7 +24968,7 @@ Index (line 38) * backslash (\), as field separators: Command Line Field Separator. (line 27) -* backslash (\), continuing lines and <1>: Egrep Program. (line 218) +* backslash (\), continuing lines and <1>: Egrep Program. (line 220) * backslash (\), continuing lines and: Statements/Lines. (line 19) * backslash (\), continuing lines and, comments and: Statements/Lines. (line 75) @@ -24980,7 +25004,7 @@ Index * BEGIN pattern, pgawk program: Profiling. (line 65) * BEGIN pattern, print statement and: I/O And BEGIN/END. (line 16) * BEGIN pattern, pwcat program: Passwd Functions. (line 144) -* BEGIN pattern, running awk programs and: Cut Program. (line 66) +* BEGIN pattern, running awk programs and: Cut Program. (line 68) * BEGIN pattern, TEXTDOMAIN variable and: Programmer i18n. (line 59) * BEGINFILE pattern, Boolean patterns and: Expression Patterns. (line 73) @@ -25185,7 +25209,7 @@ Index * custom.h file: Configuration Philosophy. (line 29) * cut utility: Cut Program. (line 6) -* cut.awk program: Cut Program. (line 44) +* cut.awk program: Cut Program. (line 45) * d debugger command (alias for break): Breakpoint Control. (line 57) * d.c., See dark corner: Conventions. (line 37) * dark corner <1>: Glossary. (line 187) @@ -25474,7 +25498,7 @@ Index * END pattern: BEGIN/END. (line 6) * END pattern, assert() user-defined function and: Assert Function. (line 75) -* END pattern, backslash continuation and: Egrep Program. (line 218) +* END pattern, backslash continuation and: Egrep Program. (line 220) * 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. @@ -25516,7 +25540,7 @@ Index * evaluation order, concatenation: Concatenation. (line 42) * evaluation order, functions: Calling Built-in. (line 30) * examining fields: Fields. (line 6) -* exclamation point (!), ! operator <1>: Egrep Program. (line 160) +* exclamation point (!), ! operator <1>: Egrep Program. (line 162) * exclamation point (!), ! operator <2>: Precedence. (line 52) * exclamation point (!), ! operator: Boolean Ops. (line 67) * exclamation point (!), != operator <1>: Precedence. (line 65) @@ -25585,7 +25609,7 @@ Index (line 6) * field separators, regular expressions as: Field Separators. (line 50) * field separators, See Also OFS: Changing Fields. (line 64) -* field separators, spaces as: Cut Program. (line 106) +* field separators, spaces as: Cut Program. (line 109) * fields <1>: Basic High Level. (line 73) * fields <2>: Fields. (line 6) * fields: Reading Files. (line 14) @@ -25707,7 +25731,7 @@ Index (line 20) * FS variable, as TAB character: Options. (line 218) * FS variable, changing value of: Field Separators. (line 34) -* FS variable, running awk programs and: Cut Program. (line 66) +* FS variable, running awk programs and: Cut Program. (line 68) * FS variable, setting from command line: Command Line Field Separator. (line 6) * FS, containing ^: Regexp Field Splitting. @@ -26765,7 +26789,7 @@ Index (line 6) * single-precision floating-point: Basic Data Typing. (line 33) * Skywalker, Luke: Undocumented. (line 6) -* sleep utility: Alarm Program. (line 102) +* sleep utility: Alarm Program. (line 109) * Solaris, POSIX compliant awk: Other Versions. (line 101) * sort function, arrays, sorting: Array Sorting. (line 6) * sort utility: Word Sorting. (line 56) @@ -27044,7 +27068,7 @@ Index * watch debugger command: Viewing And Changing Data. (line 67) * wc utility: Wc Program. (line 6) -* wc.awk program: Wc Program. (line 45) +* wc.awk program: Wc Program. (line 46) * Weinberger, Peter <1>: Contributors. (line 12) * Weinberger, Peter: History. (line 17) * while statement <1>: While Statement. (line 6) @@ -27392,119 +27416,120 @@ Node: Passwd Functions618133 Ref: Passwd Functions-Footnote-1627121 Node: Group Functions627209 Node: Sample Programs635289 -Node: Running Examples635958 -Node: Clones636686 -Node: Cut Program637818 -Node: Egrep Program647585 -Ref: Egrep Program-Footnote-1655339 -Node: Id Program655449 -Node: Split Program659056 -Node: Tee Program662524 -Node: Uniq Program665267 -Node: Wc Program672644 -Ref: Wc Program-Footnote-1676890 -Node: Miscellaneous Programs677086 -Node: Dupword Program678206 -Node: Alarm Program680237 -Node: Translate Program684781 -Ref: Translate Program-Footnote-1689160 -Ref: Translate Program-Footnote-2689397 -Node: Labels Program689531 -Ref: Labels Program-Footnote-1692822 -Node: Word Sorting692906 -Node: History Sorting697253 -Node: Extract Program699091 -Node: Simple Sed706454 -Node: Igawk Program709511 -Ref: Igawk Program-Footnote-1724246 -Ref: Igawk Program-Footnote-2724447 -Node: Signature Program724585 -Node: Debugger725665 -Node: Debugging726541 -Node: Debugging Concepts726855 -Node: Debugging Terms728708 -Node: Awk Debugging731256 -Node: Sample dgawk session732148 -Node: dgawk invocation732640 -Node: Finding The Bug733824 -Node: List of Debugger Commands740339 -Node: Breakpoint Control741654 -Node: Dgawk Execution Control744864 -Node: Viewing And Changing Data748213 -Node: Dgawk Stack751509 -Node: Dgawk Info752970 -Node: Miscellaneous Dgawk Commands756908 -Node: Readline Support762624 -Node: Dgawk Limitations763440 -Node: Language History765612 -Node: V7/SVR3.1766989 -Node: SVR4769284 -Node: POSIX770729 -Node: BTL772441 -Node: POSIX/GNU774131 -Node: Contributors783878 -Node: Installation787487 -Node: Gawk Distribution788458 -Node: Getting788942 -Node: Extracting789768 -Node: Distribution contents791156 -Node: Unix Installation796229 -Node: Quick Installation796820 -Node: Additional Configuration Options798522 -Node: Configuration Philosophy800285 -Node: Non-Unix Installation802649 -Node: PC Installation803114 -Node: PC Binary Installation804420 -Node: PC Compiling806263 -Node: PC Dynamic810768 -Node: PC Using813131 -Node: Cygwin817679 -Node: MSYS818663 -Node: VMS Installation819169 -Node: VMS Compilation819773 -Node: VMS Installation Details821350 -Node: VMS Running822980 -Node: VMS POSIX824577 -Node: VMS Old Gawk825875 -Node: Unsupported826344 -Node: Atari Installation826806 -Node: Atari Compiling828093 -Node: Atari Using829982 -Node: BeOS Installation832829 -Node: Tandem Installation833974 -Node: Bugs835653 -Node: Other Versions839485 -Node: Notes844707 -Node: Compatibility Mode845399 -Node: Additions846182 -Node: Adding Code846932 -Node: New Ports852984 -Node: Dynamic Extensions857116 -Node: Internals858497 -Node: Plugin License868902 -Node: Sample Library869536 -Node: Internal File Description870200 -Node: Internal File Ops873895 -Ref: Internal File Ops-Footnote-1878771 -Node: Using Internal File Ops878919 -Node: Future Extensions880944 -Node: Basic Concepts884981 -Node: Basic High Level885738 -Ref: Basic High Level-Footnote-1889857 -Node: Basic Data Typing890051 -Node: Floating Point Issues894488 -Node: String Conversion Precision895571 -Ref: String Conversion Precision-Footnote-1897265 -Node: Unexpected Results897374 -Node: POSIX Floating Point Problems899200 -Ref: POSIX Floating Point Problems-Footnote-1902899 -Node: Glossary902937 -Node: Copying926720 -Node: GNU Free Documentation License964277 -Node: next-edition989421 -Node: unresolved989773 -Node: revision990273 -Node: consistency990696 -Node: Index994049 +Node: Running Examples635954 +Node: Clones636682 +Node: Cut Program637805 +Node: Egrep Program647646 +Ref: Egrep Program-Footnote-1655417 +Node: Id Program655527 +Node: Split Program659143 +Ref: Split Program-Footnote-1662662 +Node: Tee Program662790 +Node: Uniq Program665593 +Node: Wc Program673016 +Ref: Wc Program-Footnote-1677280 +Node: Miscellaneous Programs677480 +Node: Dupword Program678600 +Node: Alarm Program680631 +Node: Translate Program685353 +Ref: Translate Program-Footnote-1689732 +Ref: Translate Program-Footnote-2689960 +Node: Labels Program690094 +Ref: Labels Program-Footnote-1693385 +Node: Word Sorting693469 +Node: History Sorting697816 +Node: Extract Program699654 +Node: Simple Sed707017 +Node: Igawk Program710078 +Ref: Igawk Program-Footnote-1724813 +Ref: Igawk Program-Footnote-2725014 +Node: Signature Program725152 +Node: Debugger726232 +Node: Debugging727108 +Node: Debugging Concepts727422 +Node: Debugging Terms729275 +Node: Awk Debugging731823 +Node: Sample dgawk session732715 +Node: dgawk invocation733207 +Node: Finding The Bug734391 +Node: List of Debugger Commands740922 +Node: Breakpoint Control742237 +Node: Dgawk Execution Control745447 +Node: Viewing And Changing Data748796 +Node: Dgawk Stack752092 +Node: Dgawk Info753553 +Node: Miscellaneous Dgawk Commands757491 +Node: Readline Support763207 +Node: Dgawk Limitations764023 +Node: Language History766195 +Node: V7/SVR3.1767572 +Node: SVR4769867 +Node: POSIX771312 +Node: BTL773024 +Node: POSIX/GNU774714 +Node: Contributors784461 +Node: Installation788070 +Node: Gawk Distribution789041 +Node: Getting789525 +Node: Extracting790351 +Node: Distribution contents791739 +Node: Unix Installation796812 +Node: Quick Installation797403 +Node: Additional Configuration Options799105 +Node: Configuration Philosophy800868 +Node: Non-Unix Installation803232 +Node: PC Installation803697 +Node: PC Binary Installation805003 +Node: PC Compiling806846 +Node: PC Dynamic811351 +Node: PC Using813714 +Node: Cygwin818262 +Node: MSYS819246 +Node: VMS Installation819752 +Node: VMS Compilation820356 +Node: VMS Installation Details821933 +Node: VMS Running823563 +Node: VMS POSIX825160 +Node: VMS Old Gawk826458 +Node: Unsupported826927 +Node: Atari Installation827389 +Node: Atari Compiling828676 +Node: Atari Using830565 +Node: BeOS Installation833412 +Node: Tandem Installation834557 +Node: Bugs836236 +Node: Other Versions840068 +Node: Notes845290 +Node: Compatibility Mode845982 +Node: Additions846765 +Node: Adding Code847515 +Node: New Ports853567 +Node: Dynamic Extensions857699 +Node: Internals859080 +Node: Plugin License869485 +Node: Sample Library870119 +Node: Internal File Description870783 +Node: Internal File Ops874478 +Ref: Internal File Ops-Footnote-1879354 +Node: Using Internal File Ops879502 +Node: Future Extensions881527 +Node: Basic Concepts885564 +Node: Basic High Level886321 +Ref: Basic High Level-Footnote-1890440 +Node: Basic Data Typing890634 +Node: Floating Point Issues895071 +Node: String Conversion Precision896154 +Ref: String Conversion Precision-Footnote-1897848 +Node: Unexpected Results897957 +Node: POSIX Floating Point Problems899783 +Ref: POSIX Floating Point Problems-Footnote-1903482 +Node: Glossary903520 +Node: Copying927303 +Node: GNU Free Documentation License964860 +Node: next-edition990004 +Node: unresolved990356 +Node: revision990856 +Node: consistency991279 +Node: Index994632 End Tag Table |